stm32H750使用FreeRTOS,偶尔会出现所有线程停止运行的状况(流水指示灯不闪,程序不跑),此时点击触摸屏触发一下串口中断,所有的线程又会恢复运行,从堆栈调用情况看,有点像是串口发送时与串口接收冲突了,但是串口不应该是全双工的吗!不知道是不是Hal库搞得比较复杂带来的Bug,从图上可以看到,经过数次单步运行后程序自动退出了死机状态,同时RXNE标识被清零了(?单步调试触发的中断导致了串口发送状态退出)。
这个问题和我之前谈到的中断问题相关。
RTOS是实时响应系统,出现类似的“假死”是由于线程抢占导致的。
常常出现此问题的原因是由于串口中断优先级配置。
如果通讯是关键线程,则把串口中断的优先级调高,否则调低。
在使用FreeRTOS时,须将串口通讯放入FreeRTOS的管理范围。ST官方也是推荐这样设置。
感谢分享