天线|RF射频
直播中

吴江

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

NRF24L01卡死在while的解决办法?

1.程序利用定时器3每隔1S转成发送模式发送一次数据,发送完之后转回接收模式。2.可是程序却在定时器中断服务函数调用NRF24L01_TxPacket()时死在while(NRF24L01_IRQ!=0);发送数据之后并没有引发中断(没有屏蔽任何中断)。
3.最奇怪的是,用Jlink单步执行的时候,程序是正常的,不会卡在while(NRF24L01_IRQ!=0);,一旦程序全速运行就卡在这里不动了。

发送前状态寄存器的值是0x0E,发送后还是0x0E,并没有产生发送完成中断标志哦,所以程序死在了while(NRF24L01_IRQ!=0);
可是在Jlink单步运行的时候,程序是正常的,不会死在这里。
这是怎么回事啊~~~求教各位大神~~~~~@原子哥~~~~~

回帖(4)

苏天兰

2020-6-2 16:27:14
谢谢原子哥,已经自己解决了。上面的问题语句好像是在定时器中断函数里才会出现。把这些代码从中断函数移到主循环中就没问题了。这让我想起以前在书上看过的一些知识:尽量少在中断函数里做出操作,如果是裸机,中断函数只给出某种标志位,真正的操作在主循环完成;如果是在操作系统上,中断函数只给出某种信号来激活一个任务,真正的操作在被激活的任务中完成。这样可以避免一些莫名其妙的问题。
举报

崔明华

2020-6-2 16:42:03
帮顶
举报

王睦羽

2020-6-2 16:49:19
楼主,原子哥求解,为什么程序卡死在while循环里面,也就是说中断引脚没有拉低@发烧友
举报

黄长梅

2020-6-2 16:55:24
中断需要参数设置的哦    原子哥们只专业STM32 无线你们得找我交流,呵呵
举报

更多回帖

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