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

article/2025/10/23 6:34:29

简介

STM32 有两个看门狗,一个是独立看门狗(IWDG)另外一个是窗口看门狗(WWDG),独立看门狗号称宠物狗,窗口看门狗号称警犬。

独立看门狗用通俗一点的话来解释就是一个 12 位的递减计数器,当计数器的值从某个值一直减到 0 的时候,系统就会产生一个复位信号,即IWDG_RESET。如果在计数没减到 0 之前,刷新了计数器的值的话,那么就不会产生复位信号,这个动作就是我们经常说的喂狗。看门狗功能由 VDD 电压域供电,在停止模式和待机模式下仍能工作。
独立定时器比较简单就不讲了,直接递减触发复位。

窗口看门狗就是一个7位的递减计数器往下记,设定一个上窗口值,下窗口值固定,只能在上窗口和下窗口值之间进行复位,复位前可以触发一次紧急中断,可以做复位前觉得最重要的事件。在这里插入图片描述
在这里插入图片描述

分频

我的看门狗所在时钟是APB1的时钟主频是42M,数据手册上规定看门狗必须除于4096,你还可以通过CFR寄存器再进行一次分频(1,2,4,8)。CNT_CK=PCLK1/4096/(2^WDGTB)

窗口值

窗口值是由CFR寄存器决定的,下窗口值是固定的,寄存器的初始化值是0x7F,二进制为01111111,下窗口值为0x3F,所以上窗口值设定只能在0x3F到0X7F之间,即63到127之间。

超时计算

在这里插入图片描述

寄存器介绍

在这里插入图片描述
在这里插入图片描述

代码

中断优先级初始化

// WWDG 中断优先级初始化static void WWDG_NVIC_Config(void){NVIC_InitTypeDef NVIC_InitStructure; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); NVIC_InitStructure.NVIC_IRQChannel = WWDG_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);
}

WWDG配置函数

/* WWDG 配置函数* tr :递减计时器的值, 取值范围为:0x7f~0x40,超出范围会直接复位* wr :窗口值,取值范围为:0x7f~0x40* prv:预分频器值,取值可以是*      @arg WWDG_Prescaler_1: WWDG counter clock = (PCLK1(42MHz)/4096)/1  约10253Hz 97us*      @arg WWDG_Prescaler_2: WWDG counter clock = (PCLK1(42MHz)/4096)/2	 约5126Hz	195us*      @arg WWDG_Prescaler_4: WWDG counter clock = (PCLK1(42MHz)/4096)/4	 约2563Hz	390us*      @arg WWDG_Prescaler_8: WWDG counter clock = (PCLK1(42MHz)/4096)/8  约1281Hz	780us*      *			例:tr = 127(0x7f,tr的最大值)  wr = 80(0x50, 0x40为最小wr最小值)  prv =  WWDG_Prescaler_8*			~780 * (127-80) = 36.6ms < 刷新窗口 < ~780 * 64 = 49.9ms*			也就是说调用WWDG_Config进行这样的配置,若在之后的36.6ms前喂狗,系统会复位,在49.9ms后没有喂狗,系统也会复位。*			需要在刷新窗口的时间内喂狗,系统才不会复位。	*/
void WWDG_Config(uint8_t tr, uint8_t wr, uint32_t prv)
{// 开启 WWDG 时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE);// 设置递减计数器的值WWDG_SetCounter( tr );// 设置预分频器的值WWDG_SetPrescaler( prv );// 设置上窗口值WWDG_SetWindowValue( wr );// 设置计数器的值,使能 WWDGWWDG_Enable(WWDG_CNT);// 清除提前唤醒中断标志位WWDG_ClearFlag();// 配置 WWDG 中断优先级WWDG_NVIC_Config();// 开 WWDG 中断WWDG_EnableIT();
}

死前中断函数

// WWDG 中断复服务程序,如果发生了此中断,表示程序已经出现了故障,
// 这是一个死前中断。在此中断服务程序中应该干最重要的事,
// 比如保存重要的数据等,这个时间具体有多长,要
// 由 WDGTB 的值决定:
// WDGTB:0 113us
// WDGTB:1 227us
// WDGTB:2 455us
// WDGTB:3 910us
void WWDG_IRQHandler(void){// 清除中断标志位WWDG_ClearFlag();//LED2 亮,点亮 LED 只是示意性的操作,//真正使用的时候,这里应该是做最重要的事情LED2(ON);
}

喂狗函数

// 喂狗
void WWDG_Feed(void)
{// 喂狗,刷新递减计数器的值,设置成最大WDG_CNT=0X7FWWDG_SetCounter( wwdg_cnt );
}

main函数

int main(void)
{Debug_USART_Config();printf("\r\n这是一个看门狗例程\r\n");uint8_t wwdg_tr, wwdg_wr;/* LED 端口初始化 */LED_GPIO_Config();// BLUE 蓝色灯亮LED3(ON);Delay(0XFFFFFF);	// WWDG配置/* WWDG 配置函数* tr :递减计时器的值, 取值范围为:0x7f~0x40,超出范围会直接复位* wr :窗口值,取值范围为:0x7f~0x40* prv:预分频器值,取值可以是*      @arg WWDG_Prescaler_1: WWDG counter clock = (PCLK1(42MHz)/4096)/1  约10253Hz 97us*      @arg WWDG_Prescaler_2: WWDG counter clock = (PCLK1(42MHz)/4096)/2	 约5126Hz	195us*      @arg WWDG_Prescaler_4: WWDG counter clock = (PCLK1(42MHz)/4096)/4	 约2563Hz	390us*      @arg WWDG_Prescaler_8: WWDG counter clock = (PCLK1(42MHz)/4096)/8  约1281Hz	780us*      *			例:tr = 127(0x7f,tr的最大值)  wr = 80(0x50, 0x40为最小wr最小值)  prv =  WWDG_Prescaler_8*			~780 * (127-80) = 36.6ms < 刷新窗口 < ~780 * 64 = 49.9ms*			也就是说调用WWDG_Config进行这样的配置,若在之后的36.6ms前喂狗,系统会复位,在49.9ms后没有喂狗,系统也会复位。*			需要在刷新窗口的时间内喂狗,系统才不会复位。	
*/	// 初始化WWDG:配置计数器初始值,配置上窗口值,启动WWDG,使能提前唤醒中断WWDG_Config(127,80,WWDG_Prescaler_8);	// 窗口值我们在初始化的时候设置成0X5F,这个值不会改变wwdg_wr = WWDG->CFR & 0X7F;while(1){	// BLUE 蓝色灯LED3(OFF);//-----------------------------------------------------// 这部分应该写需要被WWDG监控的程序,这段程序运行的时间// 决定了窗口值应该设置成多大。//-----------------------------------------------------// 计时器值,初始化成最大0X7F,当开启WWDG时候,这个值会不断减小// 当计数器的值大于窗口值时喂狗的话,会复位,当计数器减少到0X40// 还没有喂狗的话就非常非常危险了,计数器再减一次到了0X3F时就复位// 所以要当计数器的值在窗口值和0X40之间的时候喂狗,其中0X40是固定的。wwdg_tr = WWDG->CR & 0X7F;if( wwdg_tr < wwdg_wr ){// 喂狗,重新设置计数器的值为最大0X7FWWDG_Feed();}}
}

http://chatgpt.dhexx.cn/article/1JMH10IJ.shtml

相关文章

STM32看门狗简述

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

STM32看门狗作用

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

STM32看门狗详解

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

STM32看门狗

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

【STM32】看门狗模块

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

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

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

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库)

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

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

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

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

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

STM32—窗口看门狗(WWDG)

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

初学STM32之看门狗

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

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

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

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

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

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

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

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

一 谢菲尔德遗传算法工具箱的主要函数如下表所示&#xff1a; 二 函数介绍—创建种群 1. crtbase 1.1 功能 创建一个所有染色体中最基本的染色体**对应的向量*语法&#xff1a; 1.2 语法 BaseVec crtbase&#xff08;Lind&#xff0c;Base&#xff09; 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遗传算法工具箱使用

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

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

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

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

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