STM32H7独立看门狗 (IWDG)的应用方法介绍

目录

概述

1 认识独立看门狗 (IWDG)

1.1 定义独立看门狗 (IWDG)

1.2 IWDG 主要特性

2 IWDG 功能说明

2.1 IWDG 框图

2.2 IWDG 内部信号

2.3  窗口选项

2.3.1 Enable WIN IWDG

2.3.2 Disable WIN IWDG

2.4 硬件看门狗

2.5 低功耗冻结

2.6 停止和待机模式下的行为

2.7 寄存器访问保护

2.8 调试模式

3 IWDG 寄存器

3.1 键寄存器 (IWDG_KR)

3.2 预分频器寄存器 (IWDG_PR)

3.3 重载寄存器 (IWDG_RLR)

3.4 状态寄存器 (IWDG_SR)

3.5 窗口寄存器 (IWDG_WINR)

4 STM32Cube配置IWDG

4.1 配置IWDG

4.2 理解配置参数

5 IWDG库函数

5.1 初始化函数: HAL_IWDG_Init

5.2 重载计数: HAL_IWDG_Refresh


概述

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

1 认识独立看门狗 (IWDG)

1.1 定义独立看门狗 (IWDG)

此器件具有一个嵌入式看门狗外设,具有安全性高、定时准确及使用灵活的优点。此独立看门狗外设可检测并解决由软件错误导致的故障,并在计数器达到给定的超时值时触发系统复位。

独立看门狗 (IWDG) 由其专用低速时钟 (LSI) 驱动,因此即便在主时钟发生故障时仍然保持工作状态。

IWDG 最适合应用于需要看门狗作为一个在主程序之外,能够完全独立工作,并且对时间精度要求较低的应用。

1.2 IWDG 主要特性

1)自由运行递减计数器

2)时钟由独立 RC 振荡器提供(可在待机和停止模式下运行)

3)复位条件

     -  当递减计数器值小于 0x000 时复位(如果看门狗已激活)

     - 在窗口之外重载递减计数器时复位(如果看门狗已激活)

2 IWDG 功能说明

2.1 IWDG 框图

1) 通过向键寄存器 (IWDG_KR) 中写入值 0x0000 CCCC 来启动独立看门狗时

2) 计数器开始从复位值 0xFFF 递减计数。当计数器计数到终值 (0x000) 时会产生一个复位信号 (IWDG 复位)。

3)任何时候将键值 0x0000 AAAA 写到键寄存器 (IWDG_KR) 中, IWDG_RLR 的值就会被重载到计数器,从而避免产生看门狗复位。

2.2 IWDG 内部信号

2.3  窗口选项

1)通过在窗口寄存器 (IWDG_WINR) 中设置合适的窗口, IWDG 也可以用作窗口看门狗。

2)当计数器值大于窗口寄存器 (IWDG_WINR) 中存储的值时,如果执行重载操作,则会产生复位。

3)窗口寄存器 (IWDG_WINR) 的默认值0x0000 0FFF,因此,如果不更新此默认值,将禁止窗口选项

4)窗口值一经更改,便执行重载操作,以便将递减计数器复位为重载寄存器 (IWDG_RLR)值,并方便计算周期数以生成下一次重载。

2.3.1 Enable WIN IWDG

使能窗口选项时配置 IWDG方法:

1. 通过在键寄存器 (IWDG_KR) 中写入 0x0000 CCCC 来使能 IWDG。

2. 通过在键寄存器 (IWDG_KR) 中写入 0x0000 5555 来使能寄存器访问。

3. 通过将预分频器寄存器 (IWDG_PR) 编程为 0~7 中的数值来配置 IWDG 预分频器。

4. 对重载寄存器 (IWDG_RLR) 进行写操作。

5. 等待寄存器更新 (IWDG_SR = 0x0000 0000)。

6. 对窗口寄存器 (IWDG_WINR) 进行写操作。这会自动刷新重载寄存器 (IWDG_RLR) 中的
计数器值。
 

2.3.2 Disable WIN IWDG

不使用窗口选项时,可按以下步骤配置 IWDG:

1. 通过在键寄存器 (IWDG_KR) 中写入 0x0000 CCCC 来使能 IWDG。

2. 通过在键寄存器 (IWDG_KR) 中写入 0x0000 5555 来使能寄存器访问。

3. 通过将预分频器寄存器 (IWDG_PR) 编程为 0~7 中的数值来配置预分频器。

4. 对重载寄存器 (IWDG_RLR) 进行写操作。

5. 等待寄存器更新 (IWDG_SR = 0x0000 0000)。

6. 刷新计数器值为 IWDG_RLR 的值 (IWDG_KR = 0x0000 AAAA)。

2.4 硬件看门狗

1)如果通过器件选项位使能“硬件看门狗”功能,上电时将自动使能看门狗;

2)如果在计数器计数结束前,若软件没有向键寄存器 (IWDG_KR) 写入相应的值,或者在窗口内部重载了递减计数器,则系统会产生复位。

2.5 低功耗冻结

根据 IWDG_FZ_STOP 和 IWDG_FZ_STBY 选项配置, IWDG 可分别在停止模式和待机模式期间继续计数或停止计数。如果停止模式或待机模式期间 IWDG 保持运行,它可从此模式唤醒器件。

2.6 停止和待机模式下的行为

一旦运行, IWDG 便无法停止。

2.7 寄存器访问保护

预分频器寄存器 (IWDG_PR)、 重载寄存器 (IWDG_RLR) 和窗口寄存器 (IWDG_WINR) 寄存器具有写访问保护。若要对其进行修改,用户必须首先对键寄存器 (IWDG_KR) 写入代码0x0000 5555。 而写入其他值则会破坏该序列,从而使寄存器访问保护再次生效。这表示重载操作(即写入 0x0000 AAAA)也会启动写保护功能。

状态寄存器指示预分频值、递减计数器重载值或窗口值是否正在被更新。

2.8 调试模式

当微控制器进入调试模式时(内核停止), IWDG 计数器会根据 DBG 模块中DBG_IWDG_STOP 配置位选择继续正常工作或者停止工作。
 

3 IWDG 寄存器

3.1 键寄存器 (IWDG_KR)

偏移地址: 0x00
复位值: 0x0000 0000(待机模式时复位)

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

位 15:0 KEY[15:0]: 键值 (Key value)(只能写,读为 0x0000)

1)必须每隔一段时间便通过软件对这些位写入键值 0xAAAA,否则当计数器计数到 0 时,看门狗
会产生复位。

2)写入键值 0x5555 : 可使能对 IWDG_PR、 IWDG_RLR 和 IWDG_WINR 寄存器的访问
3)写入键值 0xCCCC : 可启动看门狗(选中硬件看门狗选项的情况除外)

3.2 预分频器寄存器 (IWDG_PR)

偏移地址: 0x04
复位值: 0x0000 0000

位 31:3 保留,必须保持复位值。
位 2:0 PR[2:0]: 预分频系数 (Prescaler divider)
这些位受写访问保护:寄存器访问保护。通过软件设置这些位来选择计数器时钟的预分频因子。若要更改预分频器的分频系数, 状态寄存器 (IWDG_SR) 的 PVU 位必须为 0。
000: 4 分频
001: 8 分频
010: 16 分频
011: 32 分频
100: 64 分频
101: 128 分频
110: 256 分频
111: 256 分频

注: 读取该寄存器会返回 VDD 电压域的预分频器值。如果正在对该寄存器执行写操作,则读取的值可能不是最新的/有效的。因此,只有在状态寄存器 (IWDG_SR) 中的 PVU 位为 0时,从寄存器读取的值才有效。

3.3 重载寄存器 (IWDG_RLR)

偏移地址: 0x08
复位值: 0x0000 0FFF(待机模式时复位)

位 31:12 保留,必须保持复位值。
位 11:0 RL[11:0]:看门狗计数器重载值 (Watchdog counter reload value)

这些位受写访问保护,请参见寄存器访问保护。

这个值由软件设置,每次对键寄存器 (IWDG_KR)
写入值 0xAAAA 时,这个值就会重装载到看门狗计数器中。之后,看门狗计数器便从该装载的
值开始递减计数。超时周期由该值和时钟预分频器共同决定。有关超时信息,请参见数据手册。
若要更改重载值, 状态寄存器 (IWDG_SR) 中的 RVU 位必须为 0。

注: 读取该寄存器会返回 VDD 电压域的重载值。如果正在对该寄存器执行写操作,则读取的值可能不是最新的/ 有效的。因此,只有在状态寄存器 (IWDG_SR) 中的 RVU 位为 0时,从寄存器读取的值才有效。

3.4 状态寄存器 (IWDG_SR)

偏移地址: 0x0C
复位值: 0x0000 0000(待机模式时不复位)

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

位 2 WVU: 看门狗计数器窗口值更新 (Watchdog counter window value update)
可通过硬件将该位置 1 以指示窗口值正在更新。当在 VDD 电压域下完成重载值更新操作后(需
要多达 5 个 RC 40 kHz 周期),会通过硬件将该位复位。窗口值只有在 WVU 位为 0 时才可更新。此位只有在通用“窗口” = 1 时才生成

位 1 RVU: 看门狗计数器重载值更新 (Watchdog counter reload value update)
可通过硬件将该位置 1 以指示重载值正在更新。当在 VDD 电压域下完成重载值更新操作后(需
要多达 5 个 RC 40 kHz 周期),会通过硬件将该位复位。重载值只有在 RVU 位为 0 时才可更新。

位 0 PVU: 看门狗预分频器值更新 (Watchdog prescaler value update)
可通过硬件将该位置 1 以指示预分频器值正在更新。当在 VDD 电压域下完成预分频器值更新操作后(需要多达 5 个 RC 40 kHz 周期),会通过硬件将该位复位。预分频器值只有在 PVU 位为 0 时才可更新。

3.5 窗口寄存器 (IWDG_WINR)

偏移地址: 0x10
复位值: 0x0000 0FFF(待机模式时复位)

位 31:12 保留,必须保持复位值。
位 11:0 WIN[11:0]: 看门狗计数器窗口值 (Watchdog counter window value)

这些位受写访问保护,它们包含用于与递减计数器进行比较的窗口值上限。
为防止发生复位,当递减计数器的值低于窗口寄存器值且大于 0x0 时必须重载。若要更改重载值, 状态寄存器 (IWDG_SR) 中的 WVU 位必须为 0。

4 STM32Cube配置IWDG

4.1 配置IWDG

使能IWDG

配置IWDG工作时钟

4.2 理解配置参数

使用STM32Cube配置的参数内容如下:

IWDG使用的系统时钟为 fclk= 32K Hz,分频系数为 prescaler = 4

窗口复位时钟周期为:

Tc = 4/32 000    * 4095    = 511.875 ms

5 IWDG库函数

5.1 初始化函数: HAL_IWDG_Init

函数原型:

HAL_StatusTypeDef HAL_IWDG_Init(IWDG_HandleTypeDef *hiwdg)

使用Demo:

/* IWDG1 init function */
void MX_IWDG1_Init(void)
{/* USER CODE BEGIN IWDG1_Init 0 *//* USER CODE END IWDG1_Init 0 *//* USER CODE BEGIN IWDG1_Init 1 *//* USER CODE END IWDG1_Init 1 */hiwdg1.Instance = IWDG1;hiwdg1.Init.Prescaler = IWDG_PRESCALER_4;hiwdg1.Init.Window = 4095;hiwdg1.Init.Reload = 4095;if (HAL_IWDG_Init(&hiwdg1) != HAL_OK){Error_Handler();}/* USER CODE BEGIN IWDG1_Init 2 *//* USER CODE END IWDG1_Init 2 */}

5.2 重载计数: HAL_IWDG_Refresh

函数原型:

HAL_StatusTypeDef HAL_IWDG_Refresh(IWDG_HandleTypeDef *hiwdg)

在4.2节中,通过使用STM32Cube配置的参数算的,一个最大复位的时间为:511.875 ms,如果该时间到了之后,没有调用 HAL_IWDG_Refresh()函数,此时MCU将复位

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

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

相关文章

网工学习云计算HCIE感受如何?

作为一名网工,我经常会在各种网络论坛里查询搜索一些网络技术资料,以及跟论坛里的网友交流讨论平时在工作、学习中遇到的问题、故障,因此也经常能在论坛的首页看到誉天的宣传信息。机缘巧合之下关注了誉天的B站号,自从关注了誉天的…

初级银行从业资格证知识点(二)

系统内联行清算包括: 全国联行往来、分行辖内往来、支行辖内往来 普通支票既可以支取现金也可以转账;划线支票只能转账不能取现。 进出口业务中采用的结算方式: 汇款、托收、信用证 银行常见的清算模式: 全额清算、净额批量清算、…

实现像 creat-astro 一样在终端中实现动态输出内容

新工具,可以动态输出一些文字,支持盒子输出、动物输出、emoji输出等,也可以完全自定义 可以参考地址:https://github.com/winchesHe/dynamic-log 演示:

【VUE】moment.js 时间日期格式化工具

在 JavaScript 中解析、校验、操作、显示日期和时间 官方中文文档:Moment.js 中文网 1.安装 npm install moment --save # npm yarn add moment # Yarn 2.全局引入 //main.js import moment from moment; // 导入文件 Vue.prototype.$moment mome…

(十七)JS篇——小题

1、说说undefind和null的区别,并举例说明如何让一个对象的属性变为null。 在javascript中undefnd 和null都表示空值。undefind指变量已经声明未赋值,或者变量定义的值就是undefind。例如,let a; console.log(a); // 输出:undefin…

谈谈对“数字化转型”的本质认知

我之前在多家咨询公司与软件公司做过多个大型企业数字化项目,也在甲方企业推动数字化转型,做出了数字化最佳实践案例。 下面我想从一个客观角度来真正意义上的描述数字化及数字化转型。 我相信这篇文章能给做数字化的你们带来极大的收获,我…

【代码管理】Git删除仓库中的大文件压缩仓库大小

Git 仓库中有时会不小心加入了一些大文件,例如模型文件,视频文件 模型文件有可能以 .weights 结尾,或者 .onnx 结尾等等 视频文件有可能以 .avi 结尾,或者 .mp4 结尾 大文件如果一直在仓库中,仓库体积会非常大&#xf…

异常处理 android.os.NetworkOnMainThreadException

android.os.NetworkOnMainThreadException 是一个在 Android 开发中常见的异常,它发生在你的应用尝试在主线程上进行网络操作时。从 Android 6.0 (API level 23) 开始,默认情况下,应用程序的主线程(UI线程)不允许执行网…

yolov8操作步骤

1、https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/(下载) 2、搜py38 Miniconda3-py38_22.11.1-1-Windows-x86_64.exe 52.5 MiB 2022-12-23 07:57 3、安装C:\Users\Administrator\miniconda3 4、conda环境安装 命令:conda c…

了解血糖对身体的危害,掌握三个关键数值,预防并发症。

糖尿病患者的血糖控制至关重要,因为长期的血糖异常会对身体造成各种损害,甚至引发严重的并发症。记住这三个数值。 第一个就是空腹血糖,大于13.9,就会有大量的脂肪分解成酮体,酮体在体内积累过多,可能引发酮…

第55篇:创建Nios II工程之Hello_World<一>

Q:本期我们开始介绍创建Platform Designer系统,并设计基于Nios II Processor的Hello_world工程。 A:设计流程和实验原理:需要用到的IP组件有Clock Source、Nios II Processor、On-Chip Memory、JTAG UART和System ID外设。Nios I…

内网穿透下的 wordpress 地址冲突问题与 https 下的后台登陆问题

内网穿透下的 wordpress 地址冲突问题与 https 下的后台登陆问题 内网穿透下的地址冲突https 登录管理后台总结 同步发布在个人笔记内网穿透下的 wordpress 地址冲突问题与 https 下的后台登陆问题 笔记记录解决两个 wordpress 相关问题 如果我们使用内网穿透把本地的 wordpre…

机器学习理论基础—支持向量机的推导(一)

机器学习理论基础—支持向量机的推导 算法原理 SVM:从几何角度,对于线性可分数据集,支持向量机就是找距离正负样本都最远的超平面,相比于感知机,其解是唯一的,且不偏不倚,泛化性能更好。 超平面 n维空间…

浙江政务服务网(含单点登录、mgop、zwlog埋点)对接流程

首先由业主单位在IRS平台上注册申请应用,等审批通过后,会给开发商提供开发商账号,使用开发商账号登录IRS平台,就可以进行应用的接口申请和部署了。 一、API接口注册 在IRS平台API管理界面中,新建API,设置…

yolov5 C3改进|深度可分离卷积轻量化主干

一、深度可分离卷积代码 import torch import torch.nn as nnclass DP_Conv(nn.Module):def __init__(self, c1, c2, k1, s1, pNone, g1, actTrue): # ch_in, ch_out, kernel, stride, padding, groupssuper(DP_Conv, self).__init__()self.conv nn.Conv2d(c1, c1, kernel_s…

速度进来!看看这两年热门的MongoDB数据库!

速度进来!看看这两年热门的MongoDB数据库! MongoDB是一个基于分布式文件存储的开源NoSQL数据库,它采用了文档型数据模型,可以存储比较复杂的数据类型,如数组、嵌套文档等。MongoDB具有高性能、高可用性、自动扩展等特…

百篇博客 · 千里之行

时光荏苒流逝,白驹匆匆过隙,不知不觉间,Damon小智已经在CSDN上记录了第一百多篇文章。恰逢128天创作纪念日的此刻,我感慨良多,这百余篇博客不仅是我的创作历程,更见证了我在这五年技术生涯中走过心路历程。…

算法学习001-圆桌问题 中小学算法思维学习 信奥算法解析 c++实现

目录 算法学习001-圆桌问题 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 七、推荐资料 算法学习001-圆桌问题 一、题目要求 1、编程实现 圆桌边围坐着2n个人,其中n个人是好人&#xff0c…

GitLab 卸载步骤 - 完全卸载

说明 本文介绍一下 gitlab 服务器的卸载步骤。 服务器 : Centos7。停止服务 gitlab-ctl stop卸载 rpm 软件 rpm -e gitlab-ce 查看进程 ps -ef | grep gitlab 干掉第一个 runsvdir -P /opt/gitlab/service log 进程删除 gitlab 残余的文件 find / -name *git…

启明云端新品WT99C262-SG LoRa开发板,搭配WT32-ETH0X实现LoRa/WiFi/蓝牙转以太网

WT99C262-SG系列开发板是启明云端推出的一款基于WTLRC262-SG系列模组的开发板。板上搭载的模组支持Wi-FiBLELoRa功能,且模组大部分管脚均已引出至两侧排针,开发人员可根据实际需求,通过跳线连接多种外围设备,也可将开发板插在面包…