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

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

相关推荐
来自晴朗的明天10 分钟前
16、电压跟随器(缓冲器)电路
单片机·嵌入式硬件·硬件工程
钰珠AIOT24 分钟前
在同一块电路板上同时存在 0805 0603 不同的封装有什么利弊?
嵌入式硬件
代码游侠26 分钟前
复习——Linux设备驱动开发笔记
linux·arm开发·驱动开发·笔记·嵌入式硬件·架构
代码游侠11 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
xuxg200513 小时前
4G 模组 AT 命令解析框架课程正式发布
stm32·嵌入式·at命令解析框架
CODECOLLECT15 小时前
京元 I62D Windows PDA 技术拆解:Windows 10 IoT 兼容 + 硬解码模块,如何降低工业软件迁移成本?
stm32·单片机·嵌入式硬件
BackCatK Chen16 小时前
STM32+FreeRTOS:嵌入式开发的黄金搭档,未来十年就靠它了!
stm32·单片机·嵌入式硬件·freertos·低功耗·rtdbs·工业控制
全栈游侠18 小时前
STM32F103XX 02-电源与备份寄存器
stm32·单片机·嵌入式硬件
Lsir10110_18 小时前
【Linux】中断 —— 操作系统的运行基石
linux·运维·嵌入式硬件