EN_RXADDR寄存器配置,即选择六个接收通道的某一通道来接收数据,六个接收通道具体情况下面会说到),设置为接收模式,还有其他等配置。 ② 拉高CE引脚(CE置高),启动接收状态
③ 接收到一个有效数据包后,数据存储在RX FIFO,并产生RX_DR中断(RX_DR为接收数据成功标志位,接收成功置1),中断和发送模式一样,同样需要复位。 ④ 接收设备自动向发送设备发送确认信号(无需自己写代码) ⑤ 设置CE引脚为低,NRF24L01进入待机模式一 ⑥ MCU通过SPI读取NRF24L01收到的数据
根据NRF24L01的发送数据流程与接收数据流程,我们可以归纳出编写NRF24L01发送代码与接收代码的流程 发送过程:
a. MCU通过SPI对NRF24L01进行基本配置,配置好NRF24L01 b. MCU将要发送的数据与接收数据设备的地址写入NRF24L01 c. CE引脚置高,启动发送
接收过程:
a. MCU通过SPI对NRF24L01进行基本配置,配置好NRF24L01 b. CE引脚置高,启动接收
c. MCU对 NRF24L01进行数据读取
分析具体代码
发送模式:
首先我们来看一下例程发送模式下的mian.c 文件
1 #include \2 #include \3 #include \4 5 /*
6 * PA2 - PG8 ce使能 7 * PA1 - PG15 cs片选 8 * PA3 - PC4 irq中断 9 */
10 u8 status; //用于判断接收/发送状态 11 u8 txbuf[4]= {0,1,2,3}; //发送缓冲 12 u8 rxbuf[4]; //接收缓冲 13 int i=0; 14 15 /**
16 * @brief 主函数 17 * @param 无 18 * @retval 无
19 */
20 int main(void) 21 {
22 SPI_NRF_Init(); 23
24 /* 串口1初始化 */ 25 USART1_Config(); 26
27 printf(\这是一个 NRF24L01 无线传输实验 \\r\\n\28 printf(\这是无线传输 主机端 的反馈信息\\r\\n\29 30 31 32
33 NRF_TX_Mode(); 34
35 while (1) {
36 printf(\主机端 进入自应答发送模式\\r\\n\37 38
39 /*开始发送数据*/
40 status = NRF_Tx_Dat(txbuf);
41
42 /*判断发送状态*/ 43 switch (status) { 44 case MAX_RT:
45 printf(\主机端
46 47 48 49
50 51 52 53
54 55 56 57 58 59 60 61 } 62 }
没接收到应答信号,发送次数超过限定次数 ,发送失败。 \\r\\n\ break; case ERROR:
printf(\未知原因导致发送失败。 \\r\\n\ break; case TX_DS:
printf(\主机端 接收到 从机端 的应答信号,发送成功! \\r\\n\ break; }

