STM32看门狗(IWDG)工作原理详解与配置指南

发布者:chunli最新更新时间:2025-09-29 来源: cnblogs关键字:STM32  看门狗  IWDG 手机看文章 扫描二维码
随时随地手机看文章

一、看门狗外设的原理与应用

  • 背景说明

  • 随着单片机的发展,单片机在家用电器、工业自动化、生产过程控制、智能仪器仪表等领域的应用越来越广泛。然而处于同一电力系统中的各种电气设备通过电或磁的联系彼此紧密相连,相互影响,由于运行方式的改变、故障、开关操作等引起的电磁振荡会波及很多电气设备。这对我们单片机系统的可靠性与安全性构成了极大的威胁。单片机测控系统必须长期稳定、可靠运行,否则将导致控制误差加大,严重时会使系统失灵,甚至造成巨大损失。因此单片机的抗干扰能力已经成为不容忽视的问题。

  • 基本概念

  • 由于单片机在运行的过程经常会受到外部电磁场的干扰,就可能会出现程序“跑飞”,比如出现数据的缺失、导致寄存器中的数据发生变化、程序指针PC指向非法地址……..,为了提高程序的可靠性,就提供了看门狗外设,在程序出现由软件或者硬件导致的未知问题,利用看门狗外设对芯片进行复位,相当于重新运行程序。

    看门狗(WatchDog Timer),本质上就是一个定时器电路,一般有一个输入和一个输出,输出端连接到到MCU的RST引脚,当MCU正常工作的时候,每隔一段时间输出一个信号到看门狗的输入端,如果超过规定的时间不喂狗(一般在程序跑飞时),看门狗就会给出一个复位信号到MCU,使MCU复位。

  • 实现原理

  • 使用看门狗的目的:为了提供程序的可靠性,防止由软件或者硬件造成的问题的出现。如果想要了解看门狗的资源和特点,可以参考STM32F4中文参考手册。

  • 分类说明

  • STM32F4系列的芯片提供的两个看门狗,一个叫做独立看门狗,一个叫做窗口看门狗。两个看门狗的使用流程差不多,但是相比于独立看门狗,窗口看门狗的限制更严格。

    1. 窗口看门狗

    1. 独立看门狗

  • 内部结构

  • 程序设计




  • 思考:如果出现芯片复位的情况,如何判断是用户手动完成复位还是由IWDG看门狗复位??


  • 喂狗技巧


  • 一种方案是在代码段进行穿插喂狗,操作起来比较麻烦,另一种方案是在定时器中断中完成喂狗操作,但是注意中断请求可能出现嵌套,所以喂狗操作的定时器的中断的抢占优先级应该是在程序中所有中断里面是最高。

    为了提高程序的可靠性,应该定义一个标志位,应该结合该标志位来判断程序的运行状态。

    练习:根据看门狗的原理,实现掌握MCU中的窗口看门狗的使用流程,另外,要求在自己的程序中实现看门狗的监测,并对PS2模块、光敏、温湿度进行测试,然后把之前学习的外设的程序进行封装,封装为xxx.c和xxx.h。


关键字:STM32  看门狗  IWDG 引用地址:STM32看门狗(IWDG)工作原理详解与配置指南

上一篇:单片机音乐播放器实现指南:源码详解与完整实现
下一篇:[STM32]USART与串口通信进阶教程(第二部分)

推荐阅读最新更新时间:2026-03-25 12:20

STM32学习笔记之独立看门狗(IWDG)的使用
对STM32任何模块使用前都要对其初始化、首先就是初始化外设时钟,可以简单看系统时钟章节关于外设时钟,看数据手册如下: 看门狗由独立内部40M时钟驱动,所以不需要我们在初始化时钟配置寄存器。 读数据手册可以得知看门狗模块使用的系统LSI时钟,初始化配置之前要设置预分配寄存器IWDG_PR,以及设置IWDG_RLR两个寄存器的值,由于寄存器有写保护,根据数据手册可知: 所以在设置之前寄存器之前必须先对IWDG_KR(键寄存器)再写入0x5555,修改寄存器的值 。接下来看预分频寄存器 : 预分因子主要和看门狗的超时时间有关 看手册可知:
[单片机]
<font color='red'>STM32</font>学习笔记之独立<font color='red'>看门狗</font>(<font color='red'>IWDG</font>)的使用
STM32F103标准库开发:独立看门狗(IWDG)实验
一、独立看门狗(IWDG)基本知识 1. IWDG简介 独立看门狗是由专门的低速总线进行驱动,即LSI总线(时钟频率40KHz),它可以在主时钟故障的情况下仍然可以工作。 独立看门狗适合应用于需要看门狗作为一个在主程序之外 能够完全独立工作,并且对时间精度要求低的场合。 2. IWDG功能描述 在键值寄存器(IWDG_KR)中写入0xCCCC,开始启用独立看门狗。此时计数器开始从其复位值0xFFF递减,当计数器值计数到尾值0x000时会产生一个复位信号(IWDG_RESET)。 无论何时,只要在键值寄存器IWDG_KR中写入0xAAAA(通常说的喂狗), 自动重装载寄存器IWDG_RLR中的值就会重新加载到计数器,从而避免产生
[单片机]
STM32F103标准库开发:独立<font color='red'>看门狗</font>(<font color='red'>IWDG</font>)实验
STM32F103RB 实作笔记(八)- IWDG 内部看门狗试验
IWDG特性说明 IWDG(Independent WatchDog,独立看门狗),从字面上看,好像是设置了一个安全系统,防止外来的干扰;从 STM32 操作说明上看,实际上是放了一条狗咬自己(Reset复位),不想被咬就要不断的**”喂狗“**,而且是放出来后就关不回去(启动看门狗工作,启动后就不能停)?!这个功能在不想让自己陷入打瞌睡、昏迷的条件下是很好用的。 其中,下命令是由 KR 负责;调整喂狗的时间是 PR (时长)和 RLR(计数) 组合; 这一段描述是 KR 用0xCCCC 打开 WDG 后,就要定时 用 0xAAAA ”喂狗“;要调整”喂狗的时间“就要由 KR=0x5555 打开后,调整 PR 和 RLR。从
[单片机]
STM32F103RB 实作笔记(八)- <font color='red'>IWDG</font> 内部<font color='red'>看门狗</font>试验
窗口看门狗WWDG实例解析&IWDG与WWDG的异同点
窗口看门狗WWDG IWDG与WWDG的异同点 WWDG的中断相较于IWDG的优势 当我们需要在程序跑飞时保存一些珍贵的数据,IWDG真的是无能为力,IWDG的功能就是“当检测到程序跑飞立刻复位单片机,就相当于危险发生时不管你什么重要的数据,保住单片机的命要紧”;与IWDG不同的WWDG是“当检测到程序跑飞时,我们不急着作复位的决定,我们先进入中断服务函数进行一些必要的操作,比如保存数据……等关键操作,然后在紧急复位抢救单片机的生命”。 IWDG与WWDG的检测时钟 IWDG用的是LSI内部低速时钟,LSI本身不是特别的精准而且LSI是外部时钟源,如果单片机的内部时钟源故障或因外部干扰发生紊乱,我们可以采用外部时钟源LSI
[单片机]
窗口<font color='red'>看门狗</font>WWDG实例解析&<font color='red'>IWDG</font>与WWDG的异同点
[HAL库学习之路]5.IWDG-独立看门狗
记录自己的STM32的HAL库的学习之路,不定期更新… 一、Pinout 二、Clock Configuration 三、Configuration 配置GPIO 配置IWDG 四、Generate Code 代码 主函数首先点亮两个LED 1S后熄灭,在主循环里检测按键输入进行喂狗,如果在4s内进行喂狗,则1个LED闪烁,否则程序复位。 int main(void) { /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MCU Configuration---------------------------------------
[单片机]
[HAL库学习之路]5.<font color='red'>IWDG</font>-独立<font color='red'>看门狗</font>
STM32F1小白系列之四、独立看门狗IWDG
一、看门狗原理 1、单片机中有一个【寄存器(计数器)】专门用来倒计数,这个计数器倒计数是独立于程序之外的,不受程序影响的。(程序是井,计数器是河,井水不犯河水,你跑你的程序,我记我的数,互不影响。) 2、但是: 这个【计数器】会有一个初值,这个值会逐次递减,终有一刻会自减到0,当计数自减到0的时候,【系统】就会强制重启,程序会从头开始运行。 而当计数器每次倒计数到0之前,如果往计数器里面重新写入一次数值,他就永远不会倒计数到0,这时候系统也就不会重启了。 3、所以: 程序员写程序的时候,如果开启了看门狗,会在程序中实现这样一个功能——专门设定固定的时间循环往复的往【计数器】中写入一个数值(喂狗)。 当程序正常
[单片机]
STM8L独立看门狗IWDG
简单扼要 void IWDG_Init(void)//初始化 { IWDG- KR = 0xcc;//启动IWDG IWDG- KR = 0x55;//解除PR及RLR的写保护 IWDG- RLR = 0xff;//看门狗计数器重载值 IWDG- PR = 0x06;//分频系数256 1724.63ms IWDG- KR = 0xaa;//刷新IDDG,避免产生看门狗复位,同时恢复PR及RLR的写保护 } void IWDG_Feed(void)//喂狗 { IWDG- KR = 0xaa; }
[单片机]
STM8关于IWDG看门狗和HSI高速时钟和复位的坑
前言:我的第一篇博客,快被逼疯了。用的STM8S003F3,耗时5天,问题已解决,结局很坑! 但因为这一个问题,我似乎将stm8的时钟,复位,看门狗,iar的使用几乎全吃透了。 忠告:不要随随便便相信百度里头随便找来的资料! 现象:主频只在16MHz时,程序频繁复位不可控,其他现象异常离奇不阐述了,防止伤脑。 正文:前因后果是这样的: 1,我配置了16M的主频 CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);//内部高速时钟,不分频 或者:CLK- CKDIVR = 0x00; //HSIDIV = 0 CPUDIV = 0 cpu时钟 = 16Mhz 发现它频繁
[单片机]
STM8关于<font color='red'>IWDG</font><font color='red'>看门狗</font>和HSI高速时钟和复位的坑
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved