天线|RF射频
直播中

张桂兰

7年用户 1312经验值
私信 关注
[问答]

nrf24l01发送完成中断和发送超时中断同时触发

nrf24l01   设置为发送模式,读取状态寄存器status的值为0x3e。相当于0011 1110,表明发送完成中断和发送超时中断同时触发了,这是什么原因啊,程序在这里感觉就是跑死了。

现在正在测试的方法是:一发多收,一个主机0频道0通道发送信息,两个或多个从机在同一个频道0同一个通道0上接收信息,均开启了自动应答,但是所有的从机却都能收到主机的信息!这是第一步。然后,两个或多个从机在同一个频道0同一个通道0上,同时的给一个主机发送信息。相当于多发一收。这是第二步,也都开启了自动应答。整体测试,先第一步后第二步。

这种情况是不是有可能会跑死啊,请问跑死后添加什么代码会使之自动返回。不跑死就行

回帖(3)

康志强

2020-4-20 10:17:42
没搞过,帮顶。。。。
举报

朱红艳

2020-4-20 10:33:57

谢谢帮原子哥帮顶,目前知道的情况是:当主机在接受状态,接收到其中一个从机的信号后,本身的status中的RX_DR位置1 ,如果在主机切换到发送状态之前,又有从机从机发来信号,主机会将发来的数据存到寄存器中,并且本身的status中的RX_DR位重新置1。这时,如果切换到发送状态发送数据并且发送完成,status中寄存器TX_OK(忘了怎么写了,就是0x20)位置1.而此时,接收标志位在之前已经置1 ,读取status值时,会出现两个中断位为1,低4位为0的情况。这时,程序进行至if(sta &TX_OK),就会发现,虽然有两个标志位,且后四位代表power_up的位均为0,但是条件仍然成立,仍会返回正确的值。这种情况会对我们后面的传输过程有很大影响,我们测试发现,这种情况有可能使我们的程序跑死。目前的解决方法是:增加if语句的严谨性,将if(sta &TX_OK)扩充为:if((sta &TX_OK) &&((sta &RX_DR)==0)&&((sta &MAX_TX)==0)&&(sta &0x20)),简单来说就是只有一个中断标志位时,且power_up位正常为1时,程序才能进行下去。还没有想到更好的办法
举报

王越建

2020-4-20 10:46:25

写错了,最后一个是:sta & 0x02.并非0x20
举报

更多回帖

发帖
×
20
完善资料,
赚取积分