当前位置: 首页 > article >正文

【STM32】独立看门狗(IWDG)原理详解及编程实践(上)

本篇文章是对STM32单片机“独立看门狗(IWDG)”的原理进行讲解。希望我的分享对你有所帮助!

目录

一、什么是独立看门狗

(一)简介

 (二)、独立看门狗的原理

(三)、具体操作说明 

二、结语


一、什么是独立看门狗

(一)简介

单片机的独立看门狗(Independent Watchdog Timer,简称 IWDG)是一种用于监控和保护微控制器(MCU)系统的硬件组件。它的主要功能是检测系统是否在正常工作,并在发现系统出现故障时自动进行复位操作,以确保系统的稳定性和可靠性。

 (二)、独立看门狗的原理

  1. 基本概念

    独立看门狗是一个专门的计时器,与主处理器的时钟源和其他外设通常是独立的。它通过定期的“喂狗”操作(即向看门狗计时器中写入特定的值)来保持系统的正常运行状态。如果系统出现问题,无法进行正常的“喂狗”操作,看门狗计时器会超时,从而触发系统复位。

  2. 工作机制

    • 计时器设置:独立看门狗通常有一个可配置的计时周期,这个周期可以是几个秒钟到几分钟不等。这个计时周期是由硬件定义的,通常是通过一个独立的、具有稳定性的时钟源来驱动,如内部振荡器或外部晶振。

    • 喂狗操作:为了防止看门狗计时器超时,系统需要定期向看门狗发送“喂狗”信号。这通常是通过向特定寄存器写入值来实现。每当“喂狗”操作成功,计时器的计数会被重置,从而重新开始计时。

    • 超时与复位如果在看门狗的计时周期内没有收到“喂狗”信号,计时器会达到预设的超时值。此时,看门狗会触发一个复位信号,将系统重新启动,试图恢复系统到正常的工作状态。

  3. 独立性

    与主系统时钟和处理器的运行状态无关,看门狗的独立性是其关键特性。即使主处理器由于某种原因停止工作或进入无响应状态,看门狗仍会正常计时并执行其监控功能。这种独立性使得看门狗在系统出现故障时仍能有效地执行复位操作。

  4. 应用

    • 系统保护独立看门狗主要用于保护系统在遇到软件死锁、程序崩溃等异常情况时能自动复位,恢复到正常状态,确保系统的可靠性和稳定性。

    • 安全性在一些安全关键的应用场景中,例如汽车电子、工业控制系统等,独立看门狗可以提供额外的安全保障,避免因系统失效导致的安全隐患。

(三)、具体操作说明 

STM32 的独立看门狗由内部专门的 40Khz 低速时钟驱动,即使主时钟发生故障,它也仍然
有效。这里需要注意独立看门狗的时钟是一个内部 RC 时钟,所以并不是准确的 40Khz,而是在 30~60Khz 之间的一个可变化的时钟,只是我们在估算的时候,以 40Khz 的频率来计算,看门狗对时间的要求不是很精确,所以,时钟有些偏差,都是可以接受的。独立看门狗有几个寄存器与我们这节相关,我们分别介绍这几个寄存器,首先是键值寄存器 IWDG_KR,该寄存器的各位描述如图

在键寄存器(IWDG_KR)中写入 0xCCCC,开始启用独立看门狗;此时计数器开始从其复位
值 0xFFF 递减计数。当计数器计数到末尾 0x000 时,会产生一个复位信(IWDG_RESET)。 无论何时,只要键寄存器 IWDG_KR 中被写入 0xAAAA, IWDG_RLR 中的值就会被重新加载到计数器中从而避免产生看门狗复位 。


IWDG_PR 和 IWDG_RLR 寄存器具有写保护功能。要修改这两个寄存器的值,必须先向IWDG_KR 寄存器中写入 0x5555。 将其他值写入这个寄存器将会打乱操作顺序,寄存器将重新被保护。重装载操作(即写入 0xAAAA)也会启动写保护功能。


接下来,我们介绍预分频寄存器(IWDG_PR),该寄存器用来设置看门狗时钟的分频系数,最低为 4,最高位 256,该寄存器是一个 32 位的寄存器,但是我们只用了最低 3 位,其他都是保留位。预分频寄存器各位定义如图

在介绍完 IWDG_PR 之后,我们介绍一下重装载寄存器。该寄存器用来保存重装载到计数器中的值。该寄存器也是一个 32 位寄存器,但是只有低 12 位是有效的,该寄存器的各位描述如图

只要对以上三个寄存器进行相应的设置,我们就可以启动 STM32 的独立看门狗,启动过程可以按如下步骤实现:


 1)向 IWDG_KR 写入 0X5555。
通过这步,我们取消 IWDG_PR 和 IWDG_RLR 的写保护,使后面可以操作这两个寄存器。
设置 IWDG_PR 和 IWDG_RLR 的值。
这两步设置看门狗的分频系数,和重装载的值。由此,就可以知道看门狗的喂狗时间(也
就是看门狗溢出时间),该时间的计算方式为:

Tout=((4× 2^prer) × rlr) /40

其中 Tout 为看门狗溢出时间(单位为 ms); prer 为看门狗时钟预分频值(IWDG_PR 值),范围为 0~7; rlr 为看门狗的重装载值(IWDG_RLR 的值);
比如我们设定 prer 值为 4, rlr 值为 625,那么就可以得到 Tout=64× 625/40=1000ms,这样,看门狗的溢出时间就是 1s,只要你在一秒钟之内,有一次写入 0XAAAA 到 IWDG_KR,就不会导致看门狗复位(当然写入多次也是可以的)。这里需要提醒大家的是,看门狗的时钟不是准确的 40Khz,所以在喂狗的时候,最好不要太晚了,否则,有可能发生看门狗复位。


2) 向 IWDG_KR 写入 0XAAAA。
通过这句,将使 STM32 重新加载 IWDG_RLR 的值到看门狗计数器里面。 即实现独立看门
狗的喂狗操作。


3)向 IWDG_KR 写入 0XCCCC。
通过这句,来启动 STM32 的看门狗。 注意 IWDG 在一旦启用,就不能再被关闭!想要关
闭,只能重启,并且重启之后不能打开 IWDG,否则问题依旧,所以在这里提醒大家,如果不用 IWDG 的话,就不要去打开它,免得麻烦。
通过上面 3 个步骤,我们就可以启动 STM32 的看门狗了,使能了看门狗,在程序里面就必须间隔一定时间喂狗,否则将导致程序复位。利用这一点,我们本章将通过一个 LED 灯来指示程序是否重启,来验证 STM32 的独立看门狗。
在配置看门狗后, DS0 将常亮,如果 KEY_UP 按键按下,就喂狗,只要 KEY_UP 不停的
按,看门狗就一直不会产生复位,保持 DS0 的常亮,一旦超过看门狗定溢出时间(Tout)还没按,那么将会导致程序重启,这将导致 DS0 熄灭一次。

二、结语

关于“单片机独立看门狗”的知识就介绍到这里了,下一篇文章将通过实践代码来说明。 

【STM32】独立看门狗(IWDG)原理详解及编程实践(下)-CSDN博客


http://www.kler.cn/news/302857.html

相关文章:

  • [网络][CISCO]CISCO IOS升级
  • 走进低代码表单开发(一):可视化表单数据源设计
  • Redis 入门 - C#|.NET Core客户端库六种选择
  • C++ | Leetcode C++题解之第389题找不同
  • 说真心话,在IT行业,项目经理不懂「敏捷管理」真混不下去!
  • 就服务器而言,ARM架构与X86架构有什么区别?各自的优势在哪里?
  • EP10 全局渐变背景色
  • Android Jetpact Lifecycle 解析
  • STM32双轮平衡小车(基于STM32F103C8T6HAL库)
  • [Go]-抢购类业务方案
  • 设计模式 解释器模式(Interpreter Pattern)
  • 从键入网址到显示页面全流程(超详细版)
  • Axure中继器介绍
  • 大屏可视化适配方案
  • 前端数组迭代方法分析
  • 【深度学习】多层感知机的从零开始实现与简洁实现
  • 【RabbitMQ】概述
  • GitHub图床
  • docker 进程的概念
  • 【STM32系统】基于STM32设计的智能垃圾桶(语音、颜色识别、称重、光强、烟雾、人体识别、步进电机、水泵)——文末资料下载
  • android.database.sqlite.SQLiteException: no such table
  • MySQL之DQL子查询
  • Windows系统Docker部署AList并挂载阿里云盘实现远程访问详细教程——“cpolar内网穿透”
  • 双指针算法专题(1)
  • 大模型入门3:理解LLAMA
  • Windows10 如何配置python IDE
  • 从小白到高手:Windows注册表基础运维全攻略
  • Linux软件包循环依赖解决 彻底删除i386架构 更新软件源
  • nginx_shell脚本扩展配置虚拟主机三种方式
  • 为什么np.arrange(0.97,3.0,0.01)最后一个值是3.0018,大于3