1.看门狗概述

极海APM32F427微控制器配备了两个看门狗定时器,分别为独立看门狗(IWDG)和窗口看门狗(WWDG),两者在时钟源和触发机制上各有特点。
独立看门狗(IWDG)
时钟源:使用内部低速时钟(LSI),频率范围在20kHz至35kHz之间(理论值28kHz)。虽然精度不如HSE,但受外部电路影响小,稳定性高。
工作原理:属于递减计数器。只有当计数器减至0时才会触发系统复位。在计数器减至0之前刷新计数器(喂狗),不会导致复位。
应用场景:主要用于系统的异常检测机制。当系统可能死机时,提供复位信号以重启运行。由于其主要检测系统死锁,时钟精度不高反而使其对电路异常不敏感,比HSE更适合此场景。
窗口看门狗(WWDG)

时钟源:由PCLK1提供,通常源于HSE经过PLL倍频。时钟精准,但容易受电路异常的影响。
工作原理:同样为递减计数器。当计数器减至0x3F时发生复位。特殊限制:如果在配置的窗口值之前刷新计数器,也会触发复位。
应用场景:相比独立看门狗,窗口看门狗的应用场景相对较少,主要用于需要严格监控任务执行时间的场合。
2.硬件平台
开发板:APM32F427ZG TINY板
3.驱动程序详解
独立看门狗(IWDG)配置
LSI的实际频率会随温度和电压波动,因此以下计算仅为估算值。

驱动函数说明:
初始化函数(bsp_iwdt_init)
函数会根据设定的超时时间自动配置预分频值和重载值。
调试建议:建议在初始化时配置调试期间停止计数器,以便在长时间调试后程序能继续执行,而非立即复位。
喂狗策略:建议喂狗频率为单次超时时间的5倍左右,以补偿LSI的误差和代码框架的冗余。
喂狗函数(bsp_iwdt_feed)
仅需调用IWDT_Refresh()刷新计数器即可。
窗口看门狗(WWDG)配置
WWDG的初始化相对简单,但窗口值需结合PCLK1主频计算。
初始化函数(bsp_wwdt_init)
配置调试模式下的计数器行为。
启用时钟并配置时基、窗口值(示例中为0x7F)及中断。
喂狗机制
必须在窗口值范围内(即WWDT_CFG的WIN值与0x40之间)喂狗。
注意:若在此范围之外喂狗,将直接触发复位。
4.测试验证
测试方案
配置:设置IWDG超时时间为100ms,且不执行喂狗操作。
监测:通过GPIO引脚的高电平持续时间确认实际复位时长。
void gpio_test(void) {
// GPIOF Pin0 配置为输出,初始化拉高
}
void app_init(void) {
bsp_iwdt_init(100, 1); // 初始化 IWDG,超时 100ms,调试停止
gpio_test();
}
void app_task(void) {
// 故意不喂狗
}测试代码
测试结果
实际测量显示,系统在93.7ms时触发了IWDG超时复位。
原因分析:由于LSI时钟源本身存在不精准特性,且受环境温度和电压影响,不同芯片测得的误差可能有所不同。
5.移植说明
若在其他项目中使用窗口看门狗(WWDG),请务必根据实际的PCLK1主频重新计算配置的窗口值。
Copyrights© Shenzhen Linkchip Co.,LTD All Rights Reserved.