[AT32F437] 串口接收溢出中断不能忽略呀

[复制链接]
271|0
星云狂想曲 发表于 2025-8-31 00:55 | 显示全部楼层 |阅读模式

串口接收溢出中断不能忽略呀

夜深人静,开始总结。今天白天为了迎合公司的“文化”‘加班编写代码,也调试出了一个不经意的bug,分享出来,望大家避免!

串口接收采用中断按字节处理是非常常规的实现方案。我们也采用这个方案。实现简单,功能简单,相安无事好久。直到今天,硬件团队上报了一个bug,他们的外设有个bug,必须在中断触发后,保证外设ready后才可以退出中断。硬件bug,软件改。于是,串口的bug被打开了。

bug现象

系统宕机,各类操作无法执行。

bug分析

在线调试时,复现bug。串口中断持续进入,占用了系统。再回读状态寄存器,一直触发串口错误中断,其中ROERR标志位置位。但我的程序未做清除处理。

bug解决

添加错误中断处理,并通过组合操作清除ROERR标志位即可。

UNUSED(usart_x->sts);
UNUSED(usart_x->dt);

挺简单的一个bug,查找起来按说也不费事。但思维定式告诉我,之前串口一直工作正常,只是引入了一个另外高优先级中断后才出的bug。精力和注意力都被分散了!

总结就到这里吧!愉快的过我的周末去了!

您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

30

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部