nRF24L01 发送数据完毕后,状态寄存器读出来的数据都是0xff,为什么?

我在nRF24L01调试过程中,发现发送数据完毕后,IRQ中断信号有效后,读状态寄存器值是0xff。判断TX_DS比特为1,导致误判断发送成功。由于只有发送模块工作,接收... 我在nRF24L01调试过程中,发现发送数据完毕后,IRQ中断信号有效后,读状态寄存器值是0xff。判断TX_DS比特为1,导致误判断发送成功。由于只有发送模块工作,接收模块没有上电,在配置发送等ACK时实际并没有发送成功。
1) 但是串口却能输出TX OK.当时以为发射已经调通了。在2014/02/04最后才明白,调通其实是假象,原来是单片机发送完后读STATUS寄存器的值为0xff,其与任何为与都非0,所以程序误以为TX_DS比特为1.
由此继续调试接收模块却始终调不通。原因是发送并没有真正调通。

nRF24L01 发送数据完毕后,状态寄存器读出来的数据都是0xff,为什么?
展开
 我来答
庹白楣0G4
推荐于2017-12-15 · 超过11用户采纳过TA的回答
知道答主
回答量:85
采纳率:100%
帮助的人:16.6万
展开全部
我没有资料在 旁边,但我去年刚完成了一个nRF24L01
无线收发的项目,客户已验收
记得一点是这样写的,希望有帮助

#define tx sta^5 //位定义,状态寄存器的第5位
#define max sta^4
wtb(0xa0,mode);//向TX FIFO 写入一个值mode
ce=1;
for(n=43;n>0;n--);//进入接受模式130us,然后下面的是校验说明书上的STATUS内容

sta=wob(0xff); //读状态,wob函数 是write one byte,自己编的程序向24L01寄存器写1个命令

if(tx) //若状态寄存器的第5位 被置1

{
wtb(0x27,0xff); //些入1 清除标志位

wob(0xe1); //清除TX fifo

sta=wob(0xff); //再读一次STATUS,看tx是否被成功清零,成功清0就闪灯,tmp是一个临时 char型变量,前面已定义,
if(tx==0)
{
while(tmp--)
{led1=1;delay(20000);led1=0;delay(20000);} //灯闪烁的次数是为了测试程序是否成功用
}
}
nRF24L01在中断标志置位后,必须写1清零,不然可能死机
发送接收成功,硬件会自动清FIFO,不必手动清0 FIFO,希望有所帮助,

if(max) //达到最大重发次数,清中断标志,清FIFO

{
wtb(0x27,0xff);
wob(0xe1);
sta=wob(0xff);
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式