STM32F030的看门狗分独立看门狗和窗口看门狗。
独立看门狗
使用独立的LSI时钟,因此一旦开启就无法停止,除非复位。所以当使用stop模式时,就需要定时唤醒喂狗。
独立看门狗配置代码如下:
if (RCC_GetFlagStatus(RCC_FLAG_IWDGRST) != RESET) { RCC_ClearFlag(); } IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); IWDG_SetPrescaler(IWDG_Prescaler_128); IWDG_SetReload(LsiFreq / 128); //1s IWDG_ReloadCounter(); IWDG_Enable();
窗口看门狗
使用PCLK1时钟。睡眠模式下,时钟停止。看门狗也停止计数。但喂狗有严格的时间限制,必须在规定的某段时间内喂狗。喂早和喂迟了都会导致系统复位。
窗口看门狗配置代码如下:
if (RCC_GetFlagStatus(RCC_FLAG_WWDGRST) != RESET) { RCC_ClearFlag(); } RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE); WWDG_SetPrescaler(WWDG_Prescaler_8); //refresh window is: ~683 * (127-98)= 19.8ms < refresh window < ~683 * 64 = 43.7ms WWDG_SetWindowValue(98); WWDG_Enable(127); bsp_StartAutoTimer(TMR_WWDG,TMR_PERIOD_30MS);