WWDG:
中文名:窗口看门狗
是一个7位递减计数器,不断向下递减计数,当减到一个固定值0x40时还不喂狗,就会产生一个MCU复位,这个值叫做窗口的下限,是固定的值,不能改变。
与IWDG不同之处在于:
在WWDG的递减计数器减少到某一值之前喂狗,也会产生复位,这个值叫做窗口的上限,上限值由用户独立设置,WWDG计数器的值必须在上窗口和下窗口之间时,才可以刷新(喂狗)而不产生复位。
时序图
T[6:0]是窗口控制寄存器(WWDG_CR)的低7位,W[6:0]是窗口配置寄存器(WWDG_CFR)的低7位。
T[6:0]就是窗口看门狗的计数器值,W[6:0]就是窗口看门狗的上窗口,下窗口是固定值0X40,当窗口看门狗的计数器值在上窗口之外或者低于下窗口值时被刷新都会产生复位。
标号①:WWDG时钟
标号②:WWDG预分频器
分频后的计数器时钟:CK_CNT=PCLK1/4096/(2^WDGTB);//WDGTB是分频因子
/*除以4096是中文参考手册内规定,没有为什么
标号③:计数器
窗口看门狗的超时时间计算公式如下:
Twwdg = (40962^WDGTB(T[5:0]+1))/PCLK1;
Twwdg为窗口看门狗的超时时间,单位是ms
PCLK1为APB1的时钟频率,最大为36MHz
WDGTB为窗口看门狗的预分频系数
T[5:0]为窗口看门狗的计数器低6位
窗口看门狗的计数最大值0X7F,因为是7位,所以最大是1111111
二、WWDG配置步骤
wwdg相关库函数在stm32f10x_wwdg.c和stm32f10x_wwdg.h中
(1)使能WWDG时钟:
RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG,ENABLE);
(2)设置WWDG窗口值和分频系数
void WWDG_SetWindowValue(uint8_t WindowValue);
void WWDG_SetPrescaler(uin32_t WWDG_Prescaler);
分频系数为WWDG_Prescaler_x x可以为1,2,4,8
(3)开启WWDG中断并分组
NVIC_Init();
WWDG_EnableIT();
(4)设置计数器初始值并使能WWDG
void WWDG_Enable(uint8_t Counter);
void WWDG_SetCounter(uint8_t Counter);
(5)编写WWDG中断服务函数
WWDG_IRQHandler
WWDG_ClearFlag();
四、编写窗口看门狗程序
功能:系统开启时,D1指示灯点亮500ms时间,然后熄灭。
D2指示灯不断闪烁表示正在喂狗,如果喂狗超时将重启系统,D1指示灯点亮500ms时间,然后熄灭。继续喂狗
程序框架:
(1)初始化WWDG(使能WWDG时钟,设置窗口以及分频系数,使能中断等);
(2)编写窗口看门狗中断服务函数
(3)编写主函数