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

相关推荐
hollq1 小时前
STM32F103RCT6+STM32CubeMX+keil5(MDK-ARM)+Flymcu实现串口重定向
arm开发·stm32·嵌入式硬件
小鱼儿电子2 小时前
17-基于STM32的宠物饲养系统设计与实现
stm32·嵌入式硬件·物联网·宠物·宠物饲养系统
小莞尔4 小时前
【51单片机】【protues仿真】基于51单片机四层电梯系统
单片机·嵌入式硬件
CFZPL4 小时前
使用江科大串口发送函数发送freertos的vTaskList出现跑飞
单片机
F133168929575 小时前
WD5030A,24V降5V,15A 大电流,应用于手机、平板、笔记本充电器
stm32·单片机·嵌入式硬件·51单片机·硬件工程·pcb工艺
易享电子6 小时前
基于单片机电器断路器保护器系统Proteus仿真(含全部资料)
单片机·嵌入式硬件·fpga开发·51单片机·proteus
爱倒腾的老唐8 小时前
01、如何学习单片机
单片机·嵌入式硬件·学习
点灯小铭8 小时前
基于单片机的夹具压力控制系统设计
单片机·嵌入式硬件·mongodb·毕业设计·课程设计
雾削木14 小时前
stm32解锁芯片
javascript·stm32·单片机·嵌入式硬件·gitee
热爱编程的小刘15 小时前
STM32学习路线开启篇:外部中断
stm32