一、前言

二、时钟树解析

【STM32开发之寄存器版】(五)-窗口看门狗WWDG-LMLPHP

三、窗口看门狗功能介绍

窗口看门狗的时序图如下所示:

【STM32开发之寄存器版】(五)-窗口看门狗WWDG-LMLPHP

四、寄存器介绍

对WWDG的程序设计主要涉及3个寄存器:

下面将对这几个寄存器进行一一介绍。

4.1 WWDG_CR控制寄存器

《STM32中文参考手册》对WWDG_CR寄存器的描述如下:

【STM32开发之寄存器版】(五)-窗口看门狗WWDG-LMLPHP

4.2 WWDG_CFR配置寄存器

《STM32中文参考手册》对WWDG_CFR寄存器的描述如下:

【STM32开发之寄存器版】(五)-窗口看门狗WWDG-LMLPHP

4.3 WWDG_SR状态寄存器

《STM32中文参考手册》对WWDG_SR寄存器的描述如下:

【STM32开发之寄存器版】(五)-窗口看门狗WWDG-LMLPHP

五、程序设计

对于窗口看门狗的程序设计主要分为3个部分:窗口看门狗初始化、重置WWDG计数器的值、窗口看门狗中断服务程序。

5.1 窗口看门狗初始化

//初始化窗口看门狗 	
//tr   :T[6:0],计数器值 
//wr   :W[6:0],窗口值 
//fprer:分频系数(WDGTB),仅最低2位有效 
//Fwwdg=PCLK1/(4096*2^fprer). 
void WWDG_Init(u8 tr,u8 wr,u8 fprer) 
{    
	RCC->APB1ENR|=1<<11; 	//使能wwdg时钟 
	WWDG_CNT=tr&WWDG_CNT;   //初始化WWDG_CNT.     
	WWDG->CFR|=fprer<<7;    //PCLK1/4096再除2^fprer 
	WWDG->CFR&=0XFF80;      
	WWDG->CFR|=wr;     		//设定窗口值      
	WWDG->CR|=WWDG_CNT; 	//设定计数器值 
	WWDG->CR|=1<<7;  		//开启看门狗      
	MY_NVIC_Init(2,3,WWDG_IRQn,2);//抢占2,子优先级3,组2     
	WWDG->SR=0X00; 			//清除提前唤醒中断标志位 
	WWDG->CFR|=1<<9;        //使能提前唤醒中断 
} 

5.2 重置WWDG计数器的值

//重设置WWDG计数器的值 
void WWDG_Set_Counter(u8 cnt) 
{ 
	WWDG->CR =(cnt&0x7F);//重设置7位计数器 
} 

5.3 窗口看门狗中断服务程序

//窗口看门狗中断服务程序 
void WWDG_IRQHandler(void) 
{      
	WWDG_Set_Counter(WWDG_CNT);//重设窗口看门狗的值!         
	WWDG->SR=0X00;//清除提前唤醒中断标志位 
	LED1=!LED1; 
}

六、上机实验

【STM32开发之寄存器版】(五)-窗口看门狗WWDG-LMLPHP

10-08 11:23