关于我对stm32看门狗的一些理解(基于正点原子)

article/2025/10/23 6:43:49

咕咕咕之后想更会儿stm32哈哈哈,但是其实是之前自己写的笔记,想着以后就写在一起吧,我自己也更好去找到自己写的玩意~毕竟总所周知,博客都是写给自己的。
(虽然好像现在自己都看不懂了我的天哪)

一.什么是看门狗

在stm32中,我们会学到独立看门狗和窗口看门狗的实验。第一眼肯定是一脸懵逼啊,啥是看门狗啊?

看门狗在日常生活中,大概的印象就是,起到一个保证安全,防止外来人员搞事的作用。

stm32中的看门狗也起着差不多的意思:

看门狗就是起到一个监督单片机是否正在正常运行的作用。如果程序运行异常(跑飞),那么让系统复位,程序重新执行。

看一下百科解释:

在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统的陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的模块或者芯片,俗称“看门狗”(watchdog)

那么看门狗怎么去实现这些操作呢?再讨论这个之前,我们先来看看stm32中的看门狗有哪些?

1.两种看门狗

STM32F10xxx内置两个看门狗,提供了更高的安全性、时间的精确性和使用的灵活性。两个看门狗设备(独立看门狗和窗口看门狗)可用来检测和解决由软件错误引起的故障;当计数器达到给定的超时值时,触发一个中断(仅适用于窗口型看门狗)或产生系统复位。

独立看门狗(IWDG)

独立看门狗由专用的低速时钟(LSI)驱动,即使主时钟发生故障它也仍然有效。

IWDG最适合应用于那些需要看门狗作为一个在主程序之外,能够完全独立工作,并且对时间精度要求较低的场合。

窗口看门狗(WWDG)

窗口看门狗由从APB1时钟分频后得到的时钟驱动,通过可配置的时间窗口来检测应用程序非正常的过迟或过早的操作。

WWDG最适合那些要求看门狗在精确计时窗口起作用的应用程序。

但是单独看这个确实。。。有点迷,就有点印象哈。

但是大概应该也对看门狗有了一点概念,至少你知道了有两种看门狗。

那么我们现在详细来介绍一下独立看门狗(窗口看门狗留在下一个主题)

2.独立看门狗

之前看独立看门狗的介绍,我们知道他由一个专门的时钟驱动

这里给出更详细的介绍一下:

STM32 的独立看门狗由内部专门的 40Khz 低速时钟驱动,即使主时钟发生故障,它也仍然有效。这里需要注意独立看门狗的时钟是一个内部 RC 时钟,所以并不是准确的 40Khz,而是在 30~60Khz 之间的一个可变化的时钟,只是我们在估算的时候,以 40Khz 的频率来计算,看门狗对时间的要求不是很精确,所以,时钟有些偏差,都是可以接受的。

我们这里可以理解为:他在主程序之外工作,可以监视主程序是否正常运行。

ok,那么他是怎么工作的?

先简单一点:

独立看门狗可以先设置一个时间(比如1s),如果超过这个时间,那么就代表主程序出了异常,然后让系统复位,程序重新执行。–在这里这个时间的流逝我们理解成一个倒计时

但是很多时候主程序本身就是一个死循环–肯定运行不止1s啊

于是我们需要在主程序之中重置这个时间(倒计时重新开始),如果主程序出现了问题—那么倒计时无法重置,但是我们的看门狗任然在运行,最终超过时间,看门狗让系统复位,程序重新执行。

我觉得我大概是理解了。。。

那么怎么去开启看门狗,又怎么去重置时间呢?

身为单片机—那只能用相关的寄存器去操作了

二.独立看门狗相关寄存器

咱先不去分析单独的寄存器啊,先去直接上框图:

img

先总体把握一下:这里我觉得官方说的就很好:

在键寄存器(IWDG_KR)中写入0xCCCC,开始启用独立看门狗;此时计数器开始从其复位值0xFFF递减计数。当计数器计数到末尾0x000时,会产生一个复位信号(IWDG_RESET)。

无论何时,只要在键寄存器IWDG_KR中写入0xAAAA, IWDG_RLR中的值就会被重新加载到计数器,从而避免产生看门狗复位 。

其实这里也就是看门狗原理的实现,倒计时就是计数器计数到末尾的时间

并且应该注意一下的是–

IWDG_PR和IWDG_RLR寄 存 器 具 有 写 保 护 功 能 。

要 修 改 这 两 个 寄 存 器 的 值 , 必 须 先 向IWDG_KR寄存器中写入0x5555。

以不同的值写入这个寄存器将会打乱操作顺序,寄存器将重新被保护。

重装载操作(即写入0xAAAA)也会启动写保护功能。

那先看一下键寄存器:

1.键寄存器(IWDG_KR)

img

但是我们会发现键寄存器其实只是写这三个值–那怎么自己设置时间呢?

所以主要看另外两个寄存器了–IWDG_PRIWDG_RLR

2.设置倒计时的两个寄存器–**IWDG_PR,**IWDG_RLR

先看图吧

img

img

ok,重点都标出来了,但是好像看了跟没看一样

再结合一下公式:

*Tout=(4*2^prer)rlr / 40 ms

(其中prer是IWDG_PR寄存器2进制化为十进制的值,rlr就是IWDG_RLR中的值)

Tout就是看门狗每次的倒计时T

公式的推导参考:https://blog.csdn.net/qq_37957854/article/details/105644138

所以通过对两个寄存器写入,我们就可以设置倒计时了—不要忘了写入之前的操作

还有一个寄存器来着。。这个就看一下就行:

3.状态寄存器(IWDG_SR)

状态寄存器指示预分频值和递减计数器是否正在被更新。

img

疑问:这个寄存器需要我们自己操作吗?

三.看门狗相关库函数讲解

1.看门狗相关库函数

void IWDG_WriteAccessCmd(uint16_t IWDG_WriteAccess);//取消写保护:0x5555使能void IWDG_SetPrescaler(uint8_t IWDG_Prescaler);//设置预分频系数:写PRvoid IWDG_SetReload(uint16_t Reload);//设置重装载值:写RLRvoid IWDG_ReloadCounter(void);//喂狗:写0xAAAA到KRvoid IWDG_Enable(void);//使能看门狗:写0xCCCC到KRFlagStatus IWDG_GetFlagStatus(uint16_t IWDG_FLAG);//状态:重装载/预分频 更新

大概有些印象就行

几乎传入的参数也全都是具体的数值–分别就是设置那几个寄存器的值

我们现在直接看实验,首先是实验的目的:

2.实验目的

我们会在main.c函数中创建主程序:

开始实验后,先延迟一会,然后让一个LED亮起。

并在死循环中设置–如果按下按键,那么喂狗。

一般情况下应该就是直接喂狗,这里是为了检验看门狗,就显得很不符合常理

如果不按下按键,那么就不会喂狗,也就是说—程序会一直重启,LED呈现闪烁的效果

如果按时按下按键,程序开始喂狗,那么程序不会重启,LED灯常亮

3.开始写代码(源码分析)–运行看门狗步骤

ps:这里不分析在哪个文件,直接分析函数和代码

首先还是得

启动看门狗(初始化)

void IWDG_Init(u8 prer,u16 rlr) 
{	IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);  //使能对寄存器IWDG_PR和IWDG_RLR的写操作IWDG_SetPrescaler(prer);  //设置IWDG预分频值:设置IWDG预分频值为64IWDG_SetReload(rlr);  //设置IWDG重装载值IWDG_ReloadCounter();  //按照IWDG重装载寄存器的值重装载IWDG计数器IWDG_Enable();  //使能IWDG
}

首先就是这个init函数的两个参数,表明自己没有设置rlr和prer,

要我们在初始化的时候自己设置**(自己设置倒计时)**

主体上:

    • 先解除对两个寄存器的写操作,
    • 然后再分别设置寄存器,
    • 并重新加载一遍两个寄存器—这里的代码是 *IWDG_ReloadCounter();* (这里可以留意一下吧)
    • 最后让看门狗开始执行。

然后

在main函数里面

 int main(void){	delay_init();	    	 //延时函数初始化	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2 uart_init(9600);	 //串口初始化为9600LED_Init();		  	 //初始化与LED连接的硬件接口 KEY_Init();          //按键初始化	 delay_ms(300);   	 //让人看得到灭IWDG_Init(4,625);    //与分频数为64,重载值为625,溢出时间为1s	   LED0=0;				 //点亮LED0while(1){if(KEY_Scan(0)==WKUP_PRES)IWDG_ReloadCounter();	//如果WK_UP按下,则喂狗delay_ms(10);};
}

就两个操作和看门狗有关

第10行,引用初始化函数 并引入两个需要的数值— 套公式(寄存器的文章里面)

第14行 喂狗


http://chatgpt.dhexx.cn/article/nx2PxChh.shtml

相关文章

stm32看门狗的定义与分类

stm32看门狗 一、定义 由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统的陷入停滞状态,发生不可预料…

STM32看门狗超时时间计算

独立看门狗 公式 超时时间的公式为 :超时时间 :IWDG_PR寄存器中位2:0的十进制值 :重装载寄存器IWDG_RLR所对应的重装载数值 公式解读 首先,我们要明白: 独立看门狗内部是一个递减计数器。如果寄存器中的装载数值…

5.stm32看门狗

1. STM32-独立看门狗IWDG剖析 2. STM32-独立看门狗实例讲解 3. STM32-窗口看门狗WWDG剖析 4. STM32-窗口看门狗实例讲解 一.基础原理 1. 简单理解: 使用LSI(外部低速时钟),计数,及时喂狗不会复位(看门狗没有减到0喂狗,就认为程序正常工作),不及时喂狗就会导致复位. 2. 看…

STM32——看门狗

一、简介 STM32F10xxx内置两个看门狗,提供了更高的安全性、时间的精确性和使用的灵活性。两个看门狗设备(独立看门狗和窗口看门狗)可用来检测和解决由软件错误引起的故障;当计数器达到给 定的超时值时,触发一个中断(仅适用于窗口型看门狗)或产…

单片机STM32看门狗详解(嵌入式学习)

单片机STM32看门狗 什么是看门狗为什么需要看门狗?STM32CubeMX配置和应用示例独立看门狗(IWDG)窗口看门狗(WWDG) 注意事项 什么是看门狗 单片机STM32的看门狗(Watchdog)是一种硬件定时器&#…

STM32配置看门狗

一、看门狗时间计算公式 时间计算(大概):Tout((4*2^prer)*rlr)/40 (ms). prer:分频数:0~7 rlr:重装载寄存器值 举例(4 * 2^4 * 625) /401000ms1s 二、如何实际使用? 放狗和喂狗总是一起使用的,程序在溢出时间内喂狗才算合理 在…

stm32看门狗定时器记录

文章目录 1、看门狗介绍2、独立看门狗3、窗口看门狗 1、看门狗介绍 STM32 有两个看门狗,一个是独立看门狗另外一个是窗口看门狗。 独立看门狗简单来说就是一个 12 位的递减计数器,当计数器的值从某个值一直减到 0 的时候,系统就会产生一个复位…

STM32看门狗(独立看门狗与窗口看门狗)

简介 STM32 有两个看门狗,一个是独立看门狗(IWDG)另外一个是窗口看门狗(WWDG),独立看门狗号称宠物狗,窗口看门狗号称警犬。 独立看门狗用通俗一点的话来解释就是一个 12 位的递减计数器&#…

STM32看门狗简述

概述 看门狗一般分为硬件看门狗和软件看门狗,主要用来解决程序CPU异常,程序跑飞挂死等问题,提高系统的可靠性。 硬件看门狗是利用一个定时器电路,其定时输出连接到电路的复位端,程序在一定时间范围内对定时器清零(俗…

STM32看门狗作用

STM32F103 独立看门狗 学习笔记 引言 STM32是一系列基于ARM Cortex-M处理器的微控制器。看门狗(Watchdog)是STM32的一个重要功能模块,它能够帮助程序员实现系统的可靠性和稳定性。 看门狗的作用 在嵌入式系统中,软件有时会因为…

STM32看门狗详解

看门狗的作用:防止单片机因未知原因死机或比我们预期的时间过长长时间不能响应,如果出现这种问题,看门狗就会把单片机复位 独立看门狗(IWDG): 时钟来源:内部低速时钟(LSI&#xff0…

STM32看门狗

STM32处理器内置了2个看门狗: 独立看门狗 IWDG (Independent Watchdog) 窗口看门狗 WWDG (Window Watchdog) 独立看门狗由LSI低速时钟提供 40kHz ,主时钟出故障也不影响,常用IWDG复位电路。 窗口看门狗由APB1分频后提供,主时…

【STM32】看门狗模块

🐱作者:一只大喵咪1201 🐱专栏:《STM32学习》 🔥格言:你只管努力,剩下的交给时间! 📃看门狗概述 什么是看门狗: 在由单片机构成的微型计算机系统中&#x…

【STM32】stm32独立看门狗(IWDG)

stm32独立看门狗(IWDG) 0x01 IWDG简介0x02 IWDG主要性能0x03 IWDG寄存器配置 0x01 IWDG简介 STM32F10xxx内置两个看门狗,(独立看门狗和窗口看门狗)可用来检测和解决由软件错误引起的故障;当计数器达到给定的超时值时,…

STM32 看门狗详解

目录 1、IWDG 1.1 独立看门狗简介 1.2 独立看门狗的特点 1.3 独立看门狗功能描述 1.4 硬件看门狗 1.5 寄存器访问保护 1.6 调试模式 2、WWDG 2.1 简介 2.2 窗口看门狗主要特点 2.3 窗口看门狗功能说明 2.4 如何设置看门狗超时 2.5 调试模式 3、区别 1、IWDG 1.1…

手把手教你开发stm32——看门狗(基于hal库)

目录: 1.独立看门狗介绍1.1.独立看门狗简介1.2.独立看门狗功能描述1.3.独立看门狗工作框图 2.独立看门狗实验2.1.cubemx配置2.2.具体代码实现 3.独立看门狗的相关寄存器3.1.键寄存器(IWDG_KR)3.2.预分频寄存器3.3.重装载寄存器(IW…

STM32—看门狗详解入门(独立看门狗、窗口看门狗)

目录 一、什么是看门狗? 二、独立看门狗IWDG 1.特点、本质及原理 2.配置 3.main.c代码 三、窗口看门狗WWDG 1.特点、本质及原理 2.配置 3.main.c代码 四、独立看门狗与窗口看门狗的比较 一、什么是看门狗? 看门狗主要是用来监测单片机运行状态…

STM32(七)------- 独立看门狗(IWDG)

独立看门狗 介绍STM32独立看门狗简介原理功能描述IWDG关键寄存器描述键寄存器(IWDG_KR)状态寄存器(IWDG_SR)预分频寄存器(IWDG_PR)重装载寄存器(IWDG_RLR)IWDG寄存器映像和复位值 使用启动 STM32 的独立看门狗应用设计功能设计程序设计 后续 介绍 STM32独立看门狗简介 STM32 …

STM32—窗口看门狗(WWDG)

STM32—窗口看门狗(WWDG) 窗口看门狗(WWDG) STM32—窗口看门狗(WWDG)窗口看门狗(WWDG)WWDG 简介WWDG 功能框图剖析窗口看门狗时钟计数器时钟计数器窗口值计算看门狗超时时间 怎么用 WWDG独立看门狗所用到的库函数窗口看门狗操作步…

初学STM32之看门狗

初学STM32之看门狗 一、看门狗概述 1.什么是看门狗 单片机在工作中常常会受到来自外界电磁场的干扰,造成程序跑飞,而陷入死循环,程序的正常运行被打断,使得系统无法正常工作,造成整个系统陷入停滞状态。所以为了对单…