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);