![d02d26418b9d43d14f48c2e2cdf5749b.png](https://i-blog.csdnimg.cn/blog_migrate/91b042cd52cff34437b9b7124427e2ba.png)
//时间计算(大概):Tout=((4*2^prer)*rlr)/40 (ms)void IWDG_Init(u8 prer,u16 rlr)
{ IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); IWDG_SetPrescaler(prer); IWDG_SetReload(rlr); IWDG_ReloadCounter(); IWDG_Enable();
}
喂狗可通过调用如下函数进行:
IWDG_ReloadCounter();//reload
另外要注意不要使用硬件时钟中断喂狗,因为硬件时钟中断一般都有较高优先级且独立于主控程序,这样有时会出现主控程序虽然跑飞了,但仍能够正常喂狗的现象。
独立看门狗能够在一定程度上监控着程序正常运行,然而我认为更加强大,应用更灵活及更能保证程序稳定运行的还属窗口看门狗,虽然它开始时不太好理解。
▍STM32窗口看门狗
共三个寄存器,如下图:
![1d8e4bae538c0b287186794f95a2968d.png](https://i-blog.csdnimg.cn/blog_migrate/a1e9720be7fdf3854645e0a7e9887e95.png)
![1dd67ee78248ccb167ce79f21af222a0.png](https://i-blog.csdnimg.cn/blog_migrate/dd60b989ad2a50901ef1733558ae63d9.jpeg)
//窗口看门狗中断服务设置程序void WWDG_NVIC_Init(){
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
NVIC_InitStructure.NVIC_IRQChannel = WWDG_IRQn; //WWDG 中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //抢占2 子优先级3 组2
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //抢占2,子优先级3,组2
NVIC_Init(&NVIC_InitStructure); //NVIC 初始化
}
//保存WWDG 计数器的设置值,默认为最大.u8 WWDG_CNT=0x7f;
//初始化窗口看门狗//tr :T[6:0],计数器值//wr :W[6:0],窗口值//fprer:分频系数(WDGTB ),仅最低2 位有效//Fwwdg=PCLK1/(4096*2^fprer).
void WWDG_Init(u8 tr,u8 wr,u32 fprer)
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE); // WWDG 时钟使能
WWDG_CNT=tr&WWDG_CNT; //初始化WWDG_CNT.
WWDG_SetPrescaler(fprer); //设置IWDG 预分频值
WWDG_SetWindowValue(wr); //设置窗口值
WWDG_Enable(WWDG_CNT); //使能看门狗,设置counter
WWDG_ClearFlag(); //清除提前唤醒中断标志位 (注:若没有此句则会在初始化后先进入中断一次)
WWDG_NVIC_Init(); //初始化窗口看门狗NVIC
WWDG_EnableIT(); //开启窗口看门狗中断
}
以上代码朋友们也可以跳到库函数代码中自己研究下,另外要说明下的是WWDG_EnableIT(); 函数相关代码
#define CFR_EWI_BB (PERIPH_BB_BASE + (CFR_OFFSET * 32) + (EWI_BitNumber * 4))
用到位带操作,具体理解可参照《Cortex-M3权威指南》第五章的位带操作相关介绍(具体89页)。
![05adccab291287620acec3e5f48f2923.gif](https://i-blog.csdnimg.cn/blog_migrate/8efcbe8887e830b63953b054026c369e.gif)
关注『面包板社区』,后台回复"技术关键词",领取300 G学习资料包(如:电源、电机、嵌入式、信号系统、模电、华为、电子学、电路、c语言...)
扫码关注@面包板社区每天学点电子技术
#推荐阅读#
拆解售价百元LED灯,省成本真是省到家了
为什么晶振不集成到芯片内部去?
捷克“焊武帝”又一妖骚大作!用铁丝做“电路板”...
牛人自制电灯泡,20000W,结果“亮”了
电子元器件电路符号+实物图+命名规则
详解CAN总线
RS-232、RS-422、RS-485的那些细微差别!
拆解:某国产电动牙刷
▼点击阅读原文,下载《 22个有趣新颖的STM32项目资料》