STM32—独立看门狗(IWDG)和窗口看门狗(WWDG)

概述:

  • WDG(Watchdog) 看门狗,看门狗可以监控程序的运行状态,当程序因为设计漏洞、硬件故障、电磁干扰等原因,出现卡死或跑飞现象时,看门狗能计时复位程序,避免程序陷入长时间的罢工状态,保证系统的可靠性和安全性
  • 看门狗本质上是一个定时器,当指定时间范围内,程序没有执行喂狗(重置计数器)操作时,看门狗硬件电路就自动产生复位信号
  • STM32内置两个看门狗:
  • 独立看门狗(IWDG):独立工作,对时间精度要求较低
  • 窗口看门狗(WWDG):要求看门狗在精确计时窗口起作用

一、独立看门狗(IWDG)

1、框图

首先,利用的是LSI(40KHz)时钟信号,先通过8位预分频器进行分频,会产生一个状态标志位给状态寄存器,分频后的信号来驱动计数器递减。

重装载寄存器是12位的,值是4096,给计数器重装载值。看门狗被激活后,则在计数器计数至0x000时产生复位。

键寄存器:本质上是控制寄存器,用于控制硬件电路的工作,在可能存在干扰的情况下,一般通过在整个键寄存器写入特定值来代替控制寄存器写入一位的功能,以降低硬件电路受到干扰的概率。

键寄存器的值:

 超时时间:TIWDG = TLSI × PR预分频系数 × (RL + 1) 其中:TLSI = 1 / FLSI。

2、代码:

main.c:

#include  "stm32f10x.h"                  // Device header
#include  "OLED.h"
#include  "delay.h"int main(void)
{OLED_Init();OLED_ShowString(1,1,"IWDG TEST");if(RCC_GetFlagStatus(RCC_FLAG_IWDGRST)==SET){OLED_ShowString(2,1,"IWDGRST");Delay_ms(500);OLED_ShowString(2,1,"       ");Delay_ms(100);RCC_ClearFlag();}else{OLED_ShowString(3,1,"RST");Delay_ms(500);OLED_ShowString(3,1,"   ");Delay_ms(100);}IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);   //解除写保护IWDG_SetPrescaler(IWDG_Prescaler_16);          //16分频IWDG_SetReload(2499);                          //重装值,超时时间为1sIWDG_ReloadCounter();                          //重装载计数器IWDG_Enable();                                 //启动看门狗while(1) {IWDG_ReloadCounter();OLED_ShowString(4,1,"FEED");Delay_ms(410);OLED_ShowString(4,1,"   ");Delay_ms(600);}}

 二、窗口看门狗(WWDG)

1、作用

窗口看门狗通常被用来监测,由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障。除非递减计数器的值在T6位变成0前被刷新,看门狗电路在达到预置的时间周期时,会产生一个MCU复位。在递减计数器达到窗口寄存器数值之前,如果7位的递减计数器数值(在控制寄存器中)被刷新, 那么也将产生一个MCU复位。这表明递减计数器需要在一个有限的时间窗口中被刷新。

主要特性:

  • 可编程的自由运行递减计数器
  • 条件复位:当递减计数器的值小于0x40, (若看门狗被启动)则产生复位。当递减计数器在窗口外(由框图可以知道,T6:0>W6:0时)被重新装载, (若看门狗被启动)则产生复位。
  • 如果启动了看门狗并且允许中断,当递减计数器等于0x40时产生早期唤醒中断(EWI),它可以被用于重装载计数器以避免WWDG复位,也就是看门狗要中断了,不想让它中断,就可以进行唤醒中断。

2、框图

利用PCLK1时钟(36KHz)通过预分频器(2位)后作为计数器的输入信号。

根据框图可知,复位有两种:

        1、超时复位:当递减计数器的值小于0x40,根据下图WWDG_CR可知,有7位计数器,只有低6位进行计数,而T6是做为溢出标志位,T6初始值为1,,当变为0时就会产生复位信号,在经过非下变为1,通过或符号就会产生1,与WDGA相与就会复位。WDGA是一个类似于开关,为1打开看门狗,为0关闭看门狗。

        2、窗口复位:当T6:0>W6:0且递减计数器被重装载,这是会产生复位信号。

3、时间计算

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

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

这个4096分频在框图上没有展示出来。手册寄存器有写。

4、工作特性

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

5、代码

main.c:

#include  "stm32f10x.h"                  // Device header
#include  "OLED.h"
#include  "delay.h"int main(void)
{OLED_Init();OLED_ShowString(1,1,"IWDG TEST");if(RCC_GetFlagStatus(RCC_FLAG_WWDGRST)==SET){OLED_ShowString(2,1,"IWDGRST");Delay_ms(500);OLED_ShowString(2,1,"       ");Delay_ms(100);RCC_ClearFlag();}else{OLED_ShowString(3,1,"RST");Delay_ms(500);OLED_ShowString(3,1,"   ");Delay_ms(100);}RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG,ENABLE);WWDG_SetPrescaler(WWDG_Prescaler_8);//窗口时间就是某一时间间隔内//小于窗口时间会复位//大于窗口时间小于等于超时时间不会复位WWDG_SetWindowValue(0x40+21);  //30msWWDG_Enable(0x40+54);       //50mswhile(1) {//		     OLED_ShowString(4,1,"FEED");
//		     Delay_ms(20);
//		     OLED_ShowString(4,1,"   ");Delay_ms(49);WWDG_SetCounter(0x40+54);     //喂狗,设置最大超时时间为50ms}}

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

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

相关文章

Chrome与火狐哪个浏览器的性能表现更好

在数字时代,浏览器是我们日常生活中不可或缺的工具。无论是工作、学习还是娱乐,一个好的浏览器都能显著提高我们的效率和体验。市场上有许多优秀的浏览器,其中Google Chrome和Mozilla Firefox无疑是最受欢迎的两款。本文将比较这两款浏览器的…

现在国内优秀的广告联盟有哪些?

广告联盟是网络广告效果营销的主流方式之一,广告联盟的变现方式多种多样,主要有以下四种 CPA:按照下载或者注册进行付费(软件平台或游戏试玩平台)CPS:按照成交进行付费(淘宝客)CPM&…

机器学习,生成式AI ,LLM大模型,人工智能,他们之间的关系是什么?有什么不同?

这些概念都是现代计算机科学和人工智能领域的重要组成部分,它们之间既有联系,也有区别。以下是它们的关系和不同之处: 人工智能 (AI) 两个回答 人工智能是一个广义的概念,指的是计算机系统能够执行通常需要人类智能才能完成的任务…

[全网最细数据结构完整版]第七篇:3分钟带你吃透队列

目录 1->队列的概念及结构 2->队列的实现 2.1定义队列基本结构 struct QueueNode 和 struct Queue 2.2队列初始化函数 QueueInit 函数 2.3队列销毁函数 QueueDestroy 函数 2.4队列插入数据函数 QueuePush 函数 2.5判断队列是否为空,空返回true,非空返回false 2.6队列删…

点阵数显驱动IC数显LED驱动芯片VK1651

产品品牌:永嘉微电/VINKA 产品型号:VK1651 封装形式:SOP16 产品年份:新年份 产品简介:VK1651是一种带键盘扫描电路接口的 LED 驱动控制专用芯片,内部集成有数据锁存器、LED 驱动、键盘扫描等电路。SEG脚…

【进阶】java基础之集合(2)数据结构<树>

文章目录 二叉树的内部结构二叉查找树平衡二叉树平衡二叉树的旋转机制 二叉树的内部结构 二叉查找树 二叉查找树,又称二叉排序树或者二叉搜索树 特点: 每一个节点上最多有两个子节点任意节点左子树上的值都小于当前节点任意节点右子树上的值都大于当前节点 二叉…

积分接口被刷爆,全体一个月降薪20%,这个项目我们遗漏了什么?

有一些往事总是会在酒后提起 我问朋友,在工作上有什么事情是到现在还记忆尤新的? 我朋友一个激灵坐起来,点上一支烟,只见烟头亮了4、5下,才见他吐出一口烟来,说道:“那还真有” 起因 刚参加…

AWTK-LINUX-FB实现多点触摸

两周前的一个地图,需要做手势缩放的功能,比较忙就没有发出来,这次抽时间记录一下实现的过程。 AWTK官方有对实现多点触摸做过描述,可惜只有STM32的实现例子,跟Linux的差别还是比较大的,好在tslib有多点触摸…

NRF52832学习笔记(41)——添加串口库libuarte

一、背景 由于板子上不支持硬件流控,在使用 app_uart_fifo 库接收串口大数据时,频繁报 APP_UART_COMMUNICATION_ERROR 错误,多次重新初始化后,串口也不再产生中断了。查看官方论坛后决定使用串口异步库 libuarte。 二、简介 Li…

ORU 的 Open RAN 管理平面 (M 平面)

[TOC](ORU 的 Open RAN 管理平面 (M 平面)) ORU 的 Open RAN 管理平面 (M 平面) https://www.techplayon.com/open-ran-management-plane-m-plane-for-open-radio-unit/ ORU M 平面 在 ORAN 中,设置参数的 O-RU 管理功能是通过 M-Plane 完成的。管理功能包括 O-…

MQ的基础知识

一.什么是MQ 其实就是不同的程序之间的一种的通信方式,通过将消息发送到中间件里面然后中间件就会将这个消息发送给相应的服务进行一个消息的消费,这个时候就会进行一些的业务逻辑的处理,这个方式提高了整个系统的可靠性,拓展性以及灵活性.常见的类型为Aapache Kafaka&#xf…

蓝牙OPP协议详解及Android实现

文章目录 前言一、什么是蓝牙OPP协议?二、OPP协议工作流程1. 设备配对和连接2. 启动 OPP 服务3. 发送对象4. 传输对象5. 传输完成6. 断开连接 三、 Android OPP协议实现1. 启动 OPP 服务器(接收方)2. 发送文件(发送方)…

医学可视化之涟漪图

在医学领域,数据可视化能够帮助我们更直观地理解和分析复杂的信息。涟漪图作为一种独特的可视化工具,具有重要的作用、价值和广泛的使用场景。 一、涟漪图的特点 涟漪图是一种基于地理位置的可视化图表,它通过在地图上显示不同大小或颜色的…

定义宏将整数的二进制的奇数位和偶数位互换位置

假设这个数为n00000000 00000000 00000000 00001101——13 1.思路 1.1 奇数位:00000000 00000000 00000000 00000101 但是怎么获得奇数位呢?——进行按位与运算 不懂如何运算的可以看我主页的详解操作符-CSDN博客,该章详细写了各个操作符如何…

快要结束的大学时光

目录 大一 大一上学期 Java HTMLCSS 大一下学期 HTMLCSSJS JAVA python 大二 大二上学期 Java 原型 前端 大二下学期 前端 数据结构 Android BootStrap JavaWeb ios程序设计 软件测试​编辑 大三 大三上学期 小程序 大三下学期 JavaWeb 整理数据库 大…

高效实现MySQL数据集成的具体案例分享

MySQL数据集成案例分享:1–BI秉心-店铺信息表–store_z–>store 在数据驱动的业务环境中,如何高效、可靠地实现数据集成是每个企业面临的重要挑战。本文将聚焦于一个具体的系统对接集成案例:将MySQL中的店铺信息表store_z的数据集成到另一…

[Docker#3] LXC | 详解安装docker | docker的架构与生态

目录 1.LXC容器操作 安装LXC LXC容器操作步骤 2.理论 LXC 是什么? Docker 是什么 Docker 和虚拟机的区别 Docker 和 JVM 虚拟化的区别 Docker 版本 ⭕Docker 官方网站(建议收藏) Docker 架构 生活案例 Docker 生态 Docker 解决…

CAP相关的分布式技术

目录 一,CAP理论基础 1.1、一致性(Consistency) 1.2、可用性(Availability) 1.3、分区容忍性(Partition Tolerance) 1.4、CAP理论的核心观点 二,如何选C与A 2.1、网络分区情况…

【春秋云镜】CVE-2023-2130

目录 CVE-2023-2130漏洞利用漏洞检测防御措施 靶标介绍:解法一:解法二: CVE-2023-2130 漏洞详细信息 漏洞编号:CVE-2023-2130漏洞名称:SQL注入漏洞受影响的版本:SourceCodester采购订单管理系统1.0影响范…

Code::Blocks 24.10 全中文优化完整版

Code::Blocks(或者叫做 CodeBlocks)是一款开放源代码、跨平台的集成开发环境(IDE),通过配置不同的编程语言编译器,可以用于多种编程语言程序开发。 网上有很多文章介绍 Code::Blocks 的安装,通…