WDG看门狗

news2025/1/21 1:01:28

1 WDG

1.1 简介

WDG是看门狗定时器(Watchdog Timer)的缩写,它是一种用于计算机和嵌入式系统中的定时器,用来检测和恢复系统故障。

看门狗就像是一个忠诚的宠物狗,它时刻盯着你的程序,确保它们正常运行。如果程序因为设计上的小错误、硬件出了问题,或者受到了外界的干扰,导致程序卡住不动或者乱跑,看门狗就会立刻采取行动,让程序重新启动,防止它长时间处于无响应状态,这样就能保障系统的稳定和安全。

简单来说,看门狗就是一个特殊的计时器。它一旦开始计时,就需要程序在规定的时间内给它一个信号,告诉它一切都好。如果程序太忙了或者出了问题,没能在规定时间内给看门狗这个信号,看门狗就会自动启动一个重启程序,让系统回到正常状态。这个过程就像是给看门狗“喂骨头”,让它知道一切都在控制之中。如果没有按时“喂狗”,看门狗就会认为出了问题,然后采取行动。

1.2 主要功能与应用

  • 1.系统监控:监控系统运行状态,确保系统不会因软件故障而停止响应。

  • 2.防止死锁:如果程序进入无限循环,看门狗定时器可以检测到并重置系统。

  • 3.安全机制:在某些关键系统中,看门狗定时器可以作为一个安全机制,确保系统在异常情况下能够安全地重启。

1.3 分类

WDG(Watchdog Timer)看门狗通常分为以下几种类型:

  • 1.独立看门狗(Independent Watchdog, IWDG):独立于系统的其他部分运行,具有自己的时钟源,通常用于监视硬件错误。

  • 2.窗口看门狗(Window Watchdog, WWDG):与系统时钟相关联,具有一个时间窗口,在该窗口内必须重置计数器,否则会产生系统复位。主要用于监视软件错误。

  • 3.软件看门狗:由软件实现,依赖于操作系统的调度和运行环境,如果主程序卡死,软件看门狗可能无法触发重置。

  • 4.硬件看门狗:具有独立的硬件结构,即使主程序卡死,也能独立于软件运行并触发系统重置。

  • 5.周期性看门狗(AliveSupervision):监控周期性程序是否能正常执行,保证程序处于活跃状态。

  • 6.截止期限看门狗(DeadlineSupervision):监督软件在两个状态之间的转换时间,确保在预定时间内完成特定任务。

  • 7.逻辑看门狗(LogicalSupervision):监督软件执行顺序的正确性,确保程序按照预定逻辑运行。

这些看门狗类型可以根据不同的需求和应用场景进行选择和配置,以确保系统的稳定性和可靠性。

STM32中内置了两个看门狗:

  • 独立看门狗(Independent Watchdog, IWDG)

  • 窗口看门狗(Window Watchdog, WWDG)

2 IWDG

2.1 IWDG框图

在这里插入图片描述

  • 1.输入时钟LSI(40KHz),进入预分频器进行分频(8位,最多256分频,由预分频寄存器IWDG_PR控制分频系数)。

  • 2.时钟驱动递减计数器(每来一个时钟自减一个数,12位,最大值为4095),自减到0后产生IWDG复位信号。

  • 3.提前在重装载寄存器(IWDG_RLR)写一个值,在键寄存器(IWDG_KR)中写一个特定数据控制电路,进行喂狗,这时重装值就会复制到当前的计数器中。

  • 4.计数器回到重装值,重新自减运行。

预分频寄存器IWDG_PR、状态寄存器IWDG_SR(只读)、重装载寄存器IWDG_RLR、键寄存器IWDG_KR位于1.8V供电区;主要工作电路位于VDD供电区。

2.2 键寄存器IWDG_KR

键寄存器是IWDG系统中的核心控制组件,它的作用类似于一把精密的钥匙,用于精细调控看门狗的启动、寄存器的访问权限以及计数器的重载操作。

在嵌入式系统设计中,硬件电路可能会受到各种电磁干扰的影响,这些干扰有时会导致控制信号的误触发。为了避免这种情况,键寄存器采用了一种特殊的工作机制:通过在整个寄存器中写入一系列特定的值,而不是仅仅修改单个位,从而大大降低了因干扰而错误操作硬件电路的风险。

写入键寄存器的值作用
0xCCCC启动独立看门狗
0xAAAA将IWDG_RLR中的值重新加载到计数器(喂狗)
0x5555解除IWDG_RP与IWDG_RLR的写保护
0x5555之外的值启动IWDG_RP与IWDG_RLR的写保护

2.3 IWDG超时时间

超时时间 == TIWDG = TLSI × PR预分频系数 × (RL + 1)==

TLSI = 1/FLSI ,FLSI = 40KHz

在这里插入图片描述

例如:当预分频系数为4时,最短超时时间 = 1/40000 * 4 * 1 = 0.0001s = 0.1ms;最长超时时间 = 1/40000 * 4 * 4096 = 0.4096s = 409.6ms

在多个可选择的预分频系数中,应该优先选择预分频系数小的,这样可以最大化利用计数器的值来减小时间误差。
原因:有的时候,带入上面公式计算,得到的RL值是一个小数,但RL只能给整数,所以四舍五入取整就会造成误差,这时,如果预分频系数小,时钟快,那么取整后造成的误差就比较小。

3 WWDG

3.1 WWDG框图

在这里插入图片描述

  • 1.PCLK1时钟(默认36KHz)进入看门狗分频器WDGTB。

    PCLK1时钟进入到WDGTB之前会先进行了4096分频。

  • 2.分频之后的时钟驱动计数器(6位递减计数器)进行计数。

  • 3.当T6位等于0时,产生复位信号。

    T5~T0为有效计数值,T6用来当作溢出标志位,T6等于1时表示计数器没溢出,为0时表示计数器溢出。

    • 把T6当作计数器的一部分,整个计数器的值减到0x40(二进制:10 0000)之后溢出;

    • 把T6当作溢出标志位,低6位的计数值减到0后溢出。

WDGA:窗口看门狗的激活位(使能),为1启用窗口看门狗。

窗口看门狗的最晚界限由看门狗控制寄存器(WWDG_CR)控制;最早界限由看门狗配置寄存器(WWDG_CFR)控制。

3.2 WWDG工作特性

  • 一. 递减计数器T[6:0]的监控机制:

    • 当WWDG的递减计数器T[6:0]的值降至0x40以下时,系统将触发一个复位,以确保在预定的监控时间内系统能够正常响应。
  • 二.窗口值W[6:0]的作用:

    • 如果递减计数器T[6:0]在窗口值W[6:0]设定的范围之外被重新装载,WWDG将立即产生复位。这个特性确保了系统在预设的监控窗口内必须进行重置,以防止潜在的系统故障。

    喂狗时把当前计数值与预设的窗口值进行比较,如果T[6:0] > W[6:0] 就产生复位信号。

  • 三.早期唤醒中断(Early Wakeup Interrupt, EWI):

    • 当递减计数器T[6:0]的值达到0x40时,WWDG可以发出早期唤醒中断信号。这个中断允许系统及时重装载计数器,从而避免因计数器归零而触发的WWDG复位。

    1、早期唤醒中断中可以用来执行一些紧急操作,比如保持重要数据、关闭危险设备等。

    2、当超时喂狗时,我们可以在中断里执行一些代码进行解决,或者任务不是很危险,超时了只想做一些提示,可以在早期唤醒中断中直接执行喂狗,阻止系统复位,提示信息。

  • 四.维护WWDG的正常运行:

    • 为了防止WWDG因计数器归零而引发复位,系统必须定期向WWDG控制寄存器(WWDG_CR)写入新的值,这一操作通常被称为“喂狗”。这是确保系统稳定运行的重要维护步骤。

在这里插入图片描述

总结:喂狗太晚,6位计数器减到0了复位;喂狗太早,计数器的值超过窗口值了,复位。

3.3 超时时间

  • 超时时间:TWWDG = TPCLK1 × 4096 × WDGTB预分频系数 × (T[5:0] + 1)

    要乘一个4096是因为PCLK1时钟进入到WDGTB之前先进行了4096分频。

  • 窗口时间:TWIN = = TPCLK1 × 4096 × WDGTB预分频系数 × (T[5:0] - W[5:0])

  • TPCLK1 = 1 / FPCLK1

在这里插入图片描述

例如:超时时间为50ms,窗口时间为30ms,WDGTB预分频系数为8:

  • 超时时间:TWWDG = 50 * 10-3 = 1 / 36000 * 4096 * 8 * (T[5:0] + 1) -> T[5:0] = 54

  • 窗口时间:Twin = 30 * 10-3 = 1 / 36000 * 4096 * 8 * (T[5:0] - W[5:0]) -> W[5:0] = 21

4 软件设计

4.1 IWDG

4.1.1 配置流程:

  • 1.开启LSI时钟

  • 2.解除预分频器和重装寄存器写保护

  • 3.写入预分频和重装值

  • 4.启动看门狗

  • 5.喂狗

在喂狗或使能的时候,会在键寄存器写入5555之外的值,就顺便给寄存器写保护了,不需要再手动执行写保护。

4.1.2 IDWG软件设计

// main.c
/***** 1000ms ******/
void IWDG_Init(void)
{
	IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
	
	IWDG_SetPrescaler(IWDG_Prescaler_16);
	
	IWDG_SetReload(2499);
	
	IWDG_ReloadCounter();
	
	IWDG_Enable();
}

int main(void)
{
	USART_Config();
	
	if(RCC_GetFlagStatus(RCC_FLAG_IWDGRST) == SET) 
	{
		printf("\r\n -----------看门狗复位\r\n");
		Delay_ms(100);
		RCC_ClearFlag();
	}
	else
	{
		printf("\r\n -----------程序复位\r\n");
	}
	
	IWDG_Init();
		
	while(1)
	{
		IWDG_ReloadCounter();
		printf("\r\n -----------IWDG_ReloadCounter\r\n");
		
		Delay_ms(900);
	}
	
}
  • 如果看门狗不会自动复位,拔掉DAP之后再按复位键。

4.2 WWDG

4.2.1 配置流程

  • 1.开启窗口看门狗APB1的时钟

  • 2.配置各寄存器(预分频、窗口值)

    窗口看门狗没有写保护,所以可以在这一步直接写这些寄存器

  • 3.写入控制寄存器CR

包含看门狗使能位、计数器溢出标志位和计数器有效位

  • 4.在运行过程中,不断向计数器写入想要的重装值喂狗

4.2.2 WWDG软件设计

// main.c
void WWDG_Init()
{
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE);
	
	WWDG_SetPrescaler(WWDG_Prescaler_8);
	
	/*** 设置窗口时间 ***/
	WWDG_SetWindowValue(0x40 | 21); // 低6位有效,第7位置1  	  30ms
	
	/*** 设置超时时间 ***/
	WWDG_Enable(0x40 | 54); // 0x40 WWDG_CR T6为1   		  50ms
}

	int main(void)
{
	USART_Config();
	
	if(RCC_GetFlagStatus(RCC_FLAG_WWDGRST) == SET) 
	{
		printf("\r\n -----------窗口看门狗复位\r\n");
		Delay_ms(100);
		RCC_ClearFlag();
	}
	else
	{
		printf("\r\n -----------程序复位\r\n");
	}
	
	WWDG_Init();
	
	while(1)
	{
		Delay_ms(40);
		WWDG_SetCounter(0x40 | 54);
		printf("\r\n -----------WWDG_SetCounter\r\n");
	}
	
}

注意:

  • 1.在WWDG_ENABLE后注意不要喂狗,会导致复位。

  • 2.在开启窗口看门狗时,一定要给个重装值,并且T6位置1,以防止开的时候立刻就复位了。

    即使窗口看门狗被禁止,递减计数器仍继续递减计数。

5 IWDG与WWDG对比

IWDGWWDG
复位计数器减到0后计数器T[5:0]减到0后、在窗口时间外重装计数器
中断早期中断唤醒
时钟源LSI(40KHz)PCLK1(默认36KHz)
预分频系数4、8、16、32、64、128、2561、2、4、8
计数器12位(有效计数)6位
超时时间0.1ms~26214.4ms113us~58.25ms
喂狗方式写入键寄存器,重装固定值RLR直接写入计数器,写入多少重装值为多少
防误操作键寄存器和写保护
应用场合独立工作,对时间精度要求较低要求看门狗在精确计时窗口起作用

无论是独立看门狗还是窗口看门狗,一旦启动就无法关闭

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1880615.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

WordPress中文网址导航栏主题风格模版HaoWa

模板介绍 WordPress响应式网站中文网址导航栏主题风格模版HaoWa1.3.1源码 HaoWA主题风格除行为主体导航栏目录外,对主题风格需要的小控制模块都开展了敞开式的HTML在线编辑器方式的作用配备,另外预埋出默认设置的编码构造,便捷大伙儿在目前…

python解锁图片相似度的神奇力量

在这个信息爆炸的时代,图片成为了我们传递信息、表达情感和记录生活的重要方式。然而,面对海量的图片资源,如何快速准确地找到相似的图片,成为了一个亟待解决的问题。现在,让我们为您揭开图片相似度的神秘面纱,带您领略这一创新技术的魅力! 图片相似度技术,就像是一位…

一文弄懂DBSCAN聚类算法

1.引言 今天,我们将讨论另一种聚类算法 DBSCAN(基于密度的带噪声应用空间聚类)。为了更好地理解 DBSCAN,请先阅读之前介绍的 K-Means 和 分层聚类这两篇文章。 顾名思义,DBSCAN 是通过点的密度来识别聚类集群。聚类通…

AI写作变现指南:从项目启动到精通

项目启动 1. 确定目标客户群体 首先,明确谁是我们的目标客户。以下是一些潜在的客户群体: 大学生:他们需要写论文、报告、演讲稿等。 职场人士:包括需要撰写商业计划书、市场分析报告、项目提案等的专业人士。 自媒体从业者&…

《昇思25天学习打卡营第14天 | 昇思MindSpore基于MindNLP+MusicGen生成自己的个性化音乐》

14天 本节学了基于MindNLPMusicGen生成自己的个性化音乐。 MusicGen是来自Meta AI的Jade Copet等人提出的基于单个语言模型的音乐生成模型,能够根据文本描述或音频提示生成高质量的音乐样本。 MusicGen模型基于Transformer结构,可以分解为三个不同的阶段…

基于STM32的智能农业环境监控系统

目录 引言环境准备智能农业环境监控系统基础代码实现:实现智能农业环境监控系统 4.1 数据采集模块4.2 数据处理与分析4.3 控制系统实现4.4 用户界面与数据可视化应用场景:农业环境管理与优化问题解决方案与优化收尾与总结 1. 引言 智能农业环境监控系…

java基础知识点全集

JAVA的所有知识点 一、基础的数组、数据类型、输入输出二、类与对象1. 三大特征(1) 封装(2)继承(3)多态 2. 类的实例化(1) 类通过NEW来创建(2) 类的继承&…

Vue3学习(一)

创建组件实例:我们传入 createApp 的对象实际上是一个组件 import { createApp } from vue // 从一个单文件组件中导入根组件 import App from ./App.vueconst app createApp(App) 大多数真实的应用都是由一棵嵌套的、可重用的组件树组成的。 App (root compone…

贪心算法题目总结

1. 整数替换 看到这道题目,我们首先能想到的方法就应该是递归解法,我们来画个图 此时我们出现了重复的子问题,就可以使用递归,只要我们遇到偶数,直接将n除以2递归下去,如果是奇数,选出加1和减1中…

MySQL 高级SQL高级语句(二)

一.CREATE VIEW 视图 可以被当作是虚拟表或存储查询。 视图跟表格的不同是,表格中有实际储存数据记录,而视图是建立在表格之上的一个架构,它本身并不实际储存数据记录。 临时表在用户退出或同数据库的连接断开后就自动消失了,而…

模型预测控制:设定点跟踪(Set Point Tracking)

模型预测控制:设定点跟踪(Set Point Tracking) 模型预测控制(Model Predictive Control, MPC)不仅可以用于系统稳定性问题,还可以用于设定点跟踪问题(Set Point Tracking)&#xff…

13_旷视轻量化网络--ShuffleNet V2

回顾一下ShuffleNetV1:08_旷视轻量化网络--ShuffleNet V1-CSDN博客 1.1 简介 ShuffleNet V2是在2018年由旷视科技的研究团队提出的一种深度学习模型,主要用于图像分类和目标检测等计算机视觉任务。它是ShuffleNet V1的后续版本,重点在于提供更高效的模…

架构师篇-10、DDD实战篇:通过领域模型落地系统

基于领域模型的设计与开发 数据库设计程序设计微服务设计 在线订餐系统的领域事件通知 微服务拆分 事件风暴会议 梳理领域事件进行领域建模识别聚合关系划分限界上下文 用户下单领域模型 更新后的模型 领域模型的设计实现过程 数据库设计 数据库映射:一对一关系…

cesium 添加 Echarts 图层(空气质量点图)

cesium 添加 Echarts 图层(下面附有源码) 1、实现思路 1、在scene上面新增一个canvas画布 2、通坐标转换,将经纬度坐标转为屏幕坐标来实现 3、将ecarts 中每个series数组中元素都加 coordinateSystem: ‘cesiumEcharts’ 2、示例代码 <!DOCTYPE html> <html lan…

EDA期末复习——基础知识

个人名片&#xff1a; &#x1f393;作者简介&#xff1a;嵌入式领域优质创作者&#x1f310;个人主页&#xff1a;妄北y &#x1f4de;个人QQ&#xff1a;2061314755 &#x1f48c;个人邮箱&#xff1a;[mailto:2061314755qq.com] &#x1f4f1;个人微信&#xff1a;Vir2025WB…

iconfont-阿里巴巴矢量图标库 在vue项目使用记录

官网地址&#xff1a;https://www.iconfont.cn/manage/index?manage_typemyprojects&projectId4539761 第一步&#xff1a; 下载资源 ->解压到项目文件夹 第二步 在项目中main.ts 或者main.js 引入资源 import //assets/iconfont/font/iconfont.js; import //assets…

【考研408计算机组成原理】微程序设计重要考点指令流水线考研真题+考点分析

苏泽 “弃工从研”的路上很孤独&#xff0c;于是我记下了些许笔记相伴&#xff0c;希望能够帮助到大家 目录 微指令的形成方式 微指令的地址形成方式 对应考题 题目&#xff1a;微指令的地址形成方式 - 断定方式 解题思路&#xff1a; 答题&#xff1a; 分析考点&…

【训练篇】MLU370-M8 完成 qwen1.5-7b-chat-lora训练及推理

文章目录 前言一、平台环境配置二、环境 or 模型准备1.模型下载2.环境准备2.1 modelscope2.2 transformers2.3 accelerate2.4 deepspeed2.5 peft2.6 环境代码修改 3训练代码准备4 代码修改 三&#xff0c;训练后推理验证四.推理效果展示1.微调前2.微调后 前言 本期我们采用魔塔…

局域网必备文件传输神器,吾爱再出精品,支持电脑、手机无缝对接!

今天给大家带来的不是一般的干货&#xff0c;而是一款让阿星我爱不释手的局域网文件传输神器&#xff0c;而且是吾爱大佬出品。无论是工作还是生活&#xff0c;它都能给你带来极大的便利。这年头&#xff0c;谁还没个跨设备传输文件的需求呢&#xff1f; 手机、电脑、平板&…

一个中文和越南语双语版本的助贷平台开源源码

一个中文和越南语双语版本的助贷平台开源源码。后台试nodejs。 后台 代理 前端均为vue源码&#xff0c;前端有中文和越南语。 前端ui黄色大气&#xff0c;逻辑操作简单&#xff0c;注册可对接国际短信&#xff0c;可不对接。 用户注册进去填写资料&#xff0c;后台审批&…