单片机死机后自动恢复的核心是看门狗(WDT)。硬件看门狗(如STM32的IWDG)在程序跑飞或死循环时无法及时喂狗,超时后强制复位。软件上要确保喂狗代码放在主循环或关键任务中,避免在中断里喂狗(否则死循环可能绕过)。
实操建议:
1. 初始化独立看门狗,设置合适的超时时间(如1秒),喂狗间隔小于超时值。
2. 在主循环末尾喂狗,并监控关键任务标志,若任务卡死则主动触发软件复位(NVIC_SystemReset)。
3. 对电源波动或EMI干扰,可加外部看门狗芯片(如MAX706)或使用双看门狗策略。
4. 记录复位原因(RCC_CSR寄存器),便于调试。
示例代码(STM32):
```c
void IWDG_Init(void) {
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
IWDG_SetPrescaler(IWDG_Prescaler_64); // 约1s超时
IWDG_SetReload(0xFFF);
IWDG_ReloadCounter();
IWDG_Enable();
}
int main(void) {
IWDG_Init();
while(1) {
// 业务逻辑
IWDG_ReloadCounter(); // 喂狗
}
}
```
注意:看门狗不能解决所有死机(如硬件故障),需配合外部复位电路和故障诊断。
mcuku 阿沐 · 2026-08-17