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

相关推荐
青山是哪个青山1 小时前
LangChain 学习笔记(四):Message 与提示词模板
笔记·学习·langchain
hsjiasb2 小时前
FreeRTOS学习(二十六)——动态内存管理heap_1到heap_5
stm32·单片机·学习·学习笔记·freertos
LCG元3 小时前
STM32+ESP8266+MQTT 物联网气象站:从零搭建温湿度远程监测系统(附完整源码)
stm32·物联网·struts
Shell运维手记5 小时前
Linux 常用基础命令学习笔记
linux·运维·笔记·学习·算法·github
FakeOccupational5 小时前
【电路笔记 STM32】Cortex-M7 内核上的数据缓存(D-Cache)结构+MPU+DMA&Cache+STM32CubeMX配置
笔记·stm32·缓存
动词ing5 小时前
【学习笔记】C语言(数组指针与指针数组+字符数组+函数+参数传递+字符串作为形参+递归函数+指针函数+回调函数+结构体嵌套+内存动态分配函数)
c语言·笔记·学习
殷忆枫6 小时前
基于K210与STM32的智能垃圾分类与物联网监管系统
stm32·物联网·分类
周洲08306 小时前
STM32 GPIO 外部中断深度解析:边沿触发 / 电平触发、NVIC 优先级配置、中断嵌套实战
stm32·单片机·嵌入式硬件
LCG元7 小时前
STM32F103 CAN 总线通信实战:标准库双机通信与过滤器配置精讲
stm32·单片机·嵌入式硬件
z落落7 小时前
C# Modbus-ASCII 超详细完整笔记(协议原理+LRC算法+读写源码全拆解)
笔记