STM32H7系统窗口看门狗 (WWDG)应用方法介绍

目录

概述

1 认识窗口看门狗 (WWDG)

1.1 窗口看门狗定义

1.2 WWDG 主要特性

2  WWDG 功能说明

2.1  WWDG框图

2.2 WWDG 内部信号

2.3 控制递减计数器

2.4 看门狗中断高级特性

2.5  如何设置看门狗超时

3  WWDG 寄存器

3.1 控制寄存器 (WWDG_CR)

3.2  配置寄存器 (WWDG_CFR)

3.3  状态寄存器 (WWDG_SR)

4 使用STM32Cube配置WWDG参数

4.1 使能WWDG

4.2  根据参数计算复位时间

5  WWDG相关的库函数

5.1 初始化函数:HAL_WWDG_Init

5.2 喂狗函数: HAL_WWDG_Refresh

5.3 中断函数: HAL_WWDG_IRQHandler

5.4 中断回调函数:HAL_WWDG_EarlyWakeupCallback


概述

本文详细介绍了STM32H7系统窗口看门狗 (WWDG)的相关知识,包括WWDG的实现原理,其在STM32系统中时钟的关系,寄存器的内容和配置方法等。还使用STM32Cube配置一个简单的Demo来做验证。

1 认识窗口看门狗 (WWDG)

1.1 窗口看门狗定义

系统窗口看门狗 (WWDG) 通常被用来监测,由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障。除非程序在(WWDG_CR) T6 位变成 0 前刷新递减计数器的
值,否则看门狗电路在达到预置的时间周期时,会产生一个复位。

如果在递减计数器达到窗口寄存器值之前刷新控制寄存器(WWDG_CR)中的 7 位递减计数器值,也会产生复位。这意味着必须在限定的时间窗口内刷新计数器。

WWDG 时钟APB 时钟经预分频后提供,通过可配置的时间窗口来检测应用程序非正常的过迟或过早的操作。WWDG 最适合那些要求看门狗在精确计时窗口起作用的应用程序。

1.2 WWDG 主要特性

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

2)复位条件

复位条件说明
1当递减计数器值小于 0x40 时复位(如果看门狗已激活)
2在窗口之外重载递减计数器时复位(如果看门狗已激活)

3)提前唤醒中断 (EWI):当递减计数器等于 0x40 时触发(如果已使能且看门狗已激活)
 

2  WWDG 功能说明

如果激活看门狗( WWDG_CR 寄存器中的 WDGA 位置 1),则当 7 位递减计数器( T[6:0]
位)从 0x40 递减到 0x3F( T6 已清零)时会引发复位。如果软件在重载计数器时,计数器
的值大于窗口寄存器,则会产生复位。

2.1  WWDG框图

 2.2 WWDG 内部信号

2.3 控制递减计数器

递减计数器处于自由运行状态,即使禁止看门狗,递减计数器仍继续递减计数。当使能看门
狗时,必须将 T6 位置 1,以防止立即复位。

T[5:0] 位包含了看门狗产生复位之前的计时数目; 复位前的延时时间在一个最小值和一个最
大值之间变化,这是因为写入 WWDG_CR 寄存器时,预分频器的状态是未知的。

配置寄存器 (WWDG_CFR) 包含窗口的上限:为防止发生复位,当递减计数器的值低于窗口寄存器值且大于 0x3F 时必须重载。 

注: 可使用 T6 位产生软件复位(将 WDGA 位置 1 并将 T6 位清零)。

2.4 看门狗中断高级特性

如果在产生实际复位之前必须执行特定的安全操作或数据记录,则可使用提前唤醒中断
(EWI)。通过设置 WWDG_CFR 寄存器中的 EWI 位使能 EWI 中断

当递减计数器的值为0x40 时,将生成 EWI 中断。在复位器件之前,可以使用相应的中断服务程序 (ISR) 来触发特定操作(例如通信或数据记录)。

在某些应用中,可以使用 EWI 中断来管理软件系统检查和/或系统恢复/功能退化,而不会生
成 WWDG 复位
。在这种情况下,相应的中断服务程序 (ISR) 可用来重载 WWDG 计数器以
避免 WWDG 复位,然后再触发所需操作。

通过将 0 写入 WWDG_SR 寄存器中的 EWIF 位来清除 EWI 中断。

注: 当由于在更高优先级任务中有系统锁定而无法使用 EWI 中断时,最终会产生 WWDG 复位
 

2.5  如何设置看门狗超时

超时值的计算方法:

3  WWDG 寄存器

3.1 控制寄存器 (WWDG_CR)

位 7 WDGA:

激活位 (Activation bit),此位由软件置 1,只有复位后才由硬件清零。当 WDGA = 1 时,看门狗可产生复位。
0:禁止看门狗
1:使能看门狗

位 6:0 T[6:0]:

7 位计数器 (7-bit counter)( MSB 到 LSB)这些位用来存储看门狗计数器的值,每隔 (4096 x 2^{WDGTB[2:0]}) PCLK 个周期递减一次。当它从0x40 递减到 0x3F( T6 清零)时会产生复位。

3.2  配置寄存器 (WWDG_CFR)

偏移地址: 0x04
复位值: 0x0000 007F

位 31:14 保留,必须保持复位值。

位 13:11 WDGTB[2:0]: 定时器时基 (Timer base)
可按如下方式修改预分频器的时基:
000: CK 计数器时钟 (PCLK div 4096) 分频器 1
001: CK 计数器时钟 (PCLK div 4096) 分频器 2
010: CK 计数器时钟 (PCLK div 4096) 分频器 4
011: CK 计数器时钟 (PCLK div 4096) 分频器 8
100: CK 计数器时钟 (PCLK div 4096) 分频器 16
101: CK 计数器时钟 (PCLK div 4096) 分频器 32
110: CK 计数器时钟 (PCLK div 4096) 分频器 64
111: CK 计数器时钟 (PCLK div 4096) 分频器 128

位 10 保留,必须保持复位值。

位 9 EWI: 提前唤醒中断 (Early wakeup interrupt)置 1 后,只要计数器值达到 0x40 就会产生中断。此中断只有在复位后才由硬件清零。

位 8:7 保留,必须保持复位值。

位 6:0 W[6:0]: 7 位窗口值 (7-bit window value),这些位包含用于与递减计数器进行比较的窗口值

3.3  状态寄存器 (WWDG_SR)

偏移地址: 0x08
复位值: 0x0000 0000
位 31:1 保留,必须保持复位值。

位 0 EWIF: 提前唤醒中断标志 (Early wakeup interrupt flag)当计数器值达到 0x40 时此位由硬件置 1。它必须由软件通过写入 0 来清零。写入 1 不起作用。如果不使能中断,此位也会被置 1。
 

4 使用STM32Cube配置WWDG参数

4.1 使能WWDG

配置参数:

 使能中断:

 pclk对应的APB总线时钟:

4.2  根据参数计算复位时间

根据超时值计算公式可得:

参数名称数值说明
t(PCLK)1/100 000APB 时钟周期,以 ms 为测量单位: 100M
WDGTB[2:0]1定时器时基
T[5:0]647 位计数器 (7-bit counter)( MSB 到 LSB)

通过以上参数计算t( WWDG)  = 1/100 000 x 4096x2 x 65 = 5.3248 ms

5  WWDG相关的库函数

5.1 初始化函数:HAL_WWDG_Init

函数原型:

HAL_StatusTypeDef     HAL_WWDG_Init(WWDG_HandleTypeDef *hwwdg);

使用Demo:

/* WWDG1 init function */
void MX_WWDG1_Init(void)
{/* USER CODE BEGIN WWDG1_Init 0 *//* USER CODE END WWDG1_Init 0 *//* USER CODE BEGIN WWDG1_Init 1 *//* USER CODE END WWDG1_Init 1 */hwwdg1.Instance = WWDG1;hwwdg1.Init.Prescaler = WWDG_PRESCALER_1;hwwdg1.Init.Window = 64;hwwdg1.Init.Counter = 64;hwwdg1.Init.EWIMode = WWDG_EWI_DISABLE;if (HAL_WWDG_Init(&hwwdg1) != HAL_OK){Error_Handler();}/* USER CODE BEGIN WWDG1_Init 2 *//* USER CODE END WWDG1_Init 2 */}

5.2 喂狗函数: HAL_WWDG_Refresh

函数原型:

HAL_StatusTypeDef     HAL_WWDG_Refresh(WWDG_HandleTypeDef *hwwdg);

该函数主要用于重置T[5:0]的值,根据第四小节中配置的参数,该值必须在计数到达t( WWDG) 之前refresh。重置方法就是调用该函数。

5.3 中断函数: HAL_WWDG_IRQHandler

函数原型:

void HAL_WWDG_IRQHandler(WWDG_HandleTypeDef *hwwdg)

该函数主要用于清除中断标志位

5.4 中断回调函数:HAL_WWDG_EarlyWakeupCallback

函数原型:

void  HAL_WWDG_EarlyWakeupCallback(WWDG_HandleTypeDef *hwwdg);

当Wakeup中断发生后,该函数被HAL_WWDG_IRQHandler函数调用。

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

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

相关文章

MicroLED:苹果对知识产权的影响

Yole的洞察揭示,MicroLED IP在经历了七年的爆炸式增长后,已然屹立于行业之巅。苹果公司,作为微LED领域的先行者,早在2014年便敏锐地捕捉到Luxvue这家初创公司的潜力,将其纳入麾下,引发了业界的广泛关注。然…

【Springboot系列】SpringBoot 中的日志如何工作的,看完这一篇就够了

文章目录 强烈推荐引言Spring Boot 中的日志是怎么工作日志框架选择配置文件日志级别自定义日志配置集成第三方日志库实时监控和日志管理 Log4j2工作原理分析1. 核心组件2. 配置文件3. Logger的继承和层次结构4. 日志事件处理流程5. 异步日志 总结强烈推荐专栏集锦写在最后 强烈…

每日练习之矩阵乘法——斐波那契公约数

斐波那契公约数 题目描述 运行代码 #include <iostream> #include <vector> using namespace std; const long long mod 1000000007;// 矩阵乘法函数 vector<vector<long long>> matrixMultiply(const vector<vector<long long>>& …

移动端特效

一&#xff0c;触屏事件 1.触屏touch事件 2.触摸事件对象 如果侦听的是一个DOM元素&#xff0c;他俩是一样的 如果手指离开了&#xff0c;不能侦听到前两者&#xff0c;能侦听到第三个 我们一般都是触摸元素&#xff0c;所以一般都是第二个比较常用 第一个&#xff1a;屏幕…

Leetcode 力扣92. 反转链表 II (抖音号:708231408)

给你单链表的头指针 head 和两个整数 left 和 right &#xff0c;其中 left < right 。请你反转从位置 left 到位置 right 的链表节点&#xff0c;返回 反转后的链表 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], left 2, right 4 输出&#xff1a;[1,4,3,2…

简单的基于信号处理的心电信号ECG特征波分割方法(MATLAB)

正常的心电图中&#xff0c;每个心跳周期内包含三个主要的特征波&#xff1a;&#xff30;波、QRS波和&#xff34;波&#xff0c;如下图所示。心电特征波能够反映心脏的生理状态信息&#xff0c;通过对其形状、幅值和持续时间的分析&#xff0c;可以用来辅助诊断心血管疾病。对…

vs2019 c++20 规范的 STL 库的智能指针 shared、unique 、weak 及 make_** 函数的源码注释汇总,和几个结论

智能指针的源码都在 《memory》 头文件中。因为头文件太长&#xff0c;再者本次整理是基于以前的零散的模板分析。故相当于抽取了该头文件中关于智能指针的源码进行分析&#xff0c;注释。 &#xff08;1 探讨一&#xff09;当独占指针指向数组时&#xff0c;其默认的删除器是…

mysql表约束基础 【default | 主键 | 外键 | 唯一键】

博客主页&#xff1a;花果山~程序猿-CSDN博客 文章分栏&#xff1a;MySQL之旅_花果山~程序猿的博客-CSDN博客 关注我一起学习&#xff0c;一起进步&#xff0c;一起探索编程的无限可能吧&#xff01;让我们一起努力&#xff0c;一起成长&#xff01; 目录 一&#xff0c;表的约…

vue3快速入门(局部使用)

目录 前置知识JavaScript-导入导出 入门操作 变量渲染页面 局部使用vue的实现步骤 vue指令 v-for v-bind v-if v-show v-on v-model 生命周期 前置知识JavaScript-导入导出 正常情况在html导入js文件是全部导入&#xff0c;这样会导致性能上的损失 。 JS提供的…

STM32F1之OV7725摄像头·SCCB总线代码编写附带源码详解

STM32F1之OV7725摄像头-CSDN博客 STM32F1之OV7725摄像头像素数据输出时序、FIFO 读写时序以及摄像头的驱动原理详解-CSDN博客 目录 1. 硬件设计 1.1 SCCB 控制相关 1.2 VGA 时序相关 1.3 FIFO 相关 1.4 XCLK 信号 2. 代码设计 2.1 SCCB总线软件实现 2.1.1 宏定…

AI图书推荐:ChatGPT解码—人工智能增强生活指南

《ChatGPT解码—人工智能增强生活指南》&#xff08;ChatGPT Decoded. A Beginners Guide to AI-Enhanced Living &#xff09;是一本由 大卫维恩斯&#xff08;David Wiens &#xff09;所著的书籍&#xff0c;旨在帮助读者了解并有效利用GPT-4语言模型这一强大工具来提升日常…

springmvc Web上下文初始化

Web上下文初始化 web上下文与SerlvetContext的生命周期应该是相同的&#xff0c;springmvc中的web上下文初始化是由ContextLoaderListener来启动的 web上下文初始化流程 在web.xml中配置ContextLoaderListener <listener> <listener-class>org.springframework.…

ncnn 优化量化

问题&#xff1a;发现推理时间过长&#xff0c;需要优化 当前正在做人脸检测部署&#xff0c;发现检测速度有点吓人&#xff0c;以下监测的时间 gpu&#xff1a; cpu&#xff1a; gpu推理大概整体时间200多毫秒&#xff0c;cpu推理时间300多毫秒&#xff0c;这里暂时没去考虑…

Oracle实践|内置函数之字符串函数

&#x1f4eb; 作者简介&#xff1a;「六月暴雪飞梨花」&#xff0c;专注于研究Java&#xff0c;就职于科技型公司后端工程师 &#x1f3c6; 近期荣誉&#xff1a;华为云云享专家、阿里云专家博主、腾讯云优秀创作者、ACDU成员 &#x1f525; 三连支持&#xff1a;欢迎 ❤️关注…

C++模板——函数模板和类模板

目录 泛型编程 函数模板 函数模板概念 函数模板的定义和语法 函数模板的工作原理 函数模板的实例化 隐式实例化 显示实例化 函数模板的匹配原则 类模板 类模板的定义格式 类模板的实例化 泛型编程 什么是泛型编程&#xff1f; 泛型编程&#xff08;Generic Pr…

【Linux-并发与竞争】

Linux-并发与竞争 ■ 原子操作■ 原子操作简介■ 原子整形操作 API 函数■ 原子位操作 API 函数■ 示例一&#xff1a;原子操作实验&#xff0c;使用原子变量来实现对实现设备的互斥访问 ■ 自旋锁■ 自旋锁 API 函数■ 死锁■ 最好的解决死锁方法就是获取锁之前关闭本地中断&a…

LeetCode 124 —— 二叉树中的最大路径和

阅读目录 1. 题目2. 解题思路3. 代码实现 1. 题目 2. 解题思路 二叉树的问题首先我们要想想是否能用递归来解决&#xff0c;本题也不例外&#xff0c;而递归的关键是找到子问题。 我们首先来看看一棵最简单的树&#xff0c;也就是示例 1。这样的一棵树总共有六条路径&#xf…

docker如何拉取nginx最新镜像并运行

要拉取Docker Hub上的最新Nginx镜像&#xff0c;您可以使用以下命令&#xff1a; docker pull nginx 这个命令会从Docker Hub下载最新版本的Nginx镜像。如果您想要拉取特定版本的Nginx镜像&#xff0c;可以指定版本号&#xff0c;例如&#xff1a; docker pull nginx:1.18.0 拉…

详细分析tcping的基本知识以及用法

目录 前言1. 安装配置2. 基本知识3. Demo 前言 针对ping的基本知识推荐阅读&#xff1a;详细分析ping的基本知识以及常见网络故障的诊断&#xff08;图文解析&#xff09; 1. 安装配置 针对Window的下载如下&#xff1a; 安装路径&#xff1a;tcping官网 下载tcping.exe&a…

《微服务王国的守护者:Spring Cloud Dubbo的奇幻冒险》

5. 经典问题与解决方案 5.3 服务追踪与链路监控 在微服务架构的广袤宇宙中&#xff0c;服务间的调用关系错综复杂&#xff0c;如同一张庞大的星系网络。当一个请求穿越这个星系&#xff0c;经过多个服务节点时&#xff0c;如何追踪它的路径&#xff0c;如何监控整个链路的健康…