嵌入式学习之窗口看门狗

在这里插入图片描述
在这里插入图片描述

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

猜你喜欢

转载自blog.csdn.net/weixin_44142774/article/details/105983173