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

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

相关推荐
stm32发烧友15 小时前
基于STM32的智能家居安防系统设计
stm32·嵌入式硬件·智能家居
LightningJie16 小时前
STM32(hal库)中的定时器从模式TIM_SlaveConfigTypeDef结构体中的含义,以及可选参数的含义都是什么意思
stm32·单片机·嵌入式硬件
小齿轮lsl16 小时前
无桥Boost-PFC 双闭环控制MATLAB仿真
单片机·嵌入式硬件·matlab·电力电子·电源硬件·pfc
Matlab程序猿小助手19 小时前
【MATLAB源码-第213期】基于matlab的16QAM调制解调系统软硬判决对比仿真,输出误码率曲线对比图。
开发语言·嵌入式硬件·算法·matlab·机器人
鱼与仙人掌20 小时前
STM32:ADC
stm32·单片机·嵌入式硬件
yangpipi-20 小时前
Linux系统程序设计--2. 文件I/O
linux·stm32·单片机
沐欣工作室_lvyiyi1 天前
汽车牌照识别系统的设计与仿真(论文+源码)
人工智能·单片机·fpga开发·汽车·单片机毕业设计·matlab车牌识别
努力的里1 天前
【STM32开发】-FreeRTOS开发入手学习
stm32·学习·freertos·rtos
wenchm1 天前
细说STM32单片机USART中断收发RTC实时时间并改善其鲁棒性的另一种方法
stm32·单片机·实时音视频
雷打不动的晴天1 天前
关于PCB供电保护的问题
嵌入式硬件