STM32入门笔记——窗口看门狗

Posted 若你遇见她

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32入门笔记——窗口看门狗相关的知识,希望对你有一定的参考价值。

窗口看门狗概述

功能

他与独立看门狗一样都是用来检测程序的运行情况,只不过他对喂狗时间要求更高。喂狗时间必须在上窗口和下窗口之间喂狗过早或者过晚都会导致程序复位。这样的好处是可以避免程序跑飞后又跑回来,完成了独立看门狗的喂狗。
他使用的时钟也与独立看门狗不一样

工作框图


T60>W60时代表,计数器值大于上窗口的值。这个时候喂狗(为1)。会导致复位。
当T6为0时,即已达到最晚喂狗,则也导致系统复位。

需要特别说明的是:RC寄存器一共7位可以使用,其中,第7位是看门狗使能位,低6位就是计数器。故其最大值为0x7f(在代码里面就会先给RC寄存器最大值)。而喂狗最低时间是固定的,0X3f时复位,即第6位为0时。

相关寄存器




实例代码

这里需要说明的是,如下代码的功能是在窗口看门狗马上到达最低复位值时进入中断,避免其复位。



//保存WWDG计数器的设置值,默认为最大. 
u8 WWDG_CNT=0x7f; 


void WWDG_Init(u8 tr,u8 wr,u32 fprer) //三个入口参数分别为:计数器最大值、上窗口值、预分频值
 
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE);  //   窗口看门狗时钟使能

	WWDG_CNT=tr&WWDG_CNT;                                //初始化WWDG_CNT.计数器上限值,
	 
	WWDG_SetPrescaler(fprer);                            //设置IWDG预分频值

	WWDG_SetWindowValue(wr);                            //设置窗口值,上窗口

	WWDG_Enable(WWDG_CNT); //使能看门狗 ,设置计数器上限,第一次喂狗,这个是内部函数、GOTO定义自己看  
    //到这里看门狗的初始化已经完成	

	WWDG_ClearFlag();          //清除提前唤醒中断标志位 

	WWDG_NVIC_Init();          //初始化窗口看门狗 NVIC

	WWDG_EnableIT();           //开启窗口看门狗中断
 


//重设置WWDG计数器的值
void WWDG_Set_Counter(u8 cnt) //喂狗函数

    WWDG_Enable(cnt);       //使能看门狗设置 counter .	 这个是内部函数、GOTO定义自己看 




//窗口看门狗中断初始化
void WWDG_NVIC_Init()

	NVIC_InitTypeDef NVIC_InitStructure;
	NVIC_InitStructure.NVIC_IRQChannel = WWDG_IRQn;    //WWDG中断
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;   //抢占2,子优先级3,组2	
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;	 //抢占2,子优先级3,组2	
    NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; 
	NVIC_Init(&NVIC_InitStructure);//NVIC初始化


窗口看门狗中断服务函数
void WWDG_IRQHandler(void)
	

	WWDG_SetCounter(WWDG_CNT);	  //当禁掉此句后,窗口看门狗将产生复位

	WWDG_ClearFlag();	  //清除提前唤醒中断标志位

	LED1=!LED1;		 //LED状态翻转
	

//在主函数需要对NVIC进行分组,需要调用WWDG_Init

以上是关于STM32入门笔记——窗口看门狗的主要内容,如果未能解决你的问题,请参考以下文章

STM32入门笔记——独立看门狗

STM32入门笔记——独立看门狗

STM32F103五分钟入门系列(十四)窗口看门狗WWDG

06 STM32F4的窗口看门狗(WWDG)

stm32独立看门狗和窗口看门狗的区别是啥

STM32之独立看门狗(IWDG)与窗口看门狗(WWDG)总结