今天在调试程序的时候,发现自己傻的要命了。昨天早上开始到今天下午,一直在调试STM32的一个函数,函数很简单,就是两个板子通过串口通信,我用一起来捕捉信号,发现信号跟协议是一直的,而且很理想,但就是一直是错误,当然,错误是板子在通信的时候,内部协议层认为出错了。
首先先说说工作方式,就是板子A和板子B通过串口通信,现在要做的事情就是板子A发出命令要读取板子B上的程序,板子B接到板子A的命令后,一直保留在中断函数内,并把板子A要求的程序分开N部分发送给板子A,然后板子A接到板子B发来的数据后,会给板子B发回去应答,板子B接到板子A的应答后认为上一次的发送成功,然后再继续发送下一个程序部分,一直往下发展。想着这个流程好像很流畅,而且用仪器捕捉到的数据都是有发送有应答,唯一不对的就是板子B接到板子A的应答后没有认为是对的,还把数据在发一次(但我发现这个问题后,觉得板子B其实没有收到板子A的应答,只是板子A有发出应答而已)。
其实想想问题所在,板子B在发数据的时候其实还在串口的中断函数内,然后如果要接收板子A的应答,还是会触发中断函数,但问题在于这个中断还没有退出,是否可以再来一个中断呢?据说中断的标志在读取了串口的数值后会自动清除,如果是这样,感觉又好似可以来接收数据。但想想,中断应该不可以自己打断自己,自己嵌套自己。想想,调了一天程序,自己竟然犯了这么傻的错误,晕。
本文来自论坛,点击查看完整帖子内容。