**废话:**前面已经学习了CubeMx配置工程的相关用法,本节我们就来看看这所谓的看门狗可以溜着玩不。。。
看门狗的原理: 单片机系统在外界的干扰下会出现程序跑飞的现象导致出现死循环,看门狗电路就是为了避免这种情况的发生。看门狗的作用就是在一定时间内(通过定时计数器实现)没有接收喂狗信号(表示MCU已经挂了),便实现处理器的自动复位重启(发送复位信号)。
看门狗寄存器的运行机制: ① 独立看门狗时钟源:一般由独立的RC振荡器LSI提供。 ② 计数器时钟:递减计数器的时钟由LSI经过一个八位的预分频器得到,可以通过操作寄存器IWDG_PR来设置分频因子,分频因子的取值为:4、8、16、32、64、128、256。
计数器时钟CK_CNT= LSI/ 4*2^PRV(分频因子)③ 计数器:独立看门狗的计数器是一个 12 位的递减计数器,最大值为 0XFFF,当计数器减到 0时,会产生一个复位信号:IWDG_RESET,让程序重新启动运行,如果在计数器减到 0 之前刷新了计数器的值的话,就不会产生复位信号,重新刷新计数器值的这个动作我们俗称喂狗。 ④ 重装载寄存器:重装载寄存器是一个 12 位的寄存器,里面装着要刷新到计数器的值,这个值的大小决定着独立看门狗的溢出时间。
超时时间 Tout = (4*2^prv) / LSI * rlv (s) prv是预分频器寄存器的值,rlv是重装载寄存器的值。⑤ 键值寄存器: IWDG_KR 可以说是独立看门狗的一个控制寄存器,主要有三种控制方式,往这个寄存器写入下面三个不同的值有不同的效果。 ⑥ 状态寄存器:状态寄存器 SR只有位 0:PVU和位 1:RVU有效,这两位只能由硬件操作,软件操作不了。RVU:看门狗计数器重装载值更新,硬件置 1 表示重装载值的更新正在进行中,更新完毕之后由硬件清 0。PVU: 看门狗预分频值更新,硬件置’1’指示预分频值的更新正在进行中,当更新完成后,由硬件清 0。所以只有当 RVU/PVU等于 0 的时候才可以更新重装载寄存器/预分频寄存器。
STM32F767 的独立看门狗由内部专门的 32Khz 低速时钟( LSI) 驱动,即使主时钟发生故障,它也仍然有效。这里需要注意独立看门狗的时钟是一个内部 RC 时钟,所以并不是准确的32Khz,而是在 17~47Khz 之间的一个可变化的时钟,只是我们在估算的时候,以 32Khz 的频率来计算,看门狗对时间的要求不是很精确,所以,时钟有些偏差,都是可以接受的。
本节我们将通过STM32CubeMx来配置独立看门狗实现按键 KEY_UP 来喂狗,然后通过 DS0 提示复位状态的功能。
将我们的工程编译完成后下载来验证是否完成我们本节的需求。(已完成功能的基本测试)
独立看门狗工程 百度链接:https://pan.baidu.com/s/1sY-OLZ5A4yzI8Ad-XKy0zw 提取码:je3x
通过STM32CubeMX软件配置独立看门狗已经完成。这个功能实现起来相对简单,重点是了解独立看门的原理和运行机制这对我们软件的编写会有很大的帮助。好了,本节就到这里吧。
STM32CubeMX学习笔记八 《窗口看门狗》 作者:Cary.chen