1.WWDG简介
- WWDG的全称:Window watchdog,即窗口看门狗
- WWDG的本质:能产生系统复位信号和提前唤醒中断的计数器
- WWDG的特性:递减的计数器,当递减计数器值从 0x40减到0x3F时复位(即T6位跳变到0),计数器的值大于W[6:0]值时喂狗会复位,提前唤醒中断 (EWI):当递减计数器等于 0x40 时可产生
- 喂狗:在窗口期内重装载计数器的值,防止复位
IWDG的所用
- 作用:用于监测单片机程序运行时效是否精准,主要检测软件异常
- 应用:需要精准检测程序运行时间的场合
2.WWDG工作原理
注意:W[6:0] 必须大于 窗口下限值0x3F,否则无窗口期
3.WWDG框图
- 上半部分描述:非窗口期喂狗,产生复位
- 下半部分描述:T[0:6],虽然有7位,但是6位递减计数器,T6的作用是判断T[6:0]的值是否从0x40到0x3f
- W[6:0] 必须大于 窗口下限值0x3F,否则无窗口期
4.WWDG寄存器
- 控制寄存器 (WWDG_CR)——用于使能窗口看门狗工作,以及重装载计数器值(即喂狗)
- 配置寄存器 (WWDG_CFR)——用于使能窗口看门狗提前唤醒中断,设置预分频系数,设置窗口上限值
- 状态寄存器 (WWDG_SR)——用于判断是否发生了WWDG提前唤醒中断
5.WWDG超时时间计算
6.WWDG配置步骤
- WWDG工作参数初始化:HAL_WWDG_Init()
- WWDG Msp初始化:HAL_WWDG_MspInit() 配置NVIC、CLOCK等
- 设置优先级,使能中断:HAL_NVIC_SetPriority()、 HAL_NVIC_EnableIRQ()
- 编写中断服务函数:WWDG_IRQHandler() ->HAL_WWDG_IRQHandler
- 重定义提前唤醒回调函数:HAL_WWDG_EarlyWakeupCallback()
- 在窗口期内喂狗:HAL_WWDG_Refresh()
关键结构体
typedef struct
{
WWDG_TypeDef *Instance; /* WWDG 寄存器基地址 */
WWDG_InitTypeDef Init; /* WWDG 初始化参数 */
}WWDG_HandleTypeDef;
typedef struct
{
uint32_t Prescaler; /* 预分频系数 */
uint32_t Window; /* 窗口值 */
uint32_t Counter; /* 计数器值 */
uint32_t EWIMode; /* 提前唤醒中断使能 */
}WWDG_InitTypeDef;