WWDG喂狗

3F 是0111111

40 是1000000

0X7F 127

0X5F 95     127-95=32

注意:中断是在0x40,在0x40喂狗则程序不会复位

在0x5F之前喂狗会复位,减小到63以下也会复位

在0x5F与0x3F之间喂狗会继续执行,不会复位

WWDG_HandleTypeDef WWDG_Handler;     //窗口看门狗句柄


//初始化窗口看门狗 	
//tr   :T[6:0],计数器值 
//wr   :W[6:0],窗口值 
//fprer:分频系数(WDGTB),仅最低2位有效 
//Fwwdg=PCLK1/(4096*2^fprer). 一般PCLK1=42Mhz
void WWDG_Init(u8 tr,u8 wr,u32 fprer)
{
    WWDG_Handler.Instance=WWDG;
    WWDG_Handler.Init.Prescaler=fprer; 			//设置分频系数
    WWDG_Handler.Init.Window=wr;       			//设置窗口值
    WWDG_Handler.Init.Counter=tr;     			//设置计数器值
	WWDG_Handler.Init.EWIMode=WWDG_EWI_ENABLE;	//使能提前唤醒中断
    HAL_WWDG_Init(&WWDG_Handler);      			//初始化WWDG
}



//WWDG底层驱动,时钟配置,中断配置
//此函数会被HAL_WWDG_Init()调用
//hwwdg:窗口看门狗句柄
void HAL_WWDG_MspInit(WWDG_HandleTypeDef *hwwdg)
{   
    __HAL_RCC_WWDG_CLK_ENABLE();    //使能窗口看门狗时钟
        
    HAL_NVIC_SetPriority(WWDG_IRQn,2,3);    //抢占优先级2,子优先级为3
    HAL_NVIC_EnableIRQ(WWDG_IRQn);          //使能窗口看门狗中断
}



//窗口看门狗中断服务函数
void WWDG_IRQHandler(void)
{
    HAL_WWDG_IRQHandler(&WWDG_Handler);//调用WWDG共用中断处理函数
}



//中断服务函数处理过程,中断在0x40
//此函数会被HAL_WWDG_IRQHandler()调用
void HAL_WWDG_EarlyWakeupCallback(WWDG_HandleTypeDef* hwwdg) //数到0x40 喂狗,就不会复位了
{
    HAL_WWDG_Refresh(&WWDG_Handler);//更新窗口看门狗值
    LED1=!LED1; 
}

//中断服务函数处理过程
//此函数会被HAL_WWDG_IRQHandler()调用
void HAL_WWDG_EarlyWakeupCallback(WWDG_HandleTypeDef* hwwdg)
{
    delay_ms(2);
    HAL_WWDG_Refresh(&WWDG_Handler);//更新窗口看门狗值
    LED1=!LED1; 

}

注意:延时2ms时,标红代码不会执行,因为已经复位喂狗

同时,while里面函数也正常运行

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值