本帖最后由 bruceSTM32 于 2016-3-9 23:10 编辑
看门狗:专门用于监测程序运行状态的模块。程序中开启看门狗,如果出现运行故障或者程序跑飞,不能在规定时间范围内及时喂狗,就会触发中断或者系统复位,将跑飞的程序拉回到运行序列上来。
这就是看门狗的作用。IWDG和WWDG的区别:
(1)IWDG是由专用的低速时钟(LSI)驱动,即使主时钟发生故障它也仍然有效;
WWDG是由APB1时钟分频后得到的时钟驱动。
(2)WWDG可以产生中断。
(3)IWDG最适合应用于那些需要看门狗作为一个在主程序之外,能够完全独立工作,并且对时间精度要求较低的场合;
WWDG最适合那些要求看门狗在精确计时窗口起作用的应用程序。
键值寄存器:给一个特殊的值,就能产生一个特殊的操作,起到控制的作用。
下图为独立看门狗的原理框图。
理解了这个框图,就能明白独立看门狗的工作原理。
低速内部时钟经过预分频寄存器进行分频,就会得到一个新的时钟频率,通过重载寄存器的值加载到计数器,
如果计数器在计数到0之前还没有给计数器重新加载值,那么独立看门狗就会复位;如果在计数器计数到0之前,
给键寄存器写入0xAAAA(也就是要喂狗),那么重载寄存器的值就会被重新加载到计数器,从而就避免了看门狗复位。
独立看门狗的超时时间是由预分频寄存器和重装载寄存器共同决定的。
独立看门狗操作步骤:
(1)打开驱动独立看门狗的低速内部时钟(LSI)
由RCC的控制/状态寄存器RCC_CSR中的LSION置1;
(2)配置IWDG_PR和IWDG_RLR寄存器的值
向键寄存器IWDG_KR中写入0x5555,修改预分频寄存器和重装载寄存器中的值;
(3)开启独立看门狗
向键寄存器IWDG_KR中写入0xCCCC,开始启用独立看门狗;
(4)喂狗
在程序中隔一定时间就要向键寄存器IWDG_KR中写入0xAAAA,进行喂狗,否则看门狗就会复位。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
个人觉得 如果像你说的那样 程序老是跑飞或者不执行 那是编程时逻辑不合理的节奏 但比如像在比较复杂的电磁环境下 可能出现某个寄存器的值出现错误或者数据线出现问题 看门狗就会有比较好的作用;还有就是多次需要喂狗的问题 觉得可以用MDK仿真 查看程序循环时所需要的时间 再确定是不是需要多次喂狗。
一周热门 更多>