STM32 看门狗(WDG)

news2024/11/25 2:33:19

STM32 看门狗(WDG)

WDG简介

  • WDG(Watchdog)看门狗 在程序卡死的情况下,自动帮我们复位

    • 简单来说就是程序运行的一个保障措施,我们得在程序中定期地进行喂狗,如果程序出问题卡死了,没有在规定的时间里喂狗,那么看门狗硬件电路就会自动帮我们复位一下,防止程序长时间卡死。就像是写了个程序,然后突然没动静了,我们就会习惯性地去按一下复位,或者说手机、电脑、卡死不动了,我们也会习惯性地重启来解决。
  • 看门狗可以监控程序的运行状态,当程序因为设计漏洞、硬件故障、电磁干扰等原因,出现卡死或跑飞现象时,看门狗能及时复位程序,避免程序陷入长时间的罢工状态,保证系统的可靠性和安全性

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

  • STM32内置两个看门狗

    • 独立看门狗(IWDG):独立工作,对时间精度要求较低
      • 独立看门狗的时钟是专用的LSI,内部低速时钟,即使主时钟出现问题了,看门狗也能正常工作。独立看门狗只有一个最晚时间界限,喂狗间隔只要不超过这个最晚界限就行了。
    • 窗口看门狗(WWDG):要求看门狗在精确计时窗口起作用,使用的是APB1的时钟,没有专用的时钟。
      • 喂狗的时间有个最晚的界限,也有个最早的界限,必须在这个界限的窗口内喂狗。
    • 对于独立看门狗来说,可能程序就卡死在喂狗的部分了,或者程序跑飞,但是喂狗代码也意外执行了,或者程序有时候很快喂狗,有时候又比较慢喂狗,这些状态独立看门狗就检测不到了,但是窗口看门狗是可以检测到这些问题的,因为它对喂狗的时间窗口卡的很死。

IWDG框图

  • 输入时钟,是LSI,内部低速时钟,时钟频率为40KHz。
  • 之后,时钟进入预分频器进行分频,这个预分频器只有8位,所以最大只能进行256分频。预分频寄存器IWDG_PR可以配置分频系数。
  • 经过预分频器分频之后,时钟经过递减计数器,每来一个时钟,自减一个数,这个计数器是12位的,所以最大值是212-1=4095,当自减到0之后,产生IWDG复位。
  • 正常运行时,为了避免复位,我们可以提前在重装载寄存器IWDG_RLR写一个值,当我们预先写好值之后,在运行过程中,我们在键寄存器(IWDG_KR)里写一个特定数据,控制电路进行喂狗,这时重装值,就会复制到当前的计数器中,这样计数器就会回到重装值,重新自减运行了。
  • 状态寄存器IWDG_SR,就是标志电路运行的状态
  • 上面这些寄存器位于1.8V供电区,下面主要的工作电路,都位于VDD供电区。看门狗功能处于VDD供电区,即在停机模式和待机模式仍能正常运行。独立看门狗也是唤醒待机模式的四个条件之一。

在这里插入图片描述

IWDG键寄存器

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

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

    • 独立看门狗运行在程序可能跑飞、可能收到电磁干扰的环境,在这种环境下,程序作出任何操作都是有可能的,如果只在寄存器中设置一个位,那这一位就有可能在误操作中,变成1或者变成0,这个概率是比较大的。所以单独设置1位来进行控制,在这里比较危险。这时,我们就可以在整个寄存器写入一个特定值,来代替写入一个位的操作。
写入键寄存器的值作用
0xCCCC启用独立看门狗
0xAAAAIWDG_RLR中的值重新加载到计数器(喂狗)
0x5555解除IWDG_PR和IWDG_RLR的写保护
0x5555之外的其他值启用IWDG_PR和IWDG_RLR的写保护

IWDG超时时间

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

  • 其中:TLSI = 1 / FLSI

在这里插入图片描述

WWDG框图

  • 时钟来源是PCLK1,也就是APB1的时钟,这个时钟默认是36MHz,进来之后,先经过一个预分频器进行分频。
  • 分频之后的时钟,驱动计数器进行计数,这个计数器也是一个递减计数器,每来一个时钟,自减一次。这个计数器只有T5~T0,这6位是有效的计数值,最高位T6,这里用来当作溢出标志位。T6位等于1时,表示计数器没溢出,T6位等于0时,表示计数器溢出。
  • 不过对于硬件电路来说,T6位其实也是计数器的一部分,只不过T6位被单独拎出来,当作标志位了而已。比如这个计数器的初始值,我们给111 1111,那么来一个计数脉冲,值减1变为111 1110,再来一个变为111 1101,依次类推,不断自减。直到减为100 0000,减到这个数时,是一个关键节点,此时包括T6位在内的数,是100 0000,转为16进制是0x40。也就是说,此时如果把T6位也当作计数器的一部分,那计数器的值实际上才减一半,但是如果我们把T6位剥离出去,当作溢出标志位,低6位,当作计数器,那此时的状态就是,标志位为1,计数器为00 0000,已经减到0了,再减依次,下一个值是011 1111,这时最高位T6,由1变为0,即代表计数器溢出,这时,最高位T6,就会通过电路,产生复位信号。
  • 如果你把T6位看作是计数器的一部分,那就是整个计数器,值减到0x40之后溢出;而如果把T6位当成溢出标志位,低6位,当作计数器,那就是,低6位的计数值减到0之后溢出。
  • WDGA,窗口看门狗的激活位,也就是使能,WDGA写入1,启用窗口看门狗,使能位作用于与门。
    • 与门的作用类似于一个开关,左边是控制信号,右边是输入,上边是输出,控制信号给1,则输出等于输入,开关导通;控制信号给0,则输出等于0,与输入无关,开关断开。
  • 复位信号有两个来源,用或门连接
    • 溢出标志位T6 当计数器溢出时,T6等于0,输入进来,这里输入有个小圆圈,代表输入取反,所以0变为1,或门有效,输出1,当最后这个使能位给1,开启看门狗后,这个溢出信号就直接通向复位了。
      • T6位一旦等于0,就表示计数器溢出,产生复位信号。在程序正常运行状态下,必须时钟保证T6位为1,这样才能避免复位。
    • 写入WWDG_DR和T6:0与W6:0的比较结果 首先,我们需要计算一个最高界限的计数值,写入到W6~W0,这些值,写入之后是固定不变的。之后一旦我们执行写入CR操作时,与之相连的与门开关打开,写入CR,其实就是写入计数器,也就是喂狗。在喂狗时,这个比较器开始工作,一旦它比较我们当前的计数器T6:0(计数器还未更新)>窗口值W6:0,比较结果就等于1,这个1通过或门,也可以申请复位。
      • 喂狗最早时间窗口的实现流程,就是喂狗的时候,把当前计数值和我预设的窗口值进行比较,如果发现狗的余粮还很充足,喂得太频繁了,就给你复位一下,不让你太早喂狗。

喂狗太晚,6位计数器减到0时,复位。

喂狗太早,计数器的值超过窗口值了,复位

在这里插入图片描述

WWDG工作特性

  • 递减计数器T[6:0]的值小于0x40时,WWDG产生复位

    • T[6:0]包含T6位,所以是值减到0x50之后,再减一次就复位。
  • 递减计数器T[6:0]在窗口W[6:0]外被重新装载时,WWDG产生复位

    • 不能过早喂狗
  • 递减计数器T[6:0]等于0x40时可以产生早期唤醒中断(EWI),用于重装载计数器以避免WWDG复位

    • 0x40,这时T6还是1,还没有溢出,再减一个数,变成0x3F,才溢出。这里的意思就是减到0x40时,产生中断,然后再减一个数,到0x3F时,产生复位。这样这个中断其实就是在溢出前的前一刻发生,这个中断也可以叫“死前中断”。马上就要溢出复位了,再提醒一下你,要不要干点什么。
    • 所以在这个早期唤醒中断里,我们一般可以用来执行一些紧急操作,比如保存重要数据、关闭危险设备等,或者,就是虽然超时喂狗了,但是我们可以在中断里执行一些代码进行解决,或者这个任务不是很危险,就只想做一些提示,不想让它复位了,这样,我们就可以在这个早期唤醒中断里,直接进行喂狗,阻值系统复位。
  • 定期写入WWDG_CR寄存器(喂狗)以避免WWDG复位

在这里插入图片描述

纵轴是T[6:0],包含T6位的CNT,递减计数器,喂狗之后,计数器递减,如果这个计数器还很大,高于W[6:0]窗口值了,你就不能着急喂狗,之后当计数值小于窗口值了,进入到刷新窗口,可以喂狗,当然喂狗也不能太晚,要在减到0x3F之前喂狗,3F这个值,就是T6刚等于0的时刻。所以下面这里,T6位在这个时刻变成0,同时复位信号也在这个时刻产生。

WWDG超时时间

多乘一个4096,是因为PCLK1进来之后,其实是先执行了一个固定的4096分频,因为36M频率太快了,先来一个固定分频,降低一下。

  • 超时时间:

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

    • TWIN = TPCLK1 × 4096 × WDGTB预分频系数 × (T[5:0] - W[5:0])
  • 其中:TPCLK1 = 1 / FPCLK1

在这里插入图片描述

IWDG和WWDG对比

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

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

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

相关文章

存在已打开的MicrosoftEdge浏览器,无法执行安装

存在问题:UiBot Creator 安装Chrome扩展时,存在已打开的MicrosoftEdge浏览器,无法执行安装。 解决办法: 打开MicrosoftEdge浏览器,然后在浏览器页面右上角打开“…”图标 第二步,打开“…”图标之后&…

多关键词高亮显示

引入关键词文件&#xff0c;符合有条件的背景色高亮显示&#xff0c;也可取消。 <div id"testHtml"><p>写入的文本</p><p>关键词</p></div> var str 多个关键词&#xff0c;关键词文件&#xff0c;关键词 var strL str.replac…

批量修改视频尺寸:简单易用的视频剪辑软件教程

如果你需要批量修改视频尺寸&#xff0c;同时保持高质量的画质&#xff0c;那么“固乔剪辑助手”这款软件是你的不二之选。下面就是如何使用这款软件进行批量修改视频尺寸的详细步骤。 1. 首先&#xff0c;你需要在浏览器中进入“固乔科技”的官网&#xff0c;然后下载并安装“…

美客多、亚马逊卖家如何运用自养账号进行有效测评?

到了10月&#xff0c;卖家朋友们都在忙着准备Q4旺季吧&#xff01; 首先&#xff0c;祝愿所有看到这条推文的卖家朋友&#xff0c;今年旺季都能爆单&#xff0c;赚得盆满钵满&#xff01; 测评是珑哥常谈&#xff0c;一直备受关注&#xff0c;不论是新老卖家都是一个逃不开的…

用低代码打造CRM系统 实现客户个性化管理

CRM管理思想伴随着互联网和电子商务的大潮进入中国&#xff0c;对企业经营管理理念产生了巨大的冲击&#xff0c;使中国企业逐步树立起与世界接轨的客户关系管理理念。中国CRM市场的萌芽阶段大约始于2000年&#xff0c;而到2010年前后&#xff0c;中国市场上争相涌现了一大批CR…

什么是美体SDK?美摄美颜美体SDK对接开发指南

在当今的数字世界中&#xff0c;人们对自我表达和形象展示的需求越来越高。美体SDK应运而生&#xff0c;为用户提供了一种全新的美颜美体体验&#xff0c;让每一个人都能享受到个性化的美丽与自信。 一、美体SDK的特点 轻量级&#xff1a;美体SDK体积小巧&#xff0c;不会对用…

掌握音乐创作的终极利器:Avid Sibelius Ultimate for Mac /Windows

如果您是一位热爱音乐创作的人&#xff0c;无论是作曲家、编曲家、指挥家还是学生&#xff0c;那么您一定需要一款功能强大、专业可靠的乐谱制作软件。现在&#xff0c;让我向您介绍Avid Sibelius Ultimate&#xff0c;这是音乐界顶级的乐谱制作软件&#xff0c;它将成为您创作…

docker部署多个node-red操作过程

docker部署多个node-red操作过程 一、docker安装教程二、docker安装node-red2.1 拉取镜像2.2 创建目录并分配权限 三、 docker操作node-red3.1 部署node-red3.2 查看\关闭\删除容器 四、Docker删除Redis镜像 回到目录 一、docker安装教程 【docker使用安装教程】 回到目录 …

(SCADA)监控与数据采集系统

SCADA应用于监控和采集数据来控制工业过程软件。它通过收集和传输实时数据&#xff0c;帮助操作员监视和控制各种设备和过程。这篇文章将介绍SCADA系统的工作原理、应用行业和场景&#xff0c;以及所需的模块和硬件设备。最后&#xff0c;还会详细介绍几款国外SCADA软件给大家参…

ARouter路由框架

序、时间于同样的方式留经我们每个人&#xff0c;每个人却以不同的方式对待时间。 前言 一个用于帮助 Android App 进行组件化改造的框架 —— 支持模块间的路由、通信、解耦 1.原理解析 1.1初始化 使用ARouter在进行Activity跳转非常简单&#xff1a;初始化ARouter、添加注…

武汉凯迪正大—全自动变比测试仪

产品介绍 武汉凯迪正大KDB-IV全自动变比组别测试仪可有效监督变压器产品出厂及使用过程中的质量&#xff0c;防止变压器匝间短路&#xff0c;开路&#xff0c;连接错误&#xff0c;调压开关内部故障或接触故障。 KDB-IV全自动变比组别测试仪在原基础上根据用户的现场使用要求…

【Android】adjustViewBounds 的理解和使用

理解 adjustViewBounds 是一个 ImageView 的属性&#xff0c;用于调整 ImageView 的边界以适应图像的尺寸。当设置为 true 时&#xff0c;ImageView 的边界将根据图像的宽高比例进行调整&#xff0c;以确保图像完全显示在 ImageView 内部。 理解和使用 adjustViewBounds 的步…

推荐一些网络安全的网站和论坛

今天小编给大家推荐一批网络安全的网站和论坛&#xff0c;想学习网络安全技术的朋友们可以去这些网站看看&#xff1a; 1、红黑联盟 红黑联盟论坛 网址&#xff1a;bbs.2cto.com 2、安全客 一个提供网络安全资讯的网站 网址&#xff1a;www.anquanke.com 3、T00ls T00ls是…

为什么说互联网是最坏的行业

犹如春心萌动&#xff0c;想来写点东西。最近突然想通了很多事&#xff0c;以前老逼着自己拼命的挣钱&#xff0c;放弃了一切私生活&#xff0c;没有朋友&#xff0c;没有聚会&#xff0c;连逛街都认为是浪费时间和生命。确实挣了一些钱&#xff0c;以为自己会开心会快乐&#…

易点易动固定资产管理系统:高效完成固定资产盘点任务

固定资产盘点是企业管理中不可或缺的重要环节。然而&#xff0c;传统的固定资产盘点方式往往效率低下、易出错&#xff0c;给企业带来不必要的麻烦和成本。为了解决这一问题&#xff0c;易点易动固定资产管理系统应运而生。本文将详细介绍易点易动固定资产管理系统在固定资产盘…

完美解决word转pdf(亲测有效)

word搞了一天,找了无数的资料,以下这种方法是最好的。。。什么只能转3页了。。。什么字体库了。。。。各种坑 就三步: 第一步:下载jar包,然后放在这里 第二步:引入jar包,放在pom.xml文件 <dependency><groupId>com.aspose</groupId><artifact…

向世界展示“中国品牌”实力,中海达参展INTERGEO

10月10日-12日&#xff0c;全球测绘地理信息行业最权威的盛会INTERGEO在德国柏林举行。本次展会以“Inspiration for a smarter world”&#xff08;灵感碰撞&#xff0c;为更智慧的世界&#xff09;为主题&#xff0c;这与参展的中海达企业愿景“让万物位置更精准&#xff0c;…

【Linux】线程安全问题①——如何实现资源访问互斥(附图解与代码实现)

线程安全主要分为两个方面&#xff0c;分别是资源访问互斥与线程同步&#xff08;线程协同配合&#xff09; 本篇博客&#xff0c;我们主要来讲解资源访问互斥这一方面 目录 为什么要实现资源访问互斥&#xff1f; 实现资源访问互斥&#xff08;原子访问&#xff09;的经典…

JMeter连接数据库

一. 下载数据库驱动jar包 https://jdbc.postgresql.org/download/ 二. 将数据库驱动放到jmeter的lib目录下 三. 在jmeter中引用这个jar包 四. 添加一个jdbc数据库连接配置 五. 添加一个jdbc request来查询sql并将查询结果赋值给一个变量 六. 将查询结果用于其他请求

fico入门基础

Fico模块 会计主体一般为公司法人 分公司不算一个会计主体 分公司上金融中心 子公司会算一个会计主体 子公司上公司代码 会计期间:就是会计会一个期间结算一次(一般为一个月结算一次)(不同国家的快递期间起点会有不同;如日本四月份为第一个快递期间,三月份为第十二个快递期…