当前位置:首页 > 芯闻号 > 充电吧
[导读]曲曲折折一个月,终于找到具体原因了,中途虽然能接收到数据,但是总是感觉心里有个梗,不爽。。。Nrf24L01接收端接收不到数据、接收数据不稳定、中断只触发一次等等,都可能是这个原因。我们都知道,接收端

曲曲折折一个月,终于找到具体原因了,中途虽然能接收到数据,但是总是感觉心里有个梗,不爽。。。

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中断标志位  
    }
}





以上只是我自己碰到的问题的解决办法,每个人可能不一样。无线这种看不见摸不着的真能调到你怀疑人生,分享出来能救一个是一个,毕竟胜造七级浮屠。







本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

中断机制在单片机及嵌入式系统中是重中之重,我们必须深入理解。首先我们要明白一点:CPU执行指令代码,并非一直顺序地逐条执行,而是可能突然跳到某段代码上去的。因为这段代码的优先级更高,或者说它更加紧迫,CPU必须暂时放下手...

关键字: 中断 单片机 嵌入式系统

PIC单片机是基于RISC系统结构的单片机,最初的设计是支持PDP(编程数据处理器)计算机。大量的操作可以用来控制外围设备。PIC单片机比微控制器具有更快的程序执行能力。它是由微芯片技术公司于1889年发明的,是一种8位...

关键字: PIC单片机 定时器 中断

STC单片机是一款增强型51单片机,完全兼容MCS-51,还增加了新的功能,比如新增两级中断优先级,多一个外中断,内置EEPROM,硬件看门狗,具有掉电模式,512B内存等。还支持ISP下载,不用编程器,只要一个MAX2...

关键字: 单片机 看门狗 中断

什么是PIC中断程序呢?形象的生活比喻就比如你现在这在看我的文章,突然你的朋友喊你一起去烤地瓜,这时候你就中断了看文章和朋友烤地瓜去了,烤完地瓜之后你又回来看文章。烤地瓜这件事就好比中断程序,他中断了你看文章这件事。在程...

关键字: PIC 中断 标志位

MCS—51系列单片机内部只需两个外部接中断连源输入端,当外部接连源多于两个时,就必须进行拓宽,下面介绍几种简略的拓宽办法:

关键字: 单片机 软件 中断

最近在浏览星球主题的时候,发现一位球友打卡中断了,就去关心了一下他(瞧我这该死的责任心❤️),结果被他反手就问了下面这个问题。

关键字: 中断 Spring Boot 实战项目

实质上是加一的计数器。外部脉冲让他不断加一,当计数器溢出时,计数器的溢出相应的中断标志位置1,并向CPU发出中断请求。如果定时器/计数器工作为定时模式,则表示时间以到;如果工作于计数模式,则表示计数器、则表示计数值已满。

关键字: 周期 中断

中断的分类和区别

关键字: 轮询 中断

在这篇文章中,小编将为大家带来微控制器的相关报道。

关键字: 微控制器 中断 控制器

TMOD : 控制定时器的工作方式。8个bit,高四位 bit 控制 T1,、低四位 bit 控制 T0。因为定时器有4种工作方式;TMOD = 0x00(工作方式0),TMOD = 0x01(工作方式0),TMOD =...

关键字: 51单片机 定时器 中断
关闭
关闭