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

article/2025/10/23 6:36:48

目录:

  • 1.独立看门狗介绍
    • 1.1.独立看门狗简介
    • 1.2.独立看门狗功能描述
    • 1.3.独立看门狗工作框图
  • 2.独立看门狗实验
    • 2.1.cubemx配置
    • 2.2.具体代码实现
  • 3.独立看门狗的相关寄存器
    • 3.1.键寄存器(IWDG_KR)
    • 3.2.预分频寄存器
    • 3.3.重装载寄存器(IWDG_RLR)
    • 3.4.状态寄存器(IWDG_SR)
  • 4.窗口看门狗介绍
    • 4.1.窗口看门狗简介
    • 4.2.窗口看门狗的结构框图
    • 4.3.计数器和窗口值的设置
  • 5.窗口看门狗实验
    • 5.1.cubemx配置
    • 5.2.具体代码实现
  • 6.窗口看门狗的相关寄存器
    • 6.1.控制寄存器(WWDG_CR)
    • 6.2.配置寄存器(WWDG_CFR)
    • 6.3.状态寄存器(WWDG_SR)

1.独立看门狗介绍

1.1.独立看门狗简介

看门狗定时器(WDT,Watch Dog Timer)是单片机的组成部分,它实际上是一个计数器,一般给看门狗一个数值,程序开始运行后看门狗开始倒计时。如果程序运行正常,过一段时间CPU应发出指令让看门狗复位,重新开始计数,也就是所谓的“喂狗”。如果看门狗减到0就认为程序没有正常工作,强制整个系统复位。独立看门狗由专用低速时钟(LSI)驱动,计时主时钟发生故障它也仍然有效。

看门狗主要是用于在发生系统软件故障时,将系统复位。也可以用于将系统从休眠或空闲模式唤醒。IWDG主要应用于那些需要看门狗作为一个在主程序之外,能够完全独立工作,并且对时间精度要求较低的场合。

1.2.独立看门狗功能描述

独立看门狗是自由运行的递减计数器,时钟由独立的RC振荡器提供(可在停止和待机模式下工作),看门狗被激活后,在计数器计数到0x000时产生复位。

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

1.3.独立看门狗工作框图

在这里插入图片描述
看门狗处于VDD供电区,即在停机和待机模式时仍然能正常工作。
我们可以看到,这个独立看门狗的工作框图和定时器的工作框图其实差不多,都是由预分频器、状态寄存器、重装载寄存器等组成,其工作原理和定时器的工作原理也是差不多的,都是通过时钟输入LSI(具体时钟频率要去看原理图上的晶振的数值),通过分频器,分频出供独立看门狗使用的时钟频率,然后时钟开始计数递减,当递减到0的时候会发生复位;如果在递减到0之前给看门狗一个更新值,那么看门狗就会将重装载寄存器中的数值加载到计数器中重新开始计数,这样就不会复位。

2.独立看门狗实验

实验目的:在上电以后,PA2口的LED灯会亮一下,然后就会进入while循环,在while循环中,需要不断按下PB6处的按键喂狗,如果不喂狗,则会使程序复位,PA2口的LED灯会重新复位。

2.1.cubemx配置

在这里插入图片描述

2.2.具体代码实现

在这里插入图片描述
这个是IWDG的初始化代码,我们追进去看下。
在这里插入图片描述
接着往下追这个START函数

在这里插入图片描述
接着追这个键值
在这里插入图片描述
可以看到键值为0xCCC,这说明在初始化的时候,就已经开启了看门狗了,所以我们只需要写主函数的内容来实现我们的实验目的就可以了。具体代码如下:
在这里插入图片描述
这样就可以实现独立看门狗实验了,我们必须每次都按下PB6的按键进行喂狗操作,否则按照我们的设定,大概每过3000ms,程序就会被独立看门狗强制复位。

3.独立看门狗的相关寄存器

独立看门狗的寄存器包括以下几个:

  • 键寄存器(IWDG_KR)
  • 预分频寄存器(IWDG_PR)
  • 重装载寄存器(IWDG_RLR)
  • 状态寄存器(IWDG_SR)

3.1.键寄存器(IWDG_KR)

在这里插入图片描述
这个键寄存器就是通过对这个寄存器写入关键字来控制看门狗的功能的。

  • 当写入0XCCCC就启动看门狗的工作;
  • 当写入0X5555时表示允许访问IWDG_PR和IWDG_RLR寄存器,只有允许访问这两个地址以后,才能改变独立看门狗的预分频值和重装载值;
  • 当写入0XAAAA的时候,独立看门狗进行更新,防止产生复位。

因此独立看门狗只有低16位是有效的,高16位保留。

3.2.预分频寄存器

在这里插入图片描述
预分频器低3位有效,用于配置预分频因子,通过配置预分频因子,可以将LSI的时钟进行分频,然后给IWDG时钟脉冲,具体配置如上图所示。
在这里插入图片描述
上面这个图就是设置不同的PR位产生的不同的分频后最长计时时间和最短计时时间。
但是注意,我们在前面系统时钟中介绍过,因为LSI是用RC振荡器来产生时钟脉冲的,但是RC振荡器并不稳定,极其容易受到温度和其他因素的影响,因此,我们需要考虑LSI的波动因素,一般如果LSI是32.768KHZ的话,我们就需要考虑其波动范围在15~47KHZ的范围。

3.3.重装载寄存器(IWDG_RLR)

在这里插入图片描述

重装载寄存器是用来存放重装载值的。

  • 当IWDG的值减到0以后,系统复位,IWDG的重装载寄存器的值就会加载到递减计数器中进行重新计数。
  • 当IWDG及时“喂狗”,以后,IWDG的重装载寄存器的值也会加载到递减计数器中,使IWDG重新计数。

3.4.状态寄存器(IWDG_SR)

在这里插入图片描述
状态寄存器的相关用法在上图中的注中已经表名,这里就不再赘述了。

4.窗口看门狗介绍

4.1.窗口看门狗简介

窗口看门狗(WWDG)通常被用来监测由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障。除非递减计数器的值在 T6 位(WWDG->CR 的第六位)变成 0 前被刷新,看门狗电路在达到预置的时间周期时,会产生一个 MCU 复位。在递减计数器达到窗口配置寄存器(WWDG->CFR)数值之前,如果 7 位的递减计数器数值(在控制寄存器中)被刷新, 那么也将产生一个 MCU 复位。
在这里插入图片描述
上面的一段文字说的比较抽象,我们需要结合上图来看,WWDG中有两个寄存器,一个是WWDG_CR寄存器和WWDG_CFR寄存器。
WWDG也会像IWDG一样进行递减计数,但是由于WWDG只有7位可以用于计数,那么也就是只能从0X7F来进行递减,如果CR寄存器的T6位减到0,也就是当计数器减到0X40之后的0X3F,那么WWDG就会使系统复位。
并且,WWDG的CFR位也会进行设置数值,这个设置的数值就是上窗口,如果在上窗口之前进行了喂狗操作,那么系统也会产生复位的操作,这就形成了一个所谓的窗口,这也就是窗口看门狗的由来。
在这里插入图片描述
所以我们必须在设置的上窗口值之后和0X3F之前进行喂狗,这样才不会产生复位。

4.2.窗口看门狗的结构框图

在这里插入图片描述
由于WWDG是挂载到PCLK1总线上的,PCLK1总线最大的时钟频率是36MHZ,我们一般配置也是配置为36MHZ。
独立看门狗从PCLK1进行时钟输入,然后经过看门狗预分频器进行分频,然后提供给递减计数器CNT时钟脉冲来产生递减计数,然后通过检测CR寄存器的T6位有无变为0来检测是否需要进行复位的操作;并且如果在上窗口值之前进行了喂狗操作,那么系统也会进行复位的操作。

4.3.计数器和窗口值的设置

  • 当递减计数器递减到0x40的时候,还不会马上产生复位,如果使能了提前唤醒中断,CFR位9EWI置1,则产生提前唤醒中断。
  • 所以在提前唤醒中断的处理程序中我们需要做最重要的工作,比如保存重要数据或者进行报警等操作,因此这个中断也被称为死前中断。
  • 下窗口的值是固定的0x40,上窗口的值可以改变,具体由配置寄存器CFR的位6:0设置,其值必须大于0x40,如果小于或者等于0x40就失去了窗口的价值,也不能大于计数器的值,所以必须小于0x7F。

5.窗口看门狗实验

实验要求:开启stm32的窗口看门狗,并使能唤醒中断。主程序正常运行时喂狗,按键按下后进入中断,用while循环模拟系统故障死机,此时将触发唤醒中断并产生复位,用LED灯显示唤醒中断的触发。

5.1.cubemx配置

在这里插入图片描述
在这里插入图片描述
其他设置和以前一样。

5.2.具体代码实现

在这里插入图片描述
上面的是main.c函数汇总

然后我们要来实现唤醒中断和外部中断函数
其中唤醒中断我们放在了wwdg.c的文件中,外部中断我们放在了main.c的文件中。
唤醒中断我们还是需要在stm32f10x_it.c中去找,然后按照原来的方法找到wwdg的回调函数,然后我们需要重写回调函数。
下面是唤醒中断的具体代码:
在这里插入图片描述
然后我们来实现外部中断:
在这里插入图片描述

6.窗口看门狗的相关寄存器

窗口看门狗的寄存器包括以下的寄存器:

  • 控制寄存器(WWDG_CR)
  • 配置寄存器(WWDG_CFR)
  • 状态寄存器(WWDG_SR)

6.1.控制寄存器(WWDG_CR)

在这里插入图片描述
控制寄存器,顾名思义是用来控制WWDG的,其中低7位是用来存放WWDG计数器中的计数值的,当CR中的T6位的值变为0的时候,那么系统就会复位。第7位的值是用来使能看门狗的。

6.2.配置寄存器(WWDG_CFR)

在这里插入图片描述
配置寄存器的低7位是用来存放上窗口值的;第7、8位是用来配置预分频器的值的,第9位是用来配置唤醒中断使能的。

6.3.状态寄存器(WWDG_SR)

在这里插入图片描述
状态寄存器是用来进行标志提前唤醒中断的,只有一个位,了解即可,我们平常也用不到。

这篇文章就主要介绍了stm32中看门狗的相关知识,希望各位大佬多多批评指正!!!


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

相关文章

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.什么是看门狗 单片机在工作中常常会受到来自外界电磁场的干扰,造成程序跑飞,而陷入死循环,程序的正常运行被打断,使得系统无法正常工作,造成整个系统陷入停滞状态。所以为了对单…

matlab 工具箱 GATBX 的安装,安装Sheffield Matlab遗传算法工具箱的建议

在通常的遗传算法学习中,可以直接对目标函数进行编写,但是当我们需要使用simulink进行仿真优化需要用到遗传算法时,我这里有两种建议:①在模型中添加sfunction然后使用自己喜欢的语言进行编写;②使用Matlab遗传算法工具…

MATLAB遗传算法工具箱的函数及实例

遗传算法(GA)是一种进化算法,是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。 遗传算法把问题参数编码为染色体,利用层层迭代的方式进行选择、…

基于Matlab遗传算法工具箱解决物流中心选址

目录 1.问题 2.建模 3.Matlab编程、求解 1.问题 物流配送中6个客户的位置坐标和配数数量如表1所示,如何设置物流配数中心使得配送量最小。 2.建模 3.Matlab编程、求解 编写目标函数min 遗传算法只能求最小值 function y fun(x)site[52 42 93 62 90 70;…

谢菲尔德遗传算法工具箱函数简介

一 谢菲尔德遗传算法工具箱的主要函数如下表所示: 二 函数介绍—创建种群 1. crtbase 1.1 功能 创建一个所有染色体中最基本的染色体**对应的向量*语法: 1.2 语法 BaseVec crtbase(Lind,Base) 1.3 输入参数 1 L…

matlab遗传工具箱ga,用遗传算法工具箱(GA)识别Bouc-Wen模型微分方程参数

本帖最后由 hgrhgr520 于 2016-3-20 14:30 编辑 Bouc-Wen模型因数字处理方便简单而得到较为广泛的应用,力可以表示为: QQ截图20160320125352.jpg (3.2 KB, 下载次数: 21) 2016-3-20 12:49 上传 利用遗传算法工具箱(GA)对Bouc-Wen模型进行参数识别。 实验数据来源于对磁流变阻…

MATLAB机器学习系列-10:遗传算法原理及其matlab遗传算法工具箱使用

遗传算法原理 基本思想 遗传算法(Genetic Algorithm,GA)是一种进化算法,其基本原理是仿效生物界中的“物竞天择、适者生存”的演化法则,它最初由美国Michigan大学的J. Holland教授于1967年提出。遗传算法是从代表问题…

2021-04-26 Matlab遗传算法工具箱的使用及实例(线性规划)

Matlab遗传算法工具箱的使用及实例(线性规划) 引言 在使用遗传算法(Genetic Algorithm,GA)之前,你得了解遗传算法是干什么的。遗传算法一般用于求解优化问题。遗传算法最早是由美国的 John holland于20世纪70年代提出,该算法是根…

遗传算法工具箱_含约束条件的遗传算法在连续催化重整优化操作中的应用

遗传算法(Genetic a lgo rithm s, GA ) 是由Hol-land 教授及其学生首先提出的一种仿照生物学中进化论思想而衍生出的优化算法。遗传算法应用于优化问题的求解, 是一个启发式随机搜索的过程, 与传统的优化搜索算法相比具有可以克服局部最优解的陷阱, 搜索得到全局最优解等特点, …

北卡罗来纳大学遗传算法工具箱

目录 北卡罗来纳大学遗传算法工具箱 gaot 重要函数如下 1.initializega函数介绍 2.ga函数介绍 3.initializega求解一元函数 注:本文的代码可用于matlab 2012a版本 北卡罗来纳大学遗传算法工具箱 gaot 重要函数如下 optimtool(matlab内部封装函数&a…

Matlab遗传算法工具箱求函数最小值

题目 先上代码 %%%%%%%%%%%%%%% %% test.m %% %% Feng1909 %% %%%%%%%%%%%%%%% function result test(a)is_max 0;x a(1);y a(2);PI 3.141592653;if is_max 0result -(sin(3*PI*x)*cos(4*PI*y)cos(5*PI*x*sin(2*PI*y)))*(1);endif is_max 1result (sin(3*PI*x)*c…

简单使用MATLAB自带的遗传算法工具箱

一、使用单变量进行参数寻优 如s = -2x ,当x在[0,1]范围内,取多少时s为最小值? 使用步骤如下: 1、建立一个function函数,命名为fu.m 2、在MATLAB命令窗口输入optimtool,接下来进行选择,选择完后,点击start。 x = 1时,s取-2(最小值) 寻优曲线图如下: 二、使用双变…

谢菲尔德遗传算法工具箱

谢菲尔德遗传算法工具箱的使用 安装工具箱下载工具箱添加路径标题 遗传算法函数ranking()函数select()函数bs2rv()函数小结 安装工具箱 谢菲尔德遗传算法工具箱作为matlab的一个函数库,可以简单实现遗传算法。我一开始学习了粒子群优化算法和鲸鱼优化算法等群智能优…

Matlab遗传算法工具箱的使用

Matlab遗传算法工具箱的使用 遗传算法(Genetic Algorithm,GA)是J.Holland教授1975年在其专著中首次发表,又经Goldberg、DeJong等研究总结形成的一种模拟进化算法,其基于生物进化和物种选择理论模拟自然界基因进化的过程…

Matlab遗传算法工具箱及应用

目录 第一章:遗传算法概述 1.1遗传算法概念; 1.2遗传算法与爬山法的比较; 1.3遗传算法的基本原理与方法; 第二章:遗传算法应用举例 2.1简单一元函数优化实例; 参考资料:Matlab遗传算法工…

谢菲尔德大学的MATLAB遗传算法工具箱(附代码文件)

从今天起我想记录下我的学习历程,将成果总结起来,方便日后复习 关于MATLAB遗传算法的工具箱文件放在文章末尾需要的自取 首先,我先来简单说明下如何将工具箱添加到matlab中去 将工具箱文件夹复制到本地计算机中的工具箱目录下,路…

MATLAB自带的遗传算法工具箱(GADS)

目前,遗传算法工具箱主要有三个: 英国谢菲尔德大学的遗传算法工具箱美国北卡罗来纳州立大学的遗传算法最优化工具箱MATLAB自带的遗传算法与直接搜索工具箱(GADS) GADS介绍 本文介绍的是MATLAB自带的遗传算法与直接搜索工具箱&a…