文章预览
串口是MCU最经常使用的外设之一,我遇到过多起串口在使用过程中出现死掉的实际案例。 这种问题在测试阶段如果发现了还好,一旦批量出去在现场发生就更加麻烦了。今天说的死掉,其实真实现象是MCU一直在不停的进串口中断,导致其他代码无法正常执行。 遇到该问题的罪魁祸首是串口Overrun,即溢出所致。Overrun其实很好理解,串口在接收数据的时候,每一字节数据经移位寄存器到数据寄存器,所谓溢出就是指,上一个字节的数据在数据寄存器还没有被读取走,新的1字节数据又已经被移入到移位寄存器的现象。以STM32F030为例,其他家的MCU也类似,Overrun错误标志位位于USART_ISR寄存器中 Overrun现象我们可以这么产生:在串口中断服务函数刚开始处加一个断点,debug全速运行,通过串口调试助手一下发送2个字节的数据,这时就会出现Overrun,原因就是
………………………………