看门狗的喂法(独立看门狗和窗口看门狗的区别)!

在嵌入式系统中,由于MCU(微控制单元:Microcontroller Unit)的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统的陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测程序运行状态的模块,俗称"看门狗"(watchdog)

在系统运行以后也就启动了看门狗的计数器,看门狗就开始自动计数,如果到了一定的时间还不去清看门狗,那么看门狗计数器就会溢出从而引起看门狗中断,造成系统复位。所以在使用有看门狗的时候要注意清看门狗。

看门狗是恢复系统的正常运行及有效的监视管理器(具有锁定光驱,锁定任何指定程序的作用,可用在家庭中防止小孩无节制地玩游戏、上网、看录像)等具有很好的应用价值.

STM32F10X内置两个看门狗,提供了更高的安全性、时间的精确性和使用的灵活性。两个看门狗设备(独立看门狗和窗口看门狗)可用来检测和解决由软件错误引起的故障;当计数器达到给定的超时值时,触发一个中断或产生系统复位。
独立看门狗(IWDG)由专用的32kHz的低速时钟为驱动;因此,即使主时钟发生故障它也仍然有效。丨WDG最适合应用于那些需要看门狗作为一个在主程序之外,能够完全独立工作,并且对时间精度要求较低的场合。
窗口看门狗由从APB1时钟分频后得到的时钟驱动,通过可配置的时间窗口来检测应用程序非正常的过迟或过早的行为。WWDG最适合那些要求看门狗在精确计时窗口起作用的应用程序。

键值寄存器(IWDG_KR)
预分频寄存器(IWDG_PR)
重装载寄存器(IWDG_RLR)
状态载寄存器(IWDG_SR)

简析:参照第26篇中 RCC 时钟系统框图中最下方一路 LSI RC 独立时钟就是提供给看门狗使用的,这个LSI进来之后,首先通过 IWDG_PR寄存器进行预分频,然后重新得到一个频率,然后用这个频率使 12-bit Down-counter 开始计数,每来一个时钟脉冲就减1,IWDG_RLR是重装载寄存器,这个值设置为多少计数器就从多少开始向下减开始计数,如果这个值减到0,就会产生一个复位信号,如果在减到0之前被重新装载一个新的值,就会重新开始计数,所以这里的重新装载就是**“喂狗”**,一般如果程序跑飞,就会来不及喂狗,自然而然就会产生复位信号。

看门狗超时时间(32kHz的输入时钟)

主要寄存器介绍
键值寄存器
给它一个特殊的值,就能产生特定的操作。起到一个控制作用。

所以喂狗只需向此寄存器写入 0XAAAAh,这样 IWDG_RLR的值就会自动装载、重新计数。

预分频寄存器

重装载寄存器

操作步骤
1)向IWDG_KR写入 0X5555。
通过这步,我们取消 IWDG_PR 和 IWDG_RLR 的写保护,使后面可以操作这两个寄存器。设置 IWDG_PR和IWDG_RLR 的值。
这两步设置看门狗的分频系数,和重装载的值。由此,就可以知道看门狗的喂狗时间,该时间的计算方式为: Tout =40 Khz / ( (4*2^prer ) * rlr ) ; 当然这个值是个粗略的计算值,因为时钟不准确,所以无法得到准确的喂狗时间。
2) 向IWDG_KR 写入0XAAAA 。
通过这句,使STM32重新加载 IWDG_RLR 的值到看门狗计数器里面。也可以用该命令来喂狗。
3) 向IWDG_KR 写入0XCCCC 。
通过上面3个步骤,我们就可以启动STM32的看门狗了,使能了看门狗,在程序里面就必须间隔一定时间间喂狗,否则将导致程序复位。利用这一点,我们将通过一个 LED 灯来指示程序是否重启。

独立看门狗与窗口看门狗的区别!

1、相同点
都是为了保证CPU程序跑飞

2、独立看门狗
根据内部看门狗时钟频率,装载寄存器定一个时间值,比如是1000,那么独立看门狗就会按照时钟频率,从1000开始向下每隔一个时钟周期减1,如果在减到0之前,你用程序代码重新向向下计数器里面写1000(喂狗),那么定时器会重新从1000开始向下递减。如果在减到0的时候,你还没有喂狗(用新的数值覆盖计数器),就会产生复位信号。

3、窗口看门狗
根据系统时钟频率,装载一个初始值到向下计数器(假设还是1000),并且设置一个窗口值(小于装载到计数器的初始值,假设是500),窗口看门狗一般会定死窗口下线值是64。计数器从1000开始向下减,在减到500之前(1000到500间),是不允许你去喂狗的,一旦喂狗,就会产生复位信号。只有计数器值减到上限值之后(500到64),才允许你去喂狗。当计数器减到下限值(64到0之间),如果喂狗,也会产生复位信号,当减到0之后,自动产生复位信号。

所以窗口看门狗实际上就是设置一个窗口(上下限),在这个范围内,你才允许你去喂狗,只要不在这个范围之内,都会复位。

4、区别总结

大致区别在两方面:

1、窗口看门狗计时时间比独立看门狗精准
窗口看门狗使用的是系统时钟源
2、窗口看门狗严格限定喂狗时间段,独立看门狗则是只要没有到时间,都能喂狗

通过上面3个步骤,我们就可以启动STM32的看门狗了,使能了看门狗,在程序里面就必须间隔一定时间间喂狗,否则将导致程序复位。利用这一点,我们将通过一个 LED 灯来指示程序是否重启。

作者:ManGoCHEN(陈惜时)

你可能感兴趣的:(嵌入式的起点)