原文:NRF24L01读取数据不能使用中断的方式,原因如下:首先NRF24L01中断触发时,IRQ引脚会一直保持低电平直到状态寄存器中的中断标志被重新清零。stm32的外部中断触发方式只有上升沿或者下降沿触发,若配置成外部中断模式,当RX_DR中断触发时IRQ引脚会产生一个下降沿,stm32进入中断函数执行数据读取函数,读取完之后清除状态寄存器标志,IRQ引脚重新变为高电平。但,若在在清除中断标志之后刚好又来了一帧数据,而此时还没有出中断函数,IRQ引脚就会被置为低电平,然后退出中断函数,但IRQ引脚再也产生不了下降沿信号(因为中断标志位不会再被清除),也即再也进不了中断了。总而言之尽量用查询的方式,不要用中断就好。
解决办法:清除IRQ中断的语句,前面加CE拉低,后面加CE拉高,就可以正常使用中断接收了,不会再出现进不去中断的问题了。原因,手册说了,写寄存器必须在待机或掉电模式下进行,代码如下:
void NRF24L01_IRQ_Clear(void)
{
uint8_t sta;
sta = NRF24L01_Read_Reg(STATUS); //读取状态寄存器的值
NRF24L01_CE_LOW();//此处拉低<———————————————————————————————————————————————————————————!!!
NRF24L01_Write_Reg(NRF_WRITE_REG + STATUS, sta); //清除TX_DS或MAX_RT中断标志
NRF24L01_Write_Reg(FLUSH_RX, 0xff); //清除RX FIFO寄存器
NRF24L01_Write_Reg(FLUSH_TX, 0xff); //清除TX FIFO寄存器
NRF24L01_CE_HIGH();//此处拉高<———————————————————————————————————————————————————————————!!!
}
如果对你有帮助,并解决了问题帮忙点下赞,我好做下统计,谢谢!
--------------------------------------------------北雁南飞 ----------------------------------------------