STM32 看门狗WDG

一、看门狗(Watchdog)

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

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

STM32内置两个看门狗:

​​​​​​​ ​​​​​​​ 独立看门狗(IWDG):独立工作,对时间精度要求较低(LSI)

窗口看门狗(WWDG):要求看门狗在精确计时窗口起作用(APB1)

1.1 独立看门狗IWDG

在键寄存器(IWDG_KR) 中写入 0xCCCC,开始启用 独立看门狗;此时计数器开始 从其复位值
0xFFF递减计数 。当计数器计数到末尾 0x000 时,会产生一个复位信号 (IWDG_RESET) 。
无论何时,只要在键寄存器IWDG_KR 中写入 0xAAAA , IWDG_RLR 中的值就会被重新加载到计数器,从而避免产生看门狗复位 。
如果用户在 选择字节中启用了"硬件看门狗" 功能,在系统上电复位后,看门狗会 自动开始运
行 ;如果在计数器计数结束前,若软件没有向键寄存器写入相应的值,则系统会产生复位

正因为独立看梦狗处于VDD供电区,在任一低功耗模式下,仍能正常运行,所以也是待机模式唤醒条件之一

键寄存器:

键寄存器本质上是控制寄存器,用于控制硬件电路的工作

在可能存在干扰的情况下,一般通过在整个键寄存器写入特定值来代替控制寄存器写入一位的功能,以降低硬件电路受到干扰的概率

IWDG_PR和IWDG_RLR寄存器具有写保护功能 。要修改这两个寄存器的值,必须先向IWDG_KR寄存器中写入 0x5555

IWDG溢出时间:

超时时间:T(IWDG) = T(LSI )× PR预分频系数 × (RL + 1)

其中:T(LSI) = 1 / F(LSI)

1.2 窗口看梦狗 WWDG

当T6位看作计数器的一部分 ,当减到0x40之后溢出

当T6位看作标志位低6位 的值减到0之后溢出

控制寄存器的T6位:为0时表示计数器溢出;为1时表示计数器没溢出

在程序运行时要始终保持T6位为1,这样才能避免复位

WWDG工作特性:

WWDG溢出时间:

1.3 区别


在系统复位后,看门狗总是处于关闭状态, 当开启看 门狗,随后它不能再被关闭,除非发生复位

二、看门狗配置

RCC_GetFlagStatus():可以查看是由看门狗复位还是上电复位

调用之后,需要软件清除标志位

2.1 独立看门狗配置

(1)开启LSI

对于时钟而言:如果独立看门狗已经由硬件选项或软件启动,LSI振荡器将被强制在打开状态 ,并且不能被关 闭。在LSI****振荡器稳定后,时钟供应给IWDG

(2)解除写保护

复制代码
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);  //0x55,解除写保护

(3)配置预分频器和重装寄存器

复制代码
IWDG_SetPrescaler(IWDG_Prescaler_16);  //LSI的16分频
IWDG_SetReload(2499);  //重装值

(4)喂狗:将重装值送到自减计数器中

复制代码
IWDG_ReloadCounter();  //喂狗

(5)使能看门狗

复制代码
IWDG_Enable();

2.2 窗口看门狗配置

(1)开启PCLK1(APB1)窗口看门狗的时钟

对于时钟而言:如果独立看门狗已经由硬件选项或软件启动,LSI振荡器将被强制在打开状态 ,并且不能被关 闭。在LSI****振荡器稳定后,时钟供应给IWDG

(2)配置预分频器和窗口值

复制代码
RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG,ENABLE);

(3)配置控制寄存器(窗口看门狗使能位、计数器溢出标志位、计数器有效位)

复制代码
WWDG_SetPrescaler(WWDG_Prescaler_8);  //设置预分频系数
WWDG_SetWindowValue(0x40 | 21);  //设置窗口值:30ms      0x40:W6位为1,与T6位保持一致

(4)使能看门狗:第一次使能顺便将值写入自减计数器中

复制代码
WWDG_Enable(0x40 | 54);  //0x40:T6位为1    50ms

定时喂狗:

复制代码
WWDG_SetCounter(0x40 | 54);  //30ms ~ 50ms

使能(第一喂狗)与下一次喂狗要处于设置的时间之内,不能相隔太近

相关推荐
小僧景贤35 分钟前
STM32 startup.s 启动文件与 .map 映射文件深度技术解析(md/hd 版本差异化对比)
stm32·内存映射·startup.s·map 文件·单片机启动流程
2601_966799042 小时前
CH398 技术解析:USB 3.0转千兆以太网单芯片方案与内置电源设计要点
单片机·嵌入式硬件
zlinear数据采集卡3 小时前
数据采集卡从入门到精通(38):上位机开发实战——Python/QT/LabVIEW的技术选型与分层架构
python·单片机·嵌入式硬件·qt·fpga开发·开源·labview
嵌入式阿蔡4 小时前
项目实战 02:智能家居环境网关——ESP32 做 BLE 中心 + 本地联动
网络·单片机·嵌入式硬件·esp32·智能家居·嵌入式实时数据库
自小吃多4 小时前
Capture软件原理图添加差分属性笔记
笔记·嵌入式硬件
简单电磁炮4 小时前
ADXL345调试
单片机·嵌入式硬件
LCG元4 小时前
STM32 软件模拟 I2C 驱动 AT24C02 EEPROM:从时序原理到实测读写全记录
stm32·单片机·嵌入式硬件
振南的单片机世界5 小时前
终端电阻硬核拆解:不接120Ω,RS485信号“撞墙反弹”乱码
arm开发·stm32·单片机·嵌入式硬件
恒锐丰科技韩生5 小时前
SS6625E|3.0‑20V 单通道 16A 峰值 H 桥直流电机驱动 SOP8 门锁玩具机器人专用
嵌入式硬件·硬件工程
aspirant-complete5 小时前
MAC(Apple Silicon)嵌入式基于Clion(stm32CubeMX)环境搭建
stm32·macos