打印
[APM32F0]

APM32F072增加内部flash擦写功能死机问题排查

[复制链接]
56|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
糊糊糊锅|  楼主 | 2024-12-25 11:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#申请开发板#@21小跑堂

一、背景
最近遇到使用APM32F072增加擦写内部flash功能后出现死机现象,板子按键各种操作都不会响应。以下对此案例整个分析流程进行说明,以便后续遇到类似问题避免踩坑。
二、分析流程
(1)之前其他部分代码逻辑都是正常运行,只是增加擦写内部flash功能后出现异常,第一反应就是flash擦写代码有问题,以下为擦写flash部分的代码,分为读/写两部分,肉眼观察法未发现明显逻辑错误。


(2)单独摘取flash读写代码进行测试,代码逻辑也是相当简单,通过timer14设置500ms中断,500ms进行一次flash读写操作,并且闪灯和输出“system is running”信息,预期程序死机灯不再闪烁和调试信息不再输出,结果令人失望,挂机一个早上并未复现。

(3)事情并未想的那么简单,开始整理思路,实际应用场景中主控板会持续通过串口通信进行交互,尝试关闭串口通信,似乎就不再出现死机现象。真相大白,看似擦写flash部分代码背大锅,实则和串口通信也有着密不可分的关系;
(4)测试代码开始增加串口通信,上位机每隔50ms发送一次数据,mcu接收后将原数据返回,果不其然运行几次后就出现死机,调试发现频繁触发串口接收中断导致主函数无法被执行;

(5)通过查看寄存器状态,发现OVREFLG被置位没有清除,导致串口中断服务函数频繁触发。

(6)增加清除串口溢出错误标志位异常处理代码后,再次挂机测试功能正常。

三、总结
擦写内部flash一般会进行关闭中断的操作,此时串口中断不再被响应,而UART通信接口又在不断接收数据,导致触发串口溢出错误,而如果溢出错误未被及时清除,进而导致擦写完flash打开中断之后,串口中断不断被响应影响主函数功能。




使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

14

帖子

1

粉丝