独立看门狗学习

2019-10-16 07:38发布

本帖最后由 bruceSTM32 于 2016-3-9 23:10 编辑

看门狗:专门用于监测程序运行状态的模块。程序中开启看门狗,如果出现运行故障或者程序跑飞,不能在规定时间范围内及时喂狗,就会触发中断或者系统复位,将跑飞的程序拉回到运行序列上来。
这就是看门狗的作用。IWDG和WWDG的区别:
(1)IWDG是由专用的低速时钟(LSI)驱动,即使主时钟发生故障它也仍然有效;
   WWDG是由APB1时钟分频后得到的时钟驱动。
(2)WWDG可以产生中断。
(3)IWDG最适合应用于那些需要看门狗作为一个在主程序之外,能够完全独立工作,并且对时间精度要求较低的场合;
   WWDG最适合那些要求看门狗在精确计时窗口起作用的应用程序。

键值寄存器:给一个特殊的值,就能产生一个特殊的操作,起到控制的作用。
下图为独立看门狗的原理框图。

QQ截图20160309224056.jpg
理解了这个框图,就能明白独立看门狗的工作原理。
低速内部时钟经过预分频寄存器进行分频,就会得到一个新的时钟频率,通过重载寄存器的值加载到计数器,
如果计数器在计数到0之前还没有给计数器重新加载值,那么独立看门狗就会复位;如果在计数器计数到0之前,
给键寄存器写入0xAAAA(也就是要喂狗),那么重载寄存器的值就会被重新加载到计数器,从而就避免了看门狗复位。

独立看门狗的超时时间是由预分频寄存器和重装载寄存器共同决定的。
QQ截图20160309230443.jpg

独立看门狗操作步骤:
(1)打开驱动独立看门狗的低速内部时钟(LSI)
由RCC的控制/状态寄存器RCC_CSR中的LSION置1;
(2)配置IWDG_PR和IWDG_RLR寄存器的值
向键寄存器IWDG_KR中写入0x5555,修改预分频寄存器和重装载寄存器中的值;
(3)开启独立看门狗
键寄存器IWDG_KR中写入0xCCCC,开始启用独立看门狗;
(4)喂狗
在程序中隔一定时间就要向键寄存器IWDG_KR中写入0xAAAA,进行喂狗,否则看门狗就会复位。

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
wsxg520
1楼-- · 2019-10-16 08:17
小杰哥 发表于 2016-8-6 11:14
如果出现运行故障或者程序跑飞,不能在规定时间范围内及时喂狗,就会触发中断或者系统复位,将跑飞的程序拉 ...

个人觉得 如果像你说的那样 程序老是跑飞或者不执行 那是编程时逻辑不合理的节奏 但比如像在比较复杂的电磁环境下 可能出现某个寄存器的值出现错误或者数据线出现问题 看门狗就会有比较好的作用;还有就是多次需要喂狗的问题 觉得可以用MDK仿真 查看程序循环时所需要的时间 再确定是不是需要多次喂狗。
Da Wen
2楼-- · 2019-10-16 13:29
独立看门狗没有中断,窗口看门狗有中断,中断可以用来做“后事”
bruceSTM32
3楼-- · 2019-10-16 17:20
 精彩回答 2  元偷偷看……
小杰哥
4楼-- · 2019-10-16 22:58
如果出现运行故障或者程序跑飞,不能在规定时间范围内及时喂狗,就会触发中断或者系统复位,将跑飞的程序拉回到运行序列上来。那么我想请问一下,是不是一定要在程序中多次用到喂狗的程序?还有,程序跑飞了就算拉回运行序列上来后,如果程序没有改变,那不一样又跑飞了 吗??

一周热门 更多>