完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
根据网上给出的调试NRF24L01的方法,首先调试发送程序,
进行如下处理: SPI_RW_Reg(WRITE_REG + EN_AA, 0x00); // 关闭通道0自动应答 并写函数获得STATUS和FIFO_STATUS的值 u8 NRF_Get_State(void) 在主函数中进行验证: [C] 纯文本查看 复制代码 if(sta==0x2e) { LED1=0; }if(FIFO_sta==0x11){LED2=0;} 实验发现两盏灯都没有亮,说明发送失败了。 其余部分的NRF程序都是直接从原子的例程拷贝的,在线调试时全速运行发现程序的确卡死在这里了, while(NRF24L01_IRQ!=0);//等待发送完成 但是当我单步运行的时候发现程序正常运行过这里,且在单步调试过程中,两盏灯都是能亮起来的。 为什么单步运行和全速运行结果不同呢? 注:NRF24L01_Check检测到连接已经成功了 下面附上我的main函数 int main(void) 不知道到底怎么解决这个问题,大家有遇到这种情况么?应该怎么解决呢?求指教!谢谢! |
|
相关推荐
17个回答
|
|
找到原因了,是STATUS的值弄错了,应该是0x0e灯就可以亮了~
|
|
|
|
刚刚重新研究下调试教程,感觉自己理解错误了,教程里面说的是
我们可以通过读取STATUS的值来判断是哪个事件触发了中断,寄存器4、5、6位分别对应自动重发完成中断,数据发送完成中断,数据接收完成中断。也就是说,在之前的配置下,如果数据成功发送,那么STATUS的值应该为0x2e。这样就可以作为一个检测标准,另外一个标准可以看FIFO_STATUS寄存器,第5位的描述:发送缓冲器满标志,1为满,0为有可用空间;第4位的描述:发送缓冲器空标志,1为空,0为有数据;同样可以看到接收缓冲器的对应标志。这样在数据发送成功后,发送寄存器当然应该是空的,接收缓冲因为在之前已经失能,所以也应该是空,也就是说成功发送之后的FIFO_STATUS寄存器值应该是0x11。 也就是说,应该是使能重发等参数的时候,有STATUS=0x2e, 所以就将以下配置改回来了 [C] 纯文本查看 复制代码 NRF24L01_Write_Reg(WRITE_REG_NRF+EN_AA,0x01); [C] 纯文本查看 复制代码 NRF24L01_Write_Reg(WRITE_REG_NRF+EN_RXADDR,0x01); [C] 纯文本查看 复制代码 NRF24L01_Write_Reg(WRITE_REG_NRF+SETUP_RETR,0x1a); 发现LED2是亮了,证明FIFOSTATUS的值的确是0x11 但是LED1还是不亮的,即无论上述三个参数是否使能,STATUS都不能得到0x2e的值 请问是不是我对上面教程中的话理解错误了呢? 到底什么时候才有STATUS=0X2E FIFOSTATUS=0X11? 是不自动重发失能应答和接收地址的时候?还是自动重发且使能自动应答和接收地址的时候?? |
|
|
|
帮顶....
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
原子哥,我想向你请教两个问题。 一、我用战舰开发板做发送端时,程序老是卡在 while(NRF24L01_IRQ!=0)上,老是出不去,如若选为接收端,还可以接收到数据 二、我用自己做的一块板子做实验,也都能进去,开始还能发送数据,可是后来也卡在一个地方,就是在 u8 NRF24L01_TxPacket(u8 *txbuf) 这个函数里, state=NRF24L01_Read_Reg(STATUS ); //读取状态寄存器的值 NRF24L01_Write_Reg(WRITE_REG_NRF+STATUS,state); //清除TX_DS或MAX_RT中断标志 if (state&MAX_TX ) { NRF24L01_Write_Reg(FLUSH_TX,0XFF); return MAX_TX; } state的值老是0x1E,之前发送成功的时候是0x2E,不知道为什么,就变成0x1E了。还希望原子哥能帮忙答疑解惑啊 |
|
|
|
状态位一直都是0x01,到达最大重发次数,什么情况啊,跟楼上问题一样,原子哥求助!
|
|
|
|
看看。。菜鸟飘飘。正在学习
|
|
|
|
你好,我也遇到了类似问题,通过了Check,但是一直发送失败,返回值是MAX_TX,说明发送到最大次数也没有发送成功,请赐教
|
|
|
|
|
|
|
|
因为使能了ACK功能,所以需要一个发送节点,还有一个接收节点。增加了一个接收节点后,成收发。
|
|
|
|
我也是这个问题,这是什么原因呀?
|
|
|
|
有没有解决呀,我也是这个问题,一直是0x1e
|
|
|
|
我也是 换到c8t6 后就这样了 一直返回MAX_TX
|
|
|
|
同求啊,一直返回max
|
|
|
|
我想说我也是这个问题。。用的c8t6
|
|
|
|
只有小组成员才能发言,加入小组>>
如何使用STM32+nrf24l01架构把有线USB设备无线化?
2547 浏览 7 评论
请问能利用51单片机和nRF24L01模块实现实时语音无线传输吗?
2332 浏览 5 评论
3159 浏览 3 评论
2804 浏览 8 评论
为什么ucosii上移植lwip后系统进入了HardFault_Handler?
2762 浏览 4 评论
请教各位大咖:有没有接收频率32M左右的芯片推荐的?先感谢啦!
610浏览 1评论
855浏览 0评论
970浏览 0评论
623浏览 0评论
449浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 19:11 , Processed in 1.296763 second(s), Total 81, Slave 74 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号