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)

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

主要特性

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

框图

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

超时时间

  • 超时时间: TWWDG = TPCLK1 × 4096 × WDGTB预分频系数 × ( T[5:0] + 1 )
  • 窗口时间: TWIN = TPCLK1 × 4096 × WDGTB预分频系数 × ( T[5:0] - W[5: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对比

相关推荐
9ilk22 分钟前
【同步/异步 日志系统】 --- 前置技术
笔记·后端·其他·中间件
go_bai26 分钟前
Linux_基础IO(2)
linux·开发语言·经验分享·笔记·学习方法·1024程序员节
序属秋秋秋1 小时前
《Linux系统编程之入门基础》【权限管理】
linux·运维·服务器·笔记·学习·ubuntu·xshell
IT_阿水4 小时前
RA-Eco-RA4M2之RTC电子钟
单片机·嵌入式硬件·实时音视频
清风6666668 小时前
基于单片机的水塔液位检测与智能调节报警系统设计
数据库·单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
某zhuan9 小时前
STM32中PB4引脚作普通GPIO使用的一个小问题
stm32·单片机·嵌入式硬件
koo3649 小时前
李宏毅机器学习笔记30
人工智能·笔记·机器学习
摇滚侠10 小时前
Spring Boot 3零基础教程,WEB 开发 内嵌服务器底层源码分析 笔记48
spring boot·笔记
蓝天居士10 小时前
PY32F040单片机介绍(2)
单片机·国产mcu
报错小能手11 小时前
项目——基于C/S架构的预约系统平台 (1)
开发语言·c++·笔记·学习·架构