STM32-WDG看门狗

目录

简介

独立看门狗

键寄存器

窗口看门狗

特点


简介

STM32内置两个看门狗,提供了更高的安全性、时间的精确性和使用的灵活性。两个看门狗设备(独立看门狗和窗口看门狗)可用来检测和解决由软件错误引起的故障,当计数器达到给定的超时值时,触发一个中断(仅适用于窗口看门狗)或产生系统复位。

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

STM32内置两个看门狗:

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

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

重启解决大部分问题 -_-

看门狗一旦启动就无法关闭

独立看门狗

独立看门狗(IWDG)由专用的低速时钟(LSI)驱动,即使主时钟发生故障他也仍然有效。

喂狗时间:计数器减到0之前。

键寄存器

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

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

IWDG_PR和IWDG_RLR寄 存 器 具 有 写 保 护 功 能 。 要修改这两个寄存器的值,必须先向IWDG_KR寄存器中写入0x5555。以不同的值写入这个寄存器将会打乱操作顺序,寄存器将重

新被保护。重装载操作(即写入0xAAAA)也会启动写保护功能。

窗口看门狗

窗口看门狗由从APB1时钟分频后得到的时钟驱动,通过可配置的时间窗口来检测应用程序非正常的过迟或过早的操作。

喂狗时间:必须在一定的时间范围内,不能过早或者过晚。

窗口看门狗计数器和控制器合二为一,没有重装寄存器,直接在CNT写入数值就可以。

配置寄存器写入喂狗的最早时间界限,最晚时间界限写入CNT。

特点

可编程的自由运行递减计数器。

条件复位:

T5-T0为有效的计数值,T6为溢出标志位。T6=1表示没溢出,T6=0表示溢出。要确认计数器减到0溢出,还是小于0x40溢出,T6=1为0x40。

  • 当递减计数器的值小于0x40, (若看门狗被启动)则产生复位。
  • 当递减计数器在窗口外被重新装载, (若看门狗被启动)则产生复位。

如果启动了看门狗并且允许中断,当递减计数器等于0x40时产生早期唤醒中断(EWI),它可以被用于重装载计数器以避免WWDG复位。

WDGA为看门狗使能位。

窗口看门狗的递减计数器会一直运行,开启窗口看门狗的时候需要立刻喂狗一次,避免立刻被复位

工作特性:

  • 递减计数器T[6:0]的值小于0x40时,WWDG产生复位
  • 递减计数器T[6:0]在窗口W[6:0]外被重新装载时,WWDG产生复位
  • 递减计数器T[6:0]等于0x40时可以产生早期唤醒中断(EWI),用于重装载计数器以避免WWDG复位(可以在中断里执行操作进行喂狗阻止复位)
  • 定期写入WWDG_CR寄存器(喂狗)以避免WWDG复位

PCLK1时钟会先进行一个4096的分频再进入WDGTB

PCLK1时钟会先进行一个4096的分频再进入WDGTB

对比

代码

可以通过获取标志位来确认看门狗是否正常启动。

独立狗

开启独立看门狗会自动打开LSI的时钟

复制代码
/*IWDG初始化*/
	IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);	//独立看门狗写使能
	IWDG_SetPrescaler(IWDG_Prescaler_16);			//设置预分频为16
	IWDG_SetReload(2499);					//设置重装值为2499,独立看门狗的超时时间为1000ms
	IWDG_ReloadCounter();							//重装计数器,喂狗
	IWDG_Enable();									//独立看门狗使能


//IWDG_ReloadCounter();						//重装计数器,喂狗

//主循环运行时间超过1000ms便会复位,需要在1000ms内进行喂狗

窗口狗

复制代码
/*开启时钟*/
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE);	//开启WWDG的时钟
	
	/*WWDG初始化*/
	WWDG_SetPrescaler(WWDG_Prescaler_8);			//设置预分频为8
	WWDG_SetWindowValue(0x40 | 21);					//设置窗口值,窗口时间为30ms
	WWDG_Enable(0x40 | 54);							//使能并第一次喂狗,超时时间为50ms

//WWDG_SetCounter(0x40 | 54);					//重装计数器,喂狗
相关推荐
逼子格1 小时前
五种音频器件综合对比——《器件手册--音频器件》
嵌入式硬件·音视频·硬件工程师·硬件测试·电子器件·硬件笔试真题·音频器件
niuTaylor3 小时前
STM32平衡车开发实战教程:从零基础到项目精通
stm32·单片机·嵌入式硬件
可待电子单片机设计定制(论文)12 小时前
【STM32设计】基于STM32的智能门禁管理系统(指纹+密码+刷卡+蜂鸣器报警)(代码+资料+论文)
stm32·单片机·嵌入式硬件
不可思议迷宫13 小时前
Verilog编程实现一个分秒计数器
单片机·嵌入式硬件·fpga开发
life_yangzi15 小时前
关于单片机IAP升级的那点事儿|智能设置中断向量表
单片机·嵌入式硬件
了一li17 小时前
STM32实现一个简单电灯
stm32·单片机·嵌入式硬件
可待电子单片机设计定制(论文)19 小时前
【STM32设计】数控直流稳压电源的设计与实现(实物+资料+论文)
stm32·嵌入式硬件·mongodb
march_birds20 小时前
FreeRTOS 与 RT-Thread 事件组对比分析
c语言·单片机·算法·系统架构
小麦嵌入式20 小时前
Linux驱动开发实战(十一):GPIO子系统深度解析与RGB LED驱动实践
linux·c语言·驱动开发·stm32·嵌入式硬件·物联网·ubuntu
触角010100011 天前
STM32F103低功耗模式深度解析:从理论到应用实践(上) | 零基础入门STM32第九十二步
驱动开发·stm32·单片机·嵌入式硬件·物联网