1. WWDG简介
Window watchdog,即窗口看门狗
能产生系统复位信号和提前唤醒中断的计数器
递减的计数器
在窗口期内重装载计数器的值,防止复位
用于检测单片机程序运行时效是否精准,主要检测软件异常
需要精准检测程序运行时间的场合
计数器从T[6:0]开始递减,在W[6:0]之前喂狗会触发复位,
只有在W[6:0]到0x40(64)之间喂狗才会重装载,
计到64时候会触发一个中断,计到0x3F(63)的时候会复位
其中T[6:0]和W[6:0]是自己设定的,63和64是规定的
2. WWDG配置步骤
WWDG工作参数初始化 HAL_WWDG_Init()
WWDG Msp初始化 HAL_WWDG_MspInit() 配置NVIC、CLOCK等
设置优先级,使能中断 HAL_NVIC_SetPrioioty()、HAL_NVIC_EnableIRQ()
谱写中断服务函数 WWDG_IRQHandler()->HAL_WWDG_IRQHandle()
重定义提前唤醒回调函数 HAL_WWDG_EarlyWakeupCallback()
在窗口期内喂狗 HAL_WWDG_Refresh()
3. 相关HAL库函数介绍
3.1 HAL_WWDG_Init()
函数定义 HAL_StatusTypeDef HAL_WWDG_Init (WWDG_HandleTypeDef * hwwdg)
函数描述 根据WWDG_HandleTypeDef中指定的参数初始化WWDG
参数 hwwdg:指向有初始化数据的喂狗句柄
返回值 HAL status
WWDG_HandleTypeDef hwwdg;
hwwdg.Instance = WWDG;
hwwdg.Init.Prescaler = WWDG_PRESCALER_128; // 设置预分频器
hwwdg.Init.Window = 100; // 设置窗口值,即窗口期的时间范围
HAL_WWDG_Init(&hwwdg);
while (1) {
// 定期在窗口期内更新窗口看门狗
HAL_WWDG_Refresh(&hwwdg);
// 执行其他任务
}
3.2 HAL_WWDG_Refresh()
函数定义 HAL_StatusTypeDef HAL_WWDG_Refresh (WWDG_HandleTypeDef * hwwdg, uint32_t Counter)
函数描述 喂狗
参数 hwwdg:指向有初始化数据的喂狗句柄
返回值 HAL status
while (1) {
// 定期喂独立看门狗
HAL_WWDG_Refresh(&hwwdg);
// 执行其他任务
}