完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
曲曲折折一个月,终于找到具体原因了,中途虽然能接收到数据,但是总是感觉心里有个梗,不爽。。。
Nrf24L01接收端接收不到数据、接收数据不稳定、中断只触发一次等等,都可能是这个原因。 我们都知道,接收端接收到数据,处理完数据后要清空接收反冲区。FLUSH_RX:清空RX FIFO寄存器 NRF2_SPI_WriteReg(FLUSH_RX,0xFF); //清除RX FIFO寄存器 但是关键的一点就是清空RX FIFO寄存器的时间。 官方数据手册中有一句话,Flush RX FIFO, used in RX mode Should not be executed during transmission of acknowledge, that is, acknowledge package will not be completed.在传输应答信号过程中不应执行此指令,也就是说,若传输应答信号过程中执行此指令的话将使得应答信号不能被完整传输。当接收端的应答信号不能返回到发送端的时候,就会一直处于发送模式,所以再也无法触发接收中断了。 解决办法: 当触发接收中断的时候,不立马清空RX FIFO,而延时一段时间,在读取接收数据和清空RX FIFO; 详细注解代码: void EXTI9_5_IRQHandler(void) //触发中断服务函数 { u8 state; u8 rxbuf[32]; //接收缓冲区 Delay_ms(1); //重要,延时等待AKC发送完成,再处理数据,时间自行调试和把握 if(EXTI_GetITStatus(EXTI_Line7) != RESET) //确保是否产生了EXTI Line中断 { NRF2_CE_LOW(); //24l01进入待机状态,读取数据的时候CE要拉低 state=NRF2_SPI_ReadReg(STATUS); /*读取status寄存器的值 */ NRF2_SPI_ReadBuf(RD_RX_PLOAD,rxbuf,RX_PLOAD_WIDTH); //读取数据 到rxbuf中 ... //数据处理代码 NRF2_SPI_WriteReg(NRF_WRITE_REG+STATUS,state); /*清除24L01接收中断标志*/ NRF2_SPI_WriteReg(FLUSH_RX,0xFF); //清除RX FIFO寄存器 NRF2_CE_HIGH(); //24l01回到接收模式 EXTI_ClearITPendingBit(EXTI_Line7); //清除stm32中断标志位 } } 以上只是我自己碰到的问题的解决办法,每个人可能不一样。无线这种看不见摸不着的真能调到你怀疑人生,分享出来能救一个是一个,毕竟胜造七级浮屠。 另链接另一个同样问题的博主,虽然不太懂他怎么做的,但也许你需要参考。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1574 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1519 浏览 1 评论
949 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
672 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1565 浏览 2 评论
1852浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
622浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
507浏览 3评论
512浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
494浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-14 13:11 , Processed in 0.673684 second(s), Total 76, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号