STM32 操作系统串口中断发送异常问题
使用串口中断发送数据时好时坏,有时能收到有时为错误数据,但数据长度正确
问题代码分析
该代码生成Modbus请求并验证modbus响应是否正确,问题在于我使用的串口中断发送函数为非阻塞,DMA发送同理,发送函数执行完成后等待消息队列会阻塞线程进而导致上下文切换。
现在来看第四行的变量声明,该变量为局部变量,当上下文切换后该变量对于串口中断外设后不可访问,发送出来的数据实际上是不确定任务的栈内数据。
至于为何问题时断时续是因为受到数据长度影响,数据短(比如几字节)情况下可能还未上下文切换串口外设已经发送完成了,此时数据接收到的肯定没问题
解决方案
使用static修饰变量或者将变量设置为全局变量。
带操作系统下应该使用非阻塞式函数,涉及到发送数据时要注意消息buffer变量的作用域。
文章作者:四文鱼Max
本文链接:https://blog.awolon.fun/archives/stm32-uart-send-abnormal.html
许可协议:CC BY-SA 4.0