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