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
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值