单片机系统在外界的干扰下会出现程序跑飞的现象导致出现死循环,看门狗电路就是为了避免这种情况的发生。
看门狗的作用就是在一定时间内(通过定时计数器实现)没有接收喂狗信号(表示 MCU 已经挂了),便实现处理器
的自动复位重启(发送复位信号)。
以下为stm32f042单片机独立看门狗相关代码:
/**********************************************************
*函数描述:初始化独立看门狗,timeout为1s
*函数:void IWDG_Init(unsigned char usb_sw)
*参数:无
*作者:
*日期:
***********************************************************/
void IWDG_Init(void)
{
/* Set counter reload value to obtain 250ms IWDG TimeOut.
Counter Reload Value = 1000ms/IWDG counter clock period
= 1000ms / (128/LSI)
= LsiFreq/128
*/
IWDG->KR = 0x5555; //使能对寄存器写操作
IWDG->PR = 0x05; //设置预分频为128分频
IWDG->KR = 40000/128; //设置重装载值
IWDG->KR = (uint16_t)0xAAAA; //重装载计数器
IWDG->KR = (uint16_t)0xCCCC; //使能看门狗
}
/* 喂狗函数 */
void IWDG_ReloadCounter(void)
{
IWDG->KR = (uint16_t)0xAAAA;
}