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 演示:

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

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

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

糖尿病患者的血糖控制至关重要,因为长期的血糖异常会对身体造成各种损害,甚至引发严重的并发症。记住这三个数值。 第一个就是空腹血糖,大于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维空间…

百篇博客 · 千里之行

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

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

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

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

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

第27天:安全开发-PHP应用TP框架路由访问对象操作内置过滤绕过核心漏洞

第二十七天 一、TP框架-开发-路由访问&数据库&文件上传&MVC模型 1.TP框架-开发-配置架构&路由&MVC模型 参考:https://www.kancloud.cn/manual/thinkphp5_1 配置架构-导入使用路由访问-URL访问数据库操作-应用对象文件上传操作-应用对象前端页…

web-traffic-generator:一款功能强大的HTTP和HTTPs流量混淆工具

关于web-traffic-generator web-traffic-generator是一款功能强大的HTTP和HTTPs流量混淆工具,该工具基于纯Python开发,可以帮助广大研究人员在HTTP或HTTPs网络流量中提添加噪声,以此来实现流量混淆的目的。 本质上来说,web-traff…

Linux编译和NXP官方系统移植

文章目录 一、Linux安装环境配置二、Linux编译流程三、单个.dtb文件编译方法1.修改顶层makefile2.编译设备树文件3.验证 四、NXP官方Linux系统移植1.将NXP官方Linux系统导入到Ubuntu系统中2.解压系统3.编译系统4.验证5.在NXP官方系统中添加自己的板子 五、 CPU 主频和网络驱动修…

C++ | Leetcode C++题解之第49题字母异位词分组

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<vector<string>> groupAnagrams(vector<string>& strs) {// 自定义对 array<int, 26> 类型的哈希函数auto arrayHash [fn hash<int>{}] (const array<int, 26>&…

对浅拷贝的理解

问题背景 我之前一直以为浅拷贝出来的新对象和旧对象的引用地址是相同的&#xff0c;但是通过Object和发现浅拷贝的新对象和旧对象的引用地址不同&#xff01;&#xff01; const obj1 { name: "Alice", test: { age: 12 } };const obj4 Object.assign({}, obj1);…

2、选择什么样的机器人本体

如果说世界是物质的&#xff0c;那么应该先制造出机器人的本体&#xff0c;再让她产生灵魂。如果是精神的呢&#xff0c;世界是无中生有的呢&#xff0c;那就先在仿真中研究算法吧。 而我比较崇尚初中哲学的一句话&#xff0c;世界是物质的&#xff0c;物质是运动的&am…

【Vue】自定义事件实现组件之间的通信(案例讲解)

一、前言 这是部分哔哩哔哩上跟着一个博主【遇见狂神说】学习的&#xff0c;当然自己也是才开始学习的vue&#xff0c;在学到这个Vue的自定义事件的时候&#xff0c;虽然知识点很绕&#xff0c;但是在理解后又觉得很意思&#xff0c;觉得Vue真的很强大。这里博主将自己学习到的…

解释PostgreSQL中的MVCC(多版本并发控制)机制是如何工作的?

文章目录 MVCC的工作原理1. 数据行版本化2. 事务ID和可见性3. 清理旧版本 解决方案&#xff1a;MVCC的优势1. 高并发性2. 避免锁竞争3. 一致性视图 示例代码 PostgreSQL中的MVCC&#xff08;多版本并发控制&#xff09;机制是一种在数据库管理系统中实现事务隔离级别的方法&…

vue中的mixin(局部混入、全局混入)

一、mixin是什么 Mixin是面向对象程序设计语言中的类&#xff0c;提供了方法的实现。其他类可以访问mixin类的方法而不必成为其子类&#xff1b;Mixin类通常作为功能模块使用&#xff0c;在需要该功能时“混入”&#xff0c;有利于代码复用又避免了多继承的复杂 Vue中的mixin…

如何远程访问路由器?

远程访问路由器是一种方便的技术&#xff0c;使用户可以远程操作和配置他们的网络设备。无论用户身在何处&#xff0c;只要有互联网连接&#xff0c;就可以远程访问家庭或办公室的路由器。在这篇文章中&#xff0c;我将介绍远程访问路由器的优势以及一种名为【天联】的组网产品…