12.1 窗口看门狗简介:
窗口看门狗(Window Watchdog, WWDG)是F4芯片上的另外一个看门狗,通常用来监测由外部干扰或不可预见的应用程序软件故障。这种机制能够确保系统的稳定性和可靠性,避免由于系统崩溃或死机等问题对整个系统造成的影响。窗口看门狗,之所以称为窗口,是因为其喂狗时间是一个有上下限的范围内,可以通过设定相关寄存器,设定其上限时间和下限时间:喂狗的时间不能过早也不能过晚。过早喂狗或过晚喂狗都会导致系统重启。
如图所示,CNT的递减寄存器值递减计数,当递减到0x3F时,会产生复位信号,所以必须在0x40之前喂狗;另外,在配置寄存器 (WWDG_CFR)的后六位(W[6:0])存放比较值,如果喂狗时递减寄存器的值大于该比较值也会产生复位信号,所以必须在W[6:0]之后喂狗。W[6:0]的值是用户设置的,配置时要大于0x40,否则没有意义。
12.2 常用寄存器:
12.3 应用代码
void WWDG_Init(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG,ENABLE); //使能窗口看门狗时钟
WWDG_CNT=0x7F&WWDG_CNT; //初始化WWDG_CNT.
WWDG_SetPrescaler(8); //设置分频值
WWDG_SetWindowValue(0x5F); //设置窗口值
WWDG_Enable(WWDG_CNT); //开启看门狗
NVIC_InitStructure.NVIC_IRQChannel=WWDG_IRQn; //窗口看门狗中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x02; //抢占优先级为2
NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x03; //子优先级为3
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; //使能窗口看门狗
NVIC_Init(&NVIC_InitStructure);
WWDG_ClearFlag();//清除提前唤醒中断标志位
WWDG_EnableIT();//开启提前唤醒中断
}
void WWDG_IRQHandler(void)
{
WWDG_SetCounter(WWDG_CNT); //重设窗口看门狗值
WWDG_ClearFlag(); //清除提前唤醒中断标志
}