前言
看门狗是一个能够完全独立工作的模块,其主要目的是监视系统的运行状态。
当系统出现异常或者死锁时,独立看门狗可以自动重置系统,确保系统的稳定性和可靠性。
(略:需要每隔一段时间向系统报告(喂狗),超过一定时间不报告了。然后噶了。)
一、独立看门狗代码与注释(HAL库)
IWDG_HandleTypeDef IWDG_Handler; //独立看门狗句柄
IWDG_Handler.Instance=IWDG;
IWDG_Handler.Init.Prescaler=?; //设置IWDG分频系数
IWDG_Handler.Init.Reload=?; //重装载值
HAL_IWDG_Init(&IWDG_Handler); //初始化IWDG,默认会开启独立看门狗
****************************************
HAL_IWDG_Refresh(&IWDG_Handler);//喂狗
窗口看门狗更加严谨一些,只能在一定时间内投喂。
二、窗口看门狗代码与注释(HAL库)
WWDG_HandleTypeDef WWDG_Handler; //窗口看门狗句柄
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
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共用中断处理函数
}
void HAL_WWDG_EarlyWakeupCallback(WWDG_HandleTypeDef* hwwdg)
{
HAL_WWDG_Refresh(&WWDG_Handler);//更新窗口看门狗值
LED1=!LED1;
}