概述
窗口看门狗通常被用来监测,由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障。除非递减计数器的值在T6位变成0前被刷新,看门狗威廉希尔官方网站
在达到预置的时间周期时,会产生一个MCU复位。在递减计数器达到窗口寄存器数值之前,如果7位的递减计数器数值(在控制寄存器中)被刷新, 那么也将产生一个MCU复位。这表明递减计数器需要在一个有限的时间窗口中被刷新。
条件复位
当递减计数器的值小于0X40则启动复位
当递减计数器在窗口外被重装载则复位
如果启动了窗口看门狗且开启中断,当递减计数器计数到0X40时产生早期唤醒中断(EWI),用于重装载计数器避免看门狗复位
STM32中文参考手册18.3
窗口看门狗超时时间公式
TWWDG = TPCLK1 x 4096 x 2^WDGTB x (T[5:0] + 1)
步骤
使能时钟
窗口看门狗使用APB1时钟分频
RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG,ENABLE);
设置分频系数
WWDG_SetPrescaler(WWDG_Prescaler);
设置窗口值
WWDG_SetWindowValue(WWDG_WindowValue);
使能看门狗
WWDG_Enable(WWDG_ReloadValue);
清除中断标志位
WWDG_ClearFlag();
初始化中断设置
NVIC_wwdg_Init.NVIC_IRQChannel=WWDG_IRQn;
NVIC_wwdg_Init.NVIC_IRQChannelCmd=ENABLE;
NVIC_wwdg_Init.NVIC_IRQChannelPreemptionPriority=0
NVIC_wwdg_Init.NVIC_IRQChannelSubPriority=2
NVIC_Init(&NVIC_wwdg_Init);
使能中断
WWDG_EnableIT();
编写中断服务函数
void WWDG_IRQHandler()
{
WWDG_SetCounter(WWDG_ReloadValue
WWDG_ClearFlag();
}
概述
窗口看门狗通常被用来监测,由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障。除非递减计数器的值在T6位变成0前被刷新,看门狗威廉希尔官方网站
在达到预置的时间周期时,会产生一个MCU复位。在递减计数器达到窗口寄存器数值之前,如果7位的递减计数器数值(在控制寄存器中)被刷新, 那么也将产生一个MCU复位。这表明递减计数器需要在一个有限的时间窗口中被刷新。
条件复位
当递减计数器的值小于0X40则启动复位
当递减计数器在窗口外被重装载则复位
如果启动了窗口看门狗且开启中断,当递减计数器计数到0X40时产生早期唤醒中断(EWI),用于重装载计数器避免看门狗复位
STM32中文参考手册18.3
窗口看门狗超时时间公式
TWWDG = TPCLK1 x 4096 x 2^WDGTB x (T[5:0] + 1)
步骤
使能时钟
窗口看门狗使用APB1时钟分频
RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG,ENABLE);
设置分频系数
WWDG_SetPrescaler(WWDG_Prescaler);
设置窗口值
WWDG_SetWindowValue(WWDG_WindowValue);
使能看门狗
WWDG_Enable(WWDG_ReloadValue);
清除中断标志位
WWDG_ClearFlag();
初始化中断设置
NVIC_wwdg_Init.NVIC_IRQChannel=WWDG_IRQn;
NVIC_wwdg_Init.NVIC_IRQChannelCmd=ENABLE;
NVIC_wwdg_Init.NVIC_IRQChannelPreemptionPriority=0
NVIC_wwdg_Init.NVIC_IRQChannelSubPriority=2
NVIC_Init(&NVIC_wwdg_Init);
使能中断
WWDG_EnableIT();
编写中断服务函数
void WWDG_IRQHandler()
{
WWDG_SetCounter(WWDG_ReloadValue
WWDG_ClearFlag();
}
举报