开发者学堂课程【嵌入式之RFID开发与应用2020版:看门狗定时器原理】学习笔记与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/665/detail/11163
看门狗定时器原理
内容简介:
一:看门狗
二:看门狗使用
本节内容学习看门狗相关知识,很多人认为看门狗不该在基础课程中学习,而应该在进阶课程。但是无论里面的知识多基础都应该加上看门狗知识,因为做产品时这个知识很重要,市场上很多出售的产品没有看门狗而导致整个系统崩溃,崩溃之后没有办法复位,恢复到最初状态。所以很多不懂的用户,比如电池供电而电池无法打开时的情况下,一直持续供电状态下,但程序早就报废了,设备对普通用户来讲它坏了,但它没有彻底坏掉。
一:看门狗
STM32有两个看门狗:
➢窗口看门狗,号称宠物狗,采用系统时钟(和系统的app是共用的),监控软件的运行异常。
窗口看门狗一般用于有操作系统的环境下,对一些任务的单独的软件的监听,判断它是否异常。因为窗口看门狗一旦出现异常,也即在规定时间内没有去窗口看门狗喂狗,
➢独立看门狗,号称警犬,通过一个12bit计数器对设定频率减计数,采用独立时钟,监控芯片异常。独立于芯片之外的系统,但可以通过这个系统配置,但配置之后就没有关系了,就只需要去判断它的状态。
如果STM32芯片整个出现异常,只要独立看门狗是好的,它就可以发出警告或者恢复这个芯片。但如果独立看门狗也坏了,是否能让芯片恢复还未研究。
看门狗的意思是这个芯片在运行程序,那如何知道它在运行程序?认为它没有出现问题就是在运行程序,但有可能程序运行着会突然不运行了,那如何程序是否一直在运行?就相当于我们每隔一段时间唱一首歌或每隔一段时间叫名字就认为我们还活着,还在正常运行,在这里就是设定一个定时器,定时器在规定时间内像沙漏般在规定时间内漏完,但是在漏完之前需要把沙漏翻转过来,如果程序在规定时间内没有翻转沙漏,就认为程序出故障了。因为程序没有完成规定的事情。
程序出问题对于窗口看门狗来说是指某个软件出了问题,那就可以处罚一个中断,可以在中断里面队程序进行重新执行或者让任务重新执行或者无法重新执行时保存重要的资料和保存现场重要信息在flash中。如果程序在检查发现中没有问题,可以在中断中进行喂狗,喂完整个系统可以继续执行。对于独立看门狗在规定时间没有喂狗,就会直接让整个芯片完全复位即芯片从头到尾再执行一遍。所以独立看门狗监听整个芯片。
独立看门狗使用的频率是40khz,然后再根据需要预分频,并且设置重载值是多少,根据频率加上重载值就可以得出计数周期是多少。在规定计数周期内就必须喂狗,不喂狗一旦出现狗被饿死的情况系统就会复位。所以为什么独立看门狗可以监听整个芯片?是因为只要在主事件循环中加入一句话://喂狗。
二:独立看门狗使用
Ø 使能寄存器的写操作
Ø 设置预分频值和重装载值
Ø 启动后就可以使用了
溢出计算公式
其中溢出公式是重要的,需要使用公式算出溢出时间,通过设置预分频值和重装载值来得出溢出时间。
只要设置了看门狗就要定期喂狗,否则系统就会重启,具体溢出时间可以参考下表:
/4表示40khz除以4就得到计数频率,其他类似。PR代表寄存器中的值,设定值为4就是64分频,PL代表设定的分频系数如4分频情况下最短的定时时间和最长定时时间。图中最长定时时间为26ms,这可以满足不同的需求,频率太高耽误正事,频率太低也不行,如小米平衡车,它的喂狗时间就不能太长,20几秒一次车就会转好几圈会坏掉,所以它喂狗的时间应该规定在毫秒30毫秒或20毫秒喂一次,保证在不出现故障的情况下还能正常运行,所以喂狗的时间取决于实际的应用场景。