STM32 - DOG看门狗笔记

WDG(Watchdog)看门狗

作用:

看门狗可以监控程序的运行状态,当程序因为设计漏洞、硬件故障、电磁干扰等原因,出现卡死或跑飞现象时,看门狗能及时复位程序,避免程序陷入长时间的罢工状态,保证系统的可靠性和安全性。

看门狗本质上是一个定时器,当指定时间范围内,程序没有执行喂狗(重置计数器)操作时,看门狗硬件电路就自动产生复位信号。

STM32内置两个看门狗

  • 独立看门狗(IWDG):独立工作,对时间精度要求较低
  • 窗口看门狗(WWDG):要求看门狗在精确计时窗口起作用

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

独立看门狗(IWDG)

主要性能

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

功能框图

看门狗功能处于VDD供电区,即在停机和待机模式时仍能正常工作。

键寄存器
  1. 键寄存器本质上是控制寄存器,用于控制硬件电路的工作
  2. 在可能存在干扰的情况下,一般通过在整个键寄存器写入特定值来代替控制寄存器写入一位的功能,以降低硬件电路受到干扰的概率

|--------------|-------------------------|
| 写入键寄存器的值 | 作用 |
| 0xCCCC | 启用独立看门狗 |
| 0xAAAA | IWDG_RLR中的值重新加载到计数器(喂狗) |
| 0x5555 | 解除IWDG_PR和IWDG_RLR的写保护 |
| 0x5555之外的其他值 | 启用IWDG_PR和IWDG_RLR的写保护 |

超时时间

  • 超时时间:TIWDG = TLSI × PR预分频系数 × ( RL + 1)
  • 其中:TLSI = 1 / FLSI
  • TIWDG =1/ 40 *1000 × PR预分频系数 × ( RL + 1) ----RL =(11位,最大4095)

初始化代码

cpp 复制代码
/*IWDG初始化*/
	IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);	//独立看门狗写使能
	IWDG_SetPrescaler(IWDG_Prescaler_16);			//设置预分频为16
	IWDG_SetReload(2499);				//设置重装值为2499,独立看门狗的超时时间为1000ms
	IWDG_ReloadCounter();							//重装计数器,喂狗
	IWDG_Enable();									//独立看门狗使能

窗口看门狗(WWDG)

窗口看门狗通常被用来监测,由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运
行序列而产生的软件故障。

主要特性

  • 递减计数器T6:0的值小于 0x40 时,WWDG产生复位
  • 递减计数器T6:0在窗口W6:0外被重新装载时,WWDG产生复位
  • 递减计数器T6:0等于0x40时可以产生早期唤醒中断(EWI),用于重装载计数器以避免WWDG复位
  • 定期写入WWDG_CR寄存器(喂狗)以避免WWDG复位

框图

如果看门狗被启动 (WWDG_CR 寄存器中的 WDGA 位被置 '1') , 并且当 7 位 (T6:0) 递减计数器从0x40翻转到 0x3F(T6 位清零 ) 时,则产生一个复位。如果软件在计数器值大于窗口寄存器中的数
值时重新装载计数器,将产生一个复位。
应用程序在正常运行过程中必须定期地写入 WWDG_CR 寄存器以防止 MCU 发生复位。只有当计数器值小于窗口寄存器的值时,才能进行写操作。

超时时间

  • 超时时间: TWWDG = TPCLK1 × 4096 × WDGTB预分频系数 × ( T5:0 + 1 )
  • 窗口时间: TWIN = TPCLK1 × 4096 × WDGTB预分频系数 × ( T5:0 - W5:0 )

其中:TPCLK1 = 1 / FPCLK1

初始化代码

cpp 复制代码
/*开启时钟*/
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE);//开启WWDG的时钟
	
/*WWDG初始化*/
	WWDG_SetPrescaler(WWDG_Prescaler_8);			    //设置预分频为8
	WWDG_SetWindowValue(0x40 | 21);					    //设置窗口值,窗口时间为30ms
	WWDG_Enable(0x40 | 54);							    //使能并第一次喂狗,超时时间为50ms
	

IWDG和WWDG对比

相关推荐
深圳雨林凯AI5 小时前
图案裂变的“风格归一化“设计思路:主体保得住,画风才拉得齐|雨林凯AI技术笔记
人工智能·笔记
北域码匠5 小时前
高通滤波算法深度解析(High-Pass Filter)
stm32·算法·c#·数字信号处理·嵌入式开发·滤波算法·高通滤波
star learning white6 小时前
STM32入门学习5
stm32·嵌入式硬件·学习
新晨单片机设计7 小时前
S006A-基于STM32单片机温湿度检测系统【Proteus仿真+Keil程序+原理图】
stm32·单片机·proteus
冬木家居7 小时前
40㎡客厅变形记,小家住出大自由[特殊字符]
android·经验分享·笔记·智能家居·微信公众平台
摇滚侠7 小时前
《SpringBoot 3:入门与应用实战》第 12 章 JDBC 与事务 数据库初始化机制 阅读笔记 36
数据库·spring boot·笔记
逐步前行8 小时前
ESP32-S3-分区表(Partition Table)
单片机
星河单片机9 小时前
STM32驱动HS‑S37A水位传感器+OLED完整实验讲解
stm32·单片机·嵌入式硬件
推送者9 小时前
用宠物照片制作桌宠:从AI拆帧到九点标定的本地化实现笔记
笔记·宠物·用宠物照片制作桌宠
代码不接地9 小时前
【EDA】0.公共部分&元件库设计
嵌入式硬件