STM32
直播中

王雪

7年用户 959经验值
私信 关注
[问答]

窗口看门狗如何进行喂狗防止复位?


窗口看门狗如何进行喂狗防止复位?
为什么需要窗口看门狗?

回帖(1)

刘柳

2021-9-27 16:26:25








1.从上图我们可以知道:计数器初始值到窗口上限值之间不能喂狗,只有在上限值和下限值之间喂狗可以防止复位,一旦到达0x3f立即就会产生复位,这里在计数器到达0x40时我们可以使能一个中断进行喂狗防止复位。

2.为什么需要窗口看门狗:

因为窗口看门狗即不能早喂狗也不能晚喂狗,是只有在我们自己设置的窗口值内喂狗才能避免程序复位。降低了因程序跑飞可能误触发喂狗程序的可能性。另外我们可以利用窗口看门狗准确的检测程序的运行,例如一个程序运行时间为50ms,我们可以通过配置上限值以及分频系数使得窗口时间略大于50ms,这样如果程序没问题的话就会去喂狗而不会复位,如果出了问题就不会喂狗而复位。
3.窗口时间计算:

上限值-0x40=计数个数
计一个数所需的时间:1/(pclk1/4096/分频系数)
所以,计数个数*计一个数所需的时间=窗口时间
4.具体配置:

注意:wwdg用的是pclk1的时钟
        WWDG_CNT =tr&WWDG_CNT;        NVIC_InitTypeDef NVIC_InitStruct;        RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE);        WWDG_SetPrescaler(fprer);        WWDG_SetWindowValue(wr);        WWDG_Enable(WWDG_CNT);        WWDG_ClearFlag();        WWDG_EnableIT();                NVIC_InitStruct.NVIC_IRQChannel = WWDG_IRQn;        NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0;        NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0;        NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;        NVIC_Init(&NVIC_InitStruct);
举报

更多回帖

发帖
×
20
完善资料,
赚取积分