调了好几天的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自动应答问题请教!
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,看好好多网友写的代码,基本相同,但就是调不通。
然后检查电路硬件,也没有问题。
最后,还是把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自动应答问题请教!
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.
举报