STM32
直播中

663593

12年用户 557经验值
私信 关注
[问答]

NRF24L01模块程序的接收与发送有何区别呢

怎样去解决NRF24L01模块不能通讯的问题呢?
NRF24L01模块程序的接收与发送有何区别呢?

回帖(1)

唐晓莉

2021-12-16 15:25:46
花了3个晚上的时间,,,,,,总算是解决了为啥NRF不能通讯的问题。希望能对和我有同样问题的有些许帮助。
我是移植的正点原子的程序,把正点原子的程序分成了两个项目,一个是发送,一个是接收。
这是发送端主函数。





———————————————————————————————————————————————
这是接收端的





有没有发现这两个里面有啥不同的?---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
在发送端的时候这个NRF24L01_TX_Mode()函数在while(NRF24L01_Check())之后。
在接收端的时候这个NRF24L01_TX_Mode()函数在while(NRF24L01_Check())之前。
有同学就问了,这有啥区别啊?
嘿,这里面区别还真不小。

  接收端的话NRF24L01_TX_Mode()函数在while(NRF24L01_Check())之前或者之后无所谓,但是如果在发送端的话,这个NRF24L01_TX_Mode()函数必须在while(NRF24L01_Check())之后。
  当我把 NRF24L01_TX_Mode();放到while(NRF24L01_Check())之前。
调试的时候,在NRF24L01_RxPacket(u8 *rxbuf)函数里面STATUS读出来的值是0x1E。0x1E表示达到了最多次重发中断。我在 NRF24L01_Check(void)函数里面读取STATUS值,STATUS=0x1E。
  当我把 NRF24L01_TX_Mode();放到while(NRF24L01_Check())之后。
调试的时候,在NRF24L01_RxPacket(u8 *rxbuf)函数里面STATUS读出来的值是0x2E。我在 NRF24L01_Check(void)函数里面读取STATUS值,STATUS=0x0E。
总结:在发送端的时候NRF24L01_TX_Mode()函数必须放在while(NRF24L01_Check())之后。如果放在检查函数之前就会导致发送失败。整了3晚就整出这一句话,,,,,,很无语。
PS:如果想要我调试好了的代码,可以直接评论区留下自己的邮箱,一般当天晚上我看到了就会发,我两块板子用的芯片都是stm32f103zet6。注意:如果不是同款芯片的话就需要更改引脚配置。
举报

更多回帖

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