一、背景
在一个项目中需要用到看门狗和软件重启,但是在工作过程中发现存在一种情况会导致STM32死机,经过分析是软件重启过程中复位信号被外部电路强制拉高,无法在复位后4个时钟拉低复位管脚,因此,将该复位引脚断开和外部连接即可正常运行。现将该调试记录如下。
二、测试情况
看门狗喂狗周期初始化为10s。测试了四种情况:
- 1:Reset_Pin = NONE 启用IWDG,无IWDG_FeedDog(),程序10s后重启正常运行;
- 2:Reset_Pin = 3.3V 启用IWDG,无IWDG_FeedDog(),程序10s后不重启但一直运行;
- 3:Reset_Pin = 3.3V 启用IWDG,无IWDG_FeedDog(),第12s调用SoftReset(),程序10s后不重启,第12s软件不重启,程序死机不运行。
- 4:Reset_Pin = 3.3V 启用IWDG,有IWDG_FeedDog(),第12s调用SoftReset(),程序10s后不重启,第12s软件不重启,程序死机不运行。
三、分析
- 外部Reset_Pin上拉4.7k、1k电阻后看门狗和软件重启都正常运行。
- 外部Reset_Pin强上拉后,看门狗无法重启但程序正常运行,软件重启直接会让程序死机。
四、解决办法
直接剪掉复位管脚。(很粗暴)