【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博客

相关推荐
7yewh10 小时前
Linux驱动开发 IIC I2C驱动 编写APP访问EEPROM AT24C02
linux·arm开发·驱动开发·嵌入式硬件·嵌入式
上海易硅智能科技局有限公司11 小时前
AG32 MCU 的电机控制方案
单片机·嵌入式硬件
程序员JerrySUN11 小时前
Yocto 项目 - 共享状态缓存 (Shared State Cache) 机制
linux·嵌入式硬件·物联网·缓存·系统架构
嵌入式小强工作室13 小时前
stm32能跑人工智能么
人工智能·stm32·嵌入式硬件
MikelSun13 小时前
电压控制环与电流控制环
单片机·嵌入式硬件·物联网
陌夏微秋14 小时前
STM32单片机芯片与内部45 UART 不定长度接收 标志位结束 定时器超时 串口空闲中断
stm32·单片机·嵌入式硬件·信息与通信·智能硬件
挥剑决浮云 -15 小时前
STM32学习之 按键/光敏电阻 控制 LED/蜂鸣器
c语言·经验分享·stm32·单片机·嵌入式硬件·学习
Whappy00116 小时前
第13部分 1.STM32之PWR电源控制-----4个实验
stm32·单片机·嵌入式硬件
冲,干,闯17 小时前
单片机里不想阻塞系统的延时
单片机·嵌入式硬件
小菜鸟学代码··17 小时前
STM32中断详解
stm32·单片机·嵌入式硬件