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对比

相关推荐
largecode1 小时前
打电话时,怎么让号码显示自己的品牌名称?办理号码认证服务流程
笔记·百度·微信·课程设计·微信公众平台·facebook·新浪微博
米罗篮2 小时前
DSU并查集 & 拓展欧几里得-逆元
c++·经验分享·笔记·算法·青少年编程
噜噜噜阿鲁~3 小时前
python学习笔记 | 10.0、面向对象编程
笔记·python·学习
hssfscv3 小时前
软件设计师下午题训练1-3题+2019上上午题错题解析 练习真题训练13
笔记·设计模式·uml
SmartRadio4 小时前
STM32WLE5 LoRa 射频匹配优化(V1.1 版)
stm32·单片机·嵌入式硬件·阻抗匹配
哆哆啦004 小时前
使用 Obsidian + GitHub Actions + GitHub Pages 搭建内容发布流
数据库·笔记·github·obsidian
wearegogog1235 小时前
三电平SVPWM逆变器仿真指南
单片机·算法
笨笨饿5 小时前
74_SysTick滴答定时器中断
c语言·开发语言·人工智能·单片机·嵌入式硬件·算法·学习方法
chao1898446 小时前
基于 STM32 的 Modbus RTU 串口通讯程序
stm32·单片机·嵌入式硬件
fie88896 小时前
基于 STC15F104E 的 T12 白光烙铁控制器方案
stm32·单片机