[其他ST产品] STM32之关门狗

[复制链接]
2029|62
 楼主| 烟雨蒙蒙520 发表于 2023-9-20 12:55 | 显示全部楼层 |阅读模式
看门狗介绍
在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统的陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的模块或者芯片俗称“看门狗“(watchdog)。

有一个程序员叫张三,老板养了一条狗用来监督张三持续工作,张三需要定时喂养这条狗以确保老板知道自己一直在努力工作,如果有一次没有喂养这条狗,那么狗就会反骨咬死张三,张三就会重新升天投胎为程序员继续工作,同时老板还是派这条狗来监督张三的工作,张三同样也需要定时喂养他,往复持续。

独立看门狗(IWDG)
独立看门狗工作在主程序之外,能够完全独立工作,它的时钟是专用的低速时钟(LSI),由VDD电压供电,在停止模式和待机模式下仍能工作。

独立看门狗的本质
独立看门狗是一个12位的递减计数器,当计数器的值从某个值一直减到0的时候,系统就会产生-个复位信号,即IWDG_RESET。

如果在计数没减到0之前,刷新了计数器的值的话,那么就不会产生复位信号,这个动作就是我们经常说的喂狗。

评论

———————————————— 版权声明:本文为CSDN博主「haozigegie」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/weixin_54076783/article/details/129346572  发表于 2023-9-20 12:56
 楼主| 烟雨蒙蒙520 发表于 2023-9-20 12:56 | 显示全部楼层
独立看门狗的时钟
独立看门狗的时钟由独立的RC振荡器LSI提供,即使主时钟发生故障它仍然有效,非常独立。启用IWDG后,LSI时钟会自动开启。MCU内部的RC频率会在30kHz到60kHz之间变化,因此 LSI时钟频率并不精确,一般设定为40kHz。

LSI经过一个8位的预分频器得到计数器时钟。

想要获得独立看门狗相对精准的超时时间可以对LSI进行校准
 楼主| 烟雨蒙蒙520 发表于 2023-9-20 12:56 | 显示全部楼层
 楼主| 烟雨蒙蒙520 发表于 2023-9-20 12:56 | 显示全部楼层
独立看门狗框图
99081650a7b88038a0.png
 楼主| 烟雨蒙蒙520 发表于 2023-9-20 12:56 | 显示全部楼层
独立看门狗框图
 楼主| 烟雨蒙蒙520 发表于 2023-9-20 12:57 | 显示全部楼层
键寄存器(IWDG_KR)
92989650a7b9642b05.png
独立看门狗的控制寄存器,主要有三种控制方式。
 楼主| 烟雨蒙蒙520 发表于 2023-9-20 12:57 | 显示全部楼层
预分频寄存器(IWDG_PR)

43066650a7bae15ff3.png
分频系数算法:PSC = 4 * 2^prer

prer是IWDG_PR的值,即当IWDG_PR为010时,即prer为2
 楼主| 烟雨蒙蒙520 发表于 2023-9-20 12:57 | 显示全部楼层
重装载寄存器(IWDG_RLR)
40434650a7bc3da897.png
 楼主| 烟雨蒙蒙520 发表于 2023-9-20 12:57 | 显示全部楼层
用于存放重装载值,最大值为4096,该寄存器的值的大小决定了独立看门狗的溢出时间

独立看门狗的溢出时间与PSC和RLR的值有关,溢出时间计算公式如下

 楼主| 烟雨蒙蒙520 发表于 2023-9-20 12:58 | 显示全部楼层
 楼主| 烟雨蒙蒙520 发表于 2023-9-20 12:58 | 显示全部楼层
独立看门狗实验
开启独立看门狗,溢出时间为一秒,使用按键进行喂狗,不喂狗时反复执行main函数,导致LED1闪烁,喂狗时只执行一次main函数,LED1常亮。
 楼主| 烟雨蒙蒙520 发表于 2023-9-20 12:58 | 显示全部楼层
独立看门狗喂狗函数HAL_IWDG_Refresh()
  1. 原型:HAL_StatusTypeDef HAL_IWDG_Refresh(IWDG_HandleTypeDef *hiwdg)

  2. 参数:
  3. IWDG_HandleTypeDef *hiwdg:独立看门狗句柄

  4. 实例:HAL_IWDG_Refresh(&hiwdg);
 楼主| 烟雨蒙蒙520 发表于 2023-9-20 12:59 | 显示全部楼层
使用STM32CubeMX创建工程
配置SYS
37096650a7c1dc9e00.png
 楼主| 烟雨蒙蒙520 发表于 2023-9-20 12:59 | 显示全部楼层
配置RCC
65185650a7c2e0c694.png
 楼主| 烟雨蒙蒙520 发表于 2023-9-20 12:59 | 显示全部楼层
配置GPIO
PB9都配置为输出高电平,PA0配置为下降沿触发中断
74447650a7c3ae55ca.png
 楼主| 烟雨蒙蒙520 发表于 2023-9-20 12:59 | 显示全部楼层
配置NVIC
将PA0的中断的抢占优先级配置为3,因为待会要在中断处理函数中调用HAL_Delay(),而该函数要用到滴答定时器,而在程序初始化时默认将滴答定时器的中断优先级设置为最低,因此其他中断源很容易将其打断。
21649650a7c4981664.png
 楼主| 烟雨蒙蒙520 发表于 2023-9-20 13:00 | 显示全部楼层
配置IWDG
35218650a7c560fb2b.png
 楼主| 烟雨蒙蒙520 发表于 2023-9-20 14:17 | 显示全部楼层
配置工程名称、工程路径
 楼主| 烟雨蒙蒙520 发表于 2023-9-20 14:17 | 显示全部楼层
 楼主| 烟雨蒙蒙520 发表于 2023-9-20 14:17 | 显示全部楼层
选择固件库
您需要登录后才可以回帖 登录 | 注册

本版积分规则

41

主题

720

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部