38#ifndef NRF24L01_DRIVER_NRF24L01_H
39#define NRF24L01_DRIVER_NRF24L01_H
45#include "stm32f1xx_hal.h"
54#define EMPTY_DATA (uint8_t *)0xFF
68#define SETUP_RETR 0x04
72#define OBSERVE_TX 0x08
74#define RX_ADDR_P0 0x0A
75#define RX_ADDR_P1 0x0B
76#define RX_ADDR_P2 0x0C
77#define RX_ADDR_P3 0x0D
78#define RX_ADDR_P4 0x0E
79#define RX_ADDR_P5 0x0F
87#define FIFO_STATUS 0x17
100#define MASK_RX_DR 0b01000000
101#define MASK_TX_DS 0b00100000
102#define MASK_MAX_RT 0b00010000
103#define EN_CRC 0b00001000
104#define CRCO 0b00000100
105#define PWR_UP 0b00000010
106#define PRIM_RX 0b00000001
109#define ENAA_P5 0b00100000
110#define ENAA_P4 0b00010000
111#define ENAA_P3 0b00001000
112#define ENAA_P2 0b00000100
113#define ENAA_P1 0b00000010
114#define ENAA_P0 0b00000001
117#define ERX_P5 0b00100000
118#define ERX_P4 0b00010000
119#define ERX_P3 0b00001000
120#define ERX_P2 0b00000100
121#define ERX_P1 0b00000010
122#define ERX_P0 0b00000001
126#define AW0 0b00000001
127#define AW1 0b00000010
130#define ARD 0b11110000
131#define ARD0 0b00010000
132#define ARD1 0b00100000
133#define ARD2 0b01000000
134#define ARD3 0b10000000
135#define ARC 0b00001111
136#define ARC0 0b00000001
137#define ARC1 0b00000010
138#define ARC2 0b00000100
139#define ARC3 0b00001000
142#define RF_CH0 0b00000001
143#define RF_CH1 0b00000010
144#define RF_CH2 0b00000100
145#define RF_CH3 0b00001000
146#define RF_CH4 0b00010000
147#define RF_CH5 0b00100000
148#define RF_CH6 0b01000000
151#define PLL_LOCK 0b00010000
152#define RF_DR 0b00001000
153#define RF_PWR 0b00000110
154#define RF_PWR0 0b00000010
155#define RF_PWR1 0b00000100
156#define LNA_HCURR 0b00000001
159#define RX_DR 0b01000000
160#define TX_DS 0b00100000
161#define MAX_RT 0b00010000
162#define RX_P_NO 0b00001110
163#define RX_P_NO0 0b00000010
164#define RX_P_NO1 0b00000100
165#define RX_P_NO2 0b00001000
166#define TX_FULL 0b00000001
169#define PLOS_CNT 0b11110000
170#define PLOS_CNT0 0b00010000
171#define PLOS_CNT1 0b00100000
172#define PLOS_CNT2 0b01000000
173#define PLOS_CNT3 0b10000000
174#define ARC_CNT 0b00001111
175#define ARC_CNT0 0b00000001
176#define ARC_CNT1 0b00000010
177#define ARC_CNT2 0b00000100
178#define ARC_CNT3 0b00001000
184#define TX_REUSE 0b01000000
185#define FIFO_FULL 0b00100000
186#define TX_EMPTY 0b00010000
187#define RX_FULL 0b00000010
188#define RX_EMPTY 0b00000001
191#define EN_DPL 0b00000100
192#define EN_ACK_PAY 0b00000010
193#define EN_DYN_ACK 0b00000001
203#define R_REGISTER 0x00
204#define W_REGISTER 0x20
205#define R_RX_PAYLOAD 0x61
206#define W_TX_PAYLOAD 0xA0
209#define REUSE_TX_PL 0xE3
211#define R_RX_PL_WID 0x60
212#define W_ACK_PAYLOAD 0xA8
213#define W_TX_PAYLOAD_NOACK 0xB0
uint8_t nrf24l01_activate_extra_features(nrf24l01_device *device)
Activate extra features.
Definition nrf24l01.c:429
uint8_t nrf24l01_nop(nrf24l01_device *device)
No operation command.
Definition nrf24l01.c:513
nrf24l01_air_data_rate
Air data rate configuration.
Definition nrf24l01.h:227
nrf24l01_auto_retransmit_delay
Auto retransmit delay settings.
Definition nrf24l01.h:254
nrf24l01_rf_output_power
RF output power levels.
Definition nrf24l01.h:235
nrf24l01_address_width
Address width configuration.
Definition nrf24l01.h:245
nrf24l01_auto_retransmit_count
Auto retransmit count settings.
Definition nrf24l01.h:276
nrf24l01_irq
Interrupt types.
Definition nrf24l01.h:298
@ nrf24l01_air_data_rate_1mbps
Definition nrf24l01.h:228
@ nrf24l01_air_data_rate_2mbps
Definition nrf24l01.h:229
@ nrf24l01_auto_retransmit_delay_500us
Definition nrf24l01.h:256
@ nrf24l01_auto_retransmit_delay_2750us
Definition nrf24l01.h:265
@ nrf24l01_auto_retransmit_delay_250us
Definition nrf24l01.h:255
@ nrf24l01_auto_retransmit_delay_1500us
Definition nrf24l01.h:260
@ nrf24l01_auto_retransmit_delay_3750us
Definition nrf24l01.h:269
@ nrf24l01_auto_retransmit_delay_1250us
Definition nrf24l01.h:259
@ nrf24l01_auto_retransmit_delay_2000us
Definition nrf24l01.h:262
@ nrf24l01_auto_retransmit_delay_1750us
Definition nrf24l01.h:261
@ nrf24l01_auto_retransmit_delay_4000us
Definition nrf24l01.h:270
@ nrf24l01_auto_retransmit_delay_3000us
Definition nrf24l01.h:266
@ nrf24l01_auto_retransmit_delay_3500us
Definition nrf24l01.h:268
@ nrf24l01_auto_retransmit_delay_750us
Definition nrf24l01.h:257
@ nrf24l01_auto_retransmit_delay_3250us
Definition nrf24l01.h:267
@ nrf24l01_auto_retransmit_delay_2250us
Definition nrf24l01.h:263
@ nrf24l01_auto_retransmit_delay_2500us
Definition nrf24l01.h:264
@ nrf24l01_auto_retransmit_delay_1000us
Definition nrf24l01.h:258
@ nrf24l01_rf_output_power_0dbm
Definition nrf24l01.h:239
@ nrf24l01_rf_output_power_minus6dbm
Definition nrf24l01.h:238
@ nrf24l01_rf_output_power_minus12dbm
Definition nrf24l01.h:237
@ nrf24l01_rf_output_power_minus18dbm
Definition nrf24l01.h:236
@ nrf24l01_address_width_3bytes
Definition nrf24l01.h:246
@ nrf24l01_address_width_5bytes
Definition nrf24l01.h:248
@ nrf24l01_address_width_4bytes
Definition nrf24l01.h:247
@ nrf24l01_auto_retransmit_count_2
Definition nrf24l01.h:279
@ nrf24l01_auto_retransmit_count_7
Definition nrf24l01.h:284
@ nrf24l01_auto_retransmit_count_3
Definition nrf24l01.h:280
@ nrf24l01_auto_retransmit_count_4
Definition nrf24l01.h:281
@ nrf24l01_auto_retransmit_count_11
Definition nrf24l01.h:288
@ nrf24l01_auto_retransmit_count_10
Definition nrf24l01.h:287
@ nrf24l01_auto_retransmit_count_12
Definition nrf24l01.h:289
@ nrf24l01_auto_retransmit_count_5
Definition nrf24l01.h:282
@ nrf24l01_auto_retransmit_count_6
Definition nrf24l01.h:283
@ nrf24l01_auto_retransmit_count_1
Definition nrf24l01.h:278
@ nrf24l01_auto_retransmit_count_14
Definition nrf24l01.h:291
@ nrf24l01_auto_retransmit_count_15
Definition nrf24l01.h:292
@ nrf24l01_auto_retransmit_count_9
Definition nrf24l01.h:286
@ nrf24l01_auto_retransmit_count_8
Definition nrf24l01.h:285
@ nrf24l01_auto_retransmit_count_13
Definition nrf24l01.h:290
@ nrf24l01_auto_retransmit_count_disable
Definition nrf24l01.h:277
@ nrf24l01_irq_rx_data_ready
Definition nrf24l01.h:299
@ nrf24l01_irq_tx_data_sent
Definition nrf24l01.h:300
@ nrf24l01_maximum_retransmitted
Definition nrf24l01.h:301
uint8_t nrf24l01_dynamic_ack(nrf24l01_device *device, uint8_t enable)
Enable/disable dynamic ACK.
Definition nrf24l01.c:609
uint8_t nrf24l01_dynamic_payload_length(nrf24l01_device *device, uint8_t enable)
Enable/disable dynamic payload length.
Definition nrf24l01.c:578
uint8_t nrf24l01_payload_with_ack(nrf24l01_device *device, uint8_t enable)
Enable/disable payload with ACK.
Definition nrf24l01.c:594
uint8_t nrf24l01_reuse_tx_payload(nrf24l01_device *device)
Reuse last transmitted payload.
Definition nrf24l01.c:417
uint8_t nrf24l01_flush_rx(nrf24l01_device *device)
Flush RX FIFO.
Definition nrf24l01.c:404
uint8_t nrf24l01_flush_tx(nrf24l01_device *device)
Flush TX FIFO.
Definition nrf24l01.c:393
uint8_t nrf24l01_init(nrf24l01_device *device)
Initialize nRF24L01 device.
Definition nrf24l01.c:85
uint8_t nrf24l01_init_data_pipe(nrf24l01_device *device, uint8_t pipe_number)
Initialize specific data pipe.
Definition nrf24l01.c:197
nrf24l01_device nrf24l01_get_default_config()
Get default device configuration.
Definition nrf24l01.c:3
void nrf24l01_deinit(nrf24l01_device *device)
Deinitialize nRF24L01 device.
uint8_t nrf24l01_interrupt(nrf24l01_device *device, nrf24l01_irq irq, uint8_t enable)
Enable/disable specific interrupt.
Definition nrf24l01.c:710
uint8_t nrf24l01_clear_interrupt_flag(nrf24l01_device *device, nrf24l01_irq irq)
Clear specific interrupt flag.
Definition nrf24l01.c:741
uint8_t nrf24l01_chip_enable(nrf24l01_device *device)
Enable nRF24L01 chip (CE high)
Definition nrf24l01.c:259
uint8_t nrf24l01_chip_disable(nrf24l01_device *device)
Disable nRF24L01 chip (CE low)
Definition nrf24l01.c:265
uint8_t nrf24l01_chip_deselect(nrf24l01_device *device)
Deselect nRF24L01 chip (CSN high)
Definition nrf24l01.c:253
uint8_t nrf24l01_chip_select(nrf24l01_device *device)
Select nRF24L01 chip (CSN low)
Definition nrf24l01.c:247
void nrf24l01_delay(nrf24l01_device *device, uint16_t us)
Generate microsecond delay.
Definition nrf24l01.c:241
uint8_t nrf24l01_send_command(nrf24l01_device *device, uint8_t command)
Send single byte command.
Definition nrf24l01.c:271
uint8_t nrf24l01_transmit(nrf24l01_device *device)
Configure device for transmit mode.
Definition nrf24l01.c:544
uint8_t nrf24l01_listen(nrf24l01_device *device)
Configure device for receive mode.
Definition nrf24l01.c:562
uint8_t nrf24l01_read_rx_payload_width(nrf24l01_device *device, uint8_t *data)
Read top RX payload width.
Definition nrf24l01.c:444
uint8_t nrf24l01_read_rx_payload(nrf24l01_device *device, uint8_t *data, uint16_t length)
Read RX payload from FIFO.
Definition nrf24l01.c:343
uint8_t nrf24l01_write_tx_payload_no_ack(nrf24l01_device *device, uint8_t *data, uint16_t length)
Write TX payload without expecting ACK.
Definition nrf24l01.c:488
uint8_t nrf24l01_write_tx_payload(nrf24l01_device *device, uint8_t *data, uint16_t length)
Write TX payload to FIFO.
Definition nrf24l01.c:369
uint8_t nrf24l01_write_ack_payload(nrf24l01_device *device, uint8_t *data, uint8_t pipe, uint16_t length)
Write ACK payload for specific pipe.
Definition nrf24l01.c:463
uint8_t nrf24l01_data_pipe_auto_ack(nrf24l01_device *device, uint8_t pipe_number, uint8_t enable)
Enable/disable auto-acknowledgment for specific pipe.
Definition nrf24l01.c:661
uint8_t nrf24l01_data_pipe_address(nrf24l01_device *device, uint8_t pipe_number, uint8_t *address, uint8_t length)
Set receive address for specific data pipe.
Definition nrf24l01.c:679
uint8_t nrf24l01_data_pipe_dynamic_payload_length(nrf24l01_device *device, uint8_t pipe_number, uint8_t enable)
Enable/disable dynamic payload length for specific pipe.
Definition nrf24l01.c:624
uint8_t nrf24l01_data_pipe_payload_width(nrf24l01_device *device, uint8_t pipe_number, uint8_t width)
Set payload width for specific data pipe.
Definition nrf24l01.c:701
uint8_t nrf24l01_data_pipe_enable(nrf24l01_device *device, uint8_t pipe_number, uint8_t enable)
Enable/disable specific data pipe.
Definition nrf24l01.c:643
uint8_t nrf24l01_power_down(nrf24l01_device *device)
Power down the nRF24L01 device.
Definition nrf24l01.c:532
uint8_t nrf24l01_power_up(nrf24l01_device *device)
Power up the nRF24L01 device.
Definition nrf24l01.c:518
uint8_t nrf24l01_read_register(nrf24l01_device *device, uint8_t reg, uint8_t *data, uint16_t length)
Read from nRF24L01 register.
Definition nrf24l01.c:290
uint8_t nrf24l01_write_register(nrf24l01_device *device, uint8_t reg, uint8_t *data, uint16_t length)
Write to nRF24L01 register.
Definition nrf24l01.c:316
Data pipe configuration structure.
Definition nrf24l01.h:315
uint8_t nrf24l01_data_pipe_dyn_payload_length_enable
Definition nrf24l01.h:317
uint8_t * nrf24l01_data_pipe_receive_address
Definition nrf24l01.h:319
uint8_t * nrf24l01_data_pipe_payload
Definition nrf24l01.h:321
uint8_t nrf24l01_data_pipe_auto_ack
Definition nrf24l01.h:318
uint8_t nrf24l01_data_pipe_payload_width
Definition nrf24l01.h:320
uint8_t nrf24l01_data_pipe_enable
Definition nrf24l01.h:316
Main nRF24L01 device configuration structure.
Definition nrf24l01.h:327
nrf24l01_auto_retransmit_delay auto_retransmit_delay
Definition nrf24l01.h:335
uint8_t dynamic_payload_length_enable
Definition nrf24l01.h:343
nrf24l01_rf_output_power rf_output_power
Definition nrf24l01.h:339
uint8_t dynamic_ack_enable
Definition nrf24l01.h:345
uint8_t frequency_channel
Definition nrf24l01.h:337
nrf24l01_address_width address_width
Definition nrf24l01.h:334
uint8_t * transmit_address
Definition nrf24l01.h:342
SPI_HandleTypeDef * spi
Definition nrf24l01.h:328
nrf24l01_data_pipe data_pipe[6]
Definition nrf24l01.h:341
nrf24l01_auto_retransmit_count auto_retransmit_count
Definition nrf24l01.h:336
TIM_HandleTypeDef * timer
Definition nrf24l01.h:331
nrf24l01_air_data_rate air_data_rate
Definition nrf24l01.h:338
GPIO_TypeDef * csn_port
Definition nrf24l01.h:329
uint8_t csn_pin
Definition nrf24l01.h:330
uint8_t power_up
Definition nrf24l01.h:332
uint8_t payload_with_ack_enable
Definition nrf24l01.h:344
uint8_t primary_rx
Definition nrf24l01.h:333
uint8_t setup_lna_gain
Definition nrf24l01.h:340