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函数调用。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何调用通义千问大模型API

目录 登录阿里云 大模型服务平台百炼 登录控制台 QWen Long QWen 通义千问开源系列 大语言模型 OpenAI接口兼容 登录阿里云 阿里云-计算,为了无法计算的价值 大模型服务平台百炼 降价信息: 登录控制台 右上角取得API key 创建Key QWen Long qw…

C#的奇技淫巧:利用WinRM来远程操控其他服务器上的进程

前言:有时候远程服务器的进程你想偷偷去围观一下有哪些,或者对一些比较调皮的进程进行封杀,或者对一些自己研发的服务进行远程手动启动或者重启等,又不想打开远程桌面,只想悄咪咪地执行,那也许下面的文章会…

关于解决Qt在安装的时候没有勾选sources组件的方法

关于解决Qt在安装的时候没有勾选sources组件的方法 一、引言 在安装数据库连接到qt的时候发现没有sources文件夹,原来是安装的时候没有勾选sources组件,发现问题后找到了维护qt组件的安装方式,特此记下来 二、分析原因 首先在安装的时候就…

Lookin高效调试iOS App的UI

Lookin是一款iOS开发时常用的调试软件,由腾讯微信读书团队QMUI开发。 它可以查看和修改iOS App里的UI对象的软件,展示App UI图层,类似于Xcode自带的UI Inspector工具,或另一款叫做Reveal的软件。 此外,虽然Lookin主体…

【C++语言】继承:类特性的扩展,重要的类复用!

【C语言】继承,更进一步的复用 ✨精美思维导图奉上继承1. 继承的相关概念:2. 继承的定义:(1)定义格式:(2)访问限定符和继承方式:(3)默认继承方式&…

C++_C++11的学习

1. 统一的列表初始化 1.1{}初始化 在C98 中,标准就已经允许使用花括号 {} 对数组或者结构体元素进行统一的列表初始值设定。而到了C11,标准扩大了用大括号括起的列表 ( 初始化列表 )的使用范围,使其能适用于所有的内…

最大连续1的个数(滑动窗口)

算法原理: 这道题大眼一看是关于翻转多少个0的问题,但是,如果你按照这种思维去做题,肯定不容易。所以我们要换一种思维去做,这种思维不是一下就能想到的,所以想不到也情有可原。 题目是:给定一…

ESP32-C6接入巴法云,Arduino方式

ESP32-C6接入巴法云,Arduino方式 第一、ESP32-C6开发环境搭建第一步:安装arduino IDE 软件第二步:安装esp32库第三:arduino 软件设置 第二:简单AP配网程序第一步:程序下载第二步:程序使用第三步…

linux centos nginx配置浏览器访问后端(tomcat日志)

1、配置nginx访问tomcat日志路径 vim /usr/local/nginx/conf/nginx,conflocation ^~ /logs {autoindex on;autoindex_exact_size on;autoindex_localtime on;alias /home/tomcat/apache-tomcat-9.0.89-1/logs;}###配置讲解### 1、location ^~ /logs { … }: location&#xf…

代码随想录——从前序与中序遍历序列构造二叉树(Leetcode105)

题目链接 递归 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) {* …

构建智能化商场存包柜平台的数据结构设计

随着城市生活节奏的加快,人们对于便利的需求也越来越迫切。在城市中,商场存包柜平台成为了解决人们日常出行中行李存放问题的重要设施。为了更好地管理和运营这些存包柜,智能化商场存包柜平台的数据结构设计显得尤为关键。 一、需求分析与功能…

每日AIGC最新进展(12):在舞蹈视频生成中将节拍与视觉相融合、Text-to-3D综述、通过内容感知形状调整进行 3D 形状增强

Diffusion Models专栏文章汇总:入门与实战 Dance Any Beat: Blending Beats with Visuals in Dance Video Generation https://DabFusion.github.io 本文提出了一种名为DabFusion的新型舞蹈视频生成模型,该模型能够根据给定的静态图像和音乐直接生成舞蹈…

韩顺平0基础学Java——第11天

p234-249 又一个月了,时间过得好快啊,希望支棱起来 可变参数 public int sum(int ... nums){ } 这个nums是数组 细节: 1可变参数可以为0个,或任意个 2可变参数的实参可以为数组 3可变参数的本质就是数组 4可变参数可以和普通…

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

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

基线管理概述

一、基线概念 ①安全基线 ②安全基线与英文排版的基线类似,是一条参考标准线。 ③安全基线表达了最基本需要满足的安全要求。 ④安全基线表达了安全的木桶原理木桶原理:一只木桶盛水的多少,并不取决于桶壁上最高的那块 木块,而恰恰取决于…

如何让大模型更聪明?提升AI智能的关键策略

如何让大模型更聪明?提升AI智能的关键策略 🤖 如何让大模型更聪明?提升AI智能的关键策略摘要引言方向一:算法创新🚀1.1 自监督学习的崛起1.2 强化学习的应用 方向二:数据质量与多样性📊2.1 数据…

大学校园广播“录编播”与IP广播系统技术方案

一、项目概述 1、校园IP网络广播系统概述 大学校园广播系统是学校整个弱电系统中的子系统,它是每个学校不可缺少的基础设施之一,在传递校园文化、传播校园新闻资讯方面发挥着重要的作用。近几年来,虽然视频技术和网络技术在飞速发展&#xf…

VS2022配合Qt与boost.asio实现一个TCP异步通信系统远程操作mysql数据库

上一篇博客我们通过boost.asio搭建了一个简单的异步服务器,但是那是基于命令行的,所有用起来还是相当枯燥的,这次我们配合Qt实现一个简陋的前端页面来控制后端mysql数据库中的表,实现添加密钥的功能(本次博客使用的boost版本是1.8…

AI智能体|手把手教你使用扣子Coze图像流的文生图功能

大家好,我是无界生长。 AI智能体|手把手教你使用扣子Coze图像流的文生图功能本文详细介绍了Coze平台的\x26quot;图像流\x26quot;功能中的\x26quot;文生图\x26quot;节点,包括创建图像流、编排文生图节点、节点参数配置,并通过案例…

Three.js 研究:3、创建一个高科技圆环

打开Alpha混合 修改环形颜色,更改发光的颜色,更改发光的强度为2 更改世界环境灯光