nRF24L01发送失败原因之“MAX_RT”未清零


调了好几天的nRF24L01,看好好多网友写的代码,基本相同,但就是调不通。

然后检查电路硬件,也没有问题。

最后,还是把DataSheet拿过来看寄存器,读STATUS寄存器,发现MAX_RT位总为‘1’;然后百度搜了一下原因

杭电王同学的解释在最下方,真实拨开云雾见青天!!!

最后的解决方法如王同学所说,在void nRF24L01_TxPacket(char * tx_buf)函数中,加上如下四行代码:

  uchar sta;
  sta=SPI_Read(STATUS);
  if(sta & 0x10 == 0x10)
  SPI_RW_Reg(WRITE_REG+STATUS,sta);

便成功解决了问题!!!在此鸣谢王同学!

NRF24L01自动应答问题请教!

  分享 | 2015-12-14 17:36 杭电王同学  |  浏览 9 次   悬赏: 5    来自: 手机知道
  硬件
P0工作在自动应答模式下,只要开发射端的自动应答,还是接收端和发射端都要开应答?
本人已自行解决,
无法自动应答是因为:在发射端数据发射完成后未清除MAX_RT中断标志,这样遇到一次通讯异常,接下来通讯就中断了(请使用SPI_RW_Reg(WRITE_REG+STATUS,sta);清楚标志)。参考24L01+ datasheet 第9章 MAX_RT:Maximum number of TX retransmits interrupt. Write 1 to clear bit.重点来了if MAX_RT is asserted it must be cleared to enable further communication.

你可能感兴趣的:(NRF24L01)