1、NRF24L01
我用的就长这个样子~~~
2.管脚功能
3、51单片机的I/O口输出为5V,而NRF24L01的电源输入为1.9—3.6V,如果直接接入单片机的电源会烧坏模块,因而要对单片机的电源接口进行压降,这里我选用二极管进行压降,二极管型号为IN4001.
工欲善其事,必先利其器。这一步完成之后就可以把引脚用杜邦线连接到单片机的I/O口,定义管脚就可以开始编程了。
4、要用NRF24L01进行通信首先知道它的发送和接收流程
发送流程:
① MCU通过SPI对NRF24L01进行基本配置,,配置自动应答通道使能,设置自动重发次数不为0(在此设置可以重发数据包)设置为发送模式,还有其他配置等等
② MCU把要发送的数据和接收数据设备的地址通过SPI写入NRF24L01
③ CE引脚置高,启动发送
④ 此时有两种情况:
1.在有限时间内收到应答信号,则TX_DS置高(发送数据成功标志位),并引发IRQ中断(引脚IRQ置低),并清除TX BUf(此为发送缓冲寄存器,自行写代码清除),IRQ中断需要写状态寄存器进行复位(因为此处IRQ由TX_DS引发,将TX_DS复位即可使IRQ复位)
2.重发数据次数超过设定值,则MAX_RT置高(达到最多重发次数标志位),并引发IRQ中断(引脚IRQ置低),不清除TX BUf,IRQ中断需要写状态寄存器进行复位(因为此处IRQ由MAX_RT引发,将MAX_RT复位即可使IRQ复位)
⑤ 接收到应答信号产生中断或者达到最大重发次数产生中断后,NRF24L01继续发下一包数据。
⑥ 当TX BUf为空时,进入待机模式二(当CE为高,TX BUf为空时,进入待机模式二;NRF24L01的工作模式图表在最后,工作模式不需过多理会,只要在适当时候拉高CE进行发送即可,配置NRF24L01时CE置低)
接收流程:
① 与发送模式一样,一开始MCU通过SPI对NRF24L01进行基本配置,设置数据通道自动应答使能(在EN_AA寄存器进行设置,即收到数据后,向主机发送应答信号)还有进行接收数据通道使能(在EN_RXADDR寄存器配置,即选择六个接收通道的某一通道来接收数据,设置为接收模式,还有其他等配置。
② 拉高CE引脚(CE置高),启动接收状态
③ 接收到一个有效数据包后,数据存储在RX BUf,并产生RX_DR中断(RX_DR为接收数据成功标志位,接收成功置1),中断和发送模式一样,同样需要复位。
④ 接收设备自动向发送设备发送确认信号(无需自己写代码)
⑤ 设置CE引脚为低,NRF24L01进入待机模式一
⑥ MCU通过SPI读取NRF24L01收到的数据
总结为:
发送过程:
a. MCU通过SPI对NRF24L01进行基本配置,配置好NRF24L01
b. MCU将要发送的数据与接收数据设备的地址写入NRF24L01
c. CE引脚置高,启动发送
接收过程:
a. MCU通过SPI对NRF24L01进行基本配置,配置好NRF24L01
b. CE引脚置高,启动接收
c. MCU对 NRF24L01进行数据读取
5、我们在使用NRF24L01的时候有一个头文件,是关于NRF24L01的寄存器定义和相关函数的编写,这个文档网上有很多,我们只需要按照它的发送和接受流程调用相关函数配置寄存器就可以了。