STM32
直播中

李林

7年用户 1213经验值
私信 关注
[问答]

为什么移植后的NRF24L01模块只能接收一次数据呢

为什么移植后的NRF24L01模块只能接收一次数据呢?
NRF24L01模块接收端断电重新上电为什么只能接收发送一次数据呢?

回帖(1)

向芹

2021-12-16 09:31:46
nrf24l01断电重新上电才能接收数据及最大重发次数问题
最近在调试NRF24L01模块,使用的芯片是公司研发的GPCM1F芯片,M0内核,32位单片机,参考正点原子的例程移植代码,调试过程遇到很多问题,其中有2个问题较为深刻,首先是移植完后发现nrf24l01只能接收一次数据,接收的数据是正确的,但是无法接收第二次,而且发送端发送三次后就再也无法发送了,原因是达到了最大重发次数,即使是清除了清除TX FIFO寄存器也不行,但是将接收端断电后,重新上电后,又可以正常接收和发送了,但是也只能接收发送一次。而且即使将接收端重新编译下载或者复位,也不可以接收和发送,调试许久,终于解决问题了。
以下为个人理解,若有说的不对的地方,请各位多多包含。
关于为什么将接收端断电后重新上电就可以接收数据了,我个人的理解是对NRF24L01的寄存器进行写操作或者接收数据时触发某些中断或者标志位时,如果没有及时的清除,就会影响通信,即使你按复位键或者将程序重新编译下载,这些中断为和标志位依旧在,寄存器并不会因为复位或者重新下载而恢复原来初始化的状态,你必须要下清除的命令才行,但是如果重新断电再上电,寄存器回到初始化的状态(即复位时的状态)。
解决方法:本人参考移植的是正点原子无线通信例程,关于接收端基本没什么改动,主要是修改发射端程序,在例程中加入 NRF24L01_TX_Mode()中加入该函数NRF24L01_Write_Reg(NRF_WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH);//选择通道0的有效数据宽度
在NRF24L01_TxPacket()中CE为高,延时130us以上后再启动发送。
其他的程序基本上就没有修改了,基本和正点原子的例程一样
  
  

  

通过串口看到,数据发送接收正常,发送时要看看这两个状态标志位,确定数据是不是已经发送出去,一定要保证发射端是正常的。如果有时间在写一下发射接收的调试过程吧,谢谢。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分