【STM32】基础知识 第十四课 看门狗 IWDG 深入理解与应用

news2024/11/19 23:26:03

【STM32】基础知识 第十四课 看门狗 IWDG 深入理解与应用

  • 概述
  • 什么是独立看门狗 (IWDG)
  • 独立看门狗工作原理
  • 键寄存器
    • 状态寄存器 (IWDG_SR)
    • 寄存器配置操作步骤
  • 案例
  • 总结

概述

STM32 系列单片机具有强大的内置功能, 其中之一就是独立看门口 (IWDG). 看门狗定时器是一种重要的硬件设备, 用于防止系统软件故障. 在许多应用中, 看门狗定时器的使用是至关重要的, 它可以检测和解决软件错误, 提高系统的可靠性. 今天小白将带领大家深入探讨 STM32 独立看门狗 (IWDG) 的原理和应用.

STM32 看门狗

什么是独立看门狗 (IWDG)

STM32 的独立看门狗 (IWDG, Independent Watch Dog) 是一个自由运行的定时器, 它可以在系统发生软件错误时产生系统复位. IWDG 由独立的低速内部振荡器 (LSI) 提供时钟, 器频率约为 40kHz. 由于 IWDG 有自己的独立时钟源, 因此即使主系统时钟失败, IWDG 仍然可以正常工作.

IWDG 的超时时间可以通过编程来设置, 范围从 1 毫秒到 32 秒. 当看门狗定时器达到预定的超时时间时, 如果没有被软件重载, 喂狗, 它就会产生系统复位.

IWDG 在系统复位后会立即启动, 即使在系统启动后的初始化阶段也无法关闭. 这是因为 IWDG 是在硬件级别实现的, 一旦启动, 就不能被停止或禁用. 这使得 IWDG 成为一种强大的工具, 可以防止软件错误导致系统无法恢复.

STM32 看门狗

独立看门狗工作原理

IWDG 的工作原理相对简单. 首先, 需要通过编程设置 IWDG 的预分频器和重载值, 以确定看门狗定时器的超时时间. 预分频器的值可以是 4 到 256, 重载值的范围是 0 到 0xFFF.

一旦设置了预分频器和重载值, 就可以启动 IWDG. 启动后, IWDG 开始倒数, 每隔一定的时间 (由分频器和重载值确定) 就减 1, 直到 0. 在倒数到 0 之前, 软件需要重载 IWDG, 将其计数值重置为重载值, 从而防止产生系统复位. 如果软件没有在计数到 0 之前重载 IWDG, IWDG 就会产生系统复位.

IWDG 的重载操作通常在主程序循环中进行, 以保证系统正常运行. 如果由于软件错误, 主程序循环停止运行或运行时间超出预期 (例如死循环或程序崩溃), IWDG 就不会被重载, 从而产生系统复位.

键寄存器

键寄存器 (Key Register) 是一种特殊的硬件寄存器, 用于控制或管理硬件设备的某些功能或特性. 键寄存器通常包含一个或多个 “键值” (Key Value), 这些键值需要在机械能某些特定操作 (如修改配置, 启动或警用特征等) 时被正确地写入寄存器.

在许多硬件设备中, 键寄存器是一种重要的保护机制. 例如, STM32 单片机的独立看门狗定时器 (IWDG, Independent Watchdog) 就有一个键寄存器. 要启动或重载独立看门狗定时器, 必须先在寄存器中写入正确的键值. 这样做的目的是防止因软件错误或干扰而误操作独立看门狗定时器.

状态寄存器 (IWDG_SR)

位 31:32保留
位 1RVU:看门狗计数器重装载值更新 (Watchdog Counter Reload Value Update) 此位由硬件置 ‘1’ 用来指示重载值的更新正在进行中. 当在 VDD 域中的重创在更新结束后, 此位由硬件清 ‘0’ (最多需要 5 个 40kHz 的 RC 周期). 重装载值只有在 RVU 位被清 ‘0’ 后才可以更新.
位 0PVU: 看门狗预分频值更新 (Watchdog Prescaler Value Update) 此位由硬件置 ‘1’ 用来指示预分频值的更新正在进行中. 当在 VDD 域中的预分频值更新结束后, 此位由硬件清 ‘0’ (最多需要 5 个 40kHz 的 RC 周期). 预分频值只有在 PVU 位被清 ‘0’ 后才可更新.

寄存器配置操作步骤

  1. 通过在键寄存器 (IWDG_KR) 中写入 0xCCCC 来使能 IWDG
  2. 通过在键寄存器 (IWDG_KR) 中写入 0x5555 来使能寄存器访问
  3. 通过将预分频寄器寄存器 (IWDG_PR) 编程为 0-7 中的数值来配置预分频器
  4. 对重载寄存器 (IWDG_RLP) 进行操作
  5. 等待寄存器更新 (IWDG_SR = 0x0000 0000)
  6. 刷新计数器值为 IWDG_RLR 的值 (IWDG_KR = 0xAAAA)

看门狗 IWDG

案例

#include "./SYSTEM/sys/sys.h"
#include "./SYSTEM/usart/usart.h"
#include "./SYSTEM/delay/delay.h"
#include "./BSP/LED/led.h"
#include "./BSP/WDG/wdg.h"
#include "./BSP/KEY/key.h"


int main(void)
{
    HAL_Init();                             /* 初始化HAL库 */
    sys_stm32_clock_init(RCC_PLL_MUL9);     /* 设置时钟, 72Mhz */
    delay_init(72);                         /* 延时初始化 */
    usart_init(115200);                     /* 串口初始化为115200 */
    led_init();                             /* 初始化LED */
    key_init();                             /* 初始化按键 */
    delay_ms(100);                          /* 延时100ms再初始化看门狗,LED0的变化"可见" */
    iwdg_init(IWDG_PRESCALER_64, 625);      /* 预分频数为64,重载值为625,溢出时间约为1s */
    LED0(0);                                /* 点亮LED0(红灯) */

    while (1)
    {
        if (key_scan(1) == WKUP_PRES)       /* 如果WK_UP按下,则喂狗 */
        {
            iwdg_feed();                    /* 喂狗 */
        }

        delay_ms(10);
    }
}

总结

STM32 的独立看门狗 (IWDG) 可以提高系统的可靠性, 防止软件错误导致系统无法恢复. 通过 STM32 CubeMX 工具和 HAL 库, 我们可以轻松配置的使用 IWDG. 尽管 IWDG 的使用可能会增加软件的复杂性.

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

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

相关文章

webpack Plugin Loader

本文作者为 360 奇舞团前端开发工程师 webpack是Javascript工具链的关键部分。webpack是个用于现代JavaScript应用程序的静态模块打包工具。它不仅可以支持ESM和CommonJS模块化编程,而且还可以支持或扩展支持许多不同的静态资源,例如:Files,I…

我将开始更新 强化学习

你好,我是zhenguo(郭震) 很久没有更新文章,从现在开始我将逐步恢复更新。在接下来的日子,我将系统更新强化学习文章,在期间,也会插播一些读博做科研的一些日常总结。如果你感兴趣,欢…

【观察】华为:持续创新,场景聚焦,推动数据中心实现可持续发展

毫无疑问,在数字经济时代,数据被纳入“新型生产要素”,而数据中心作为承载数据价值的关键,不仅是国民经济发展的重要基础设施,更成为了科技创新和技术应用的实体。也正因此,过去十几年数据中心产业实现了快…

最新开源!更擅长推理的LLaMA大模型,支持中文

©PaperWeekly 原创 作者 | 李忠利 研究方向 | 自然语言处理 跟大家介绍一下自己最近训练的 LLaMA 模型——BiLLa: A Bilingual LLaMA with Enhanced Reasoning Ability. Github 地址: https://github.com/Neutralzz/BiLLa HuggingFace 模型: ht…

【Python】数据分析与可视化实践:收支日统计数据可视化的实现

Python数据分析与可视化实践:收支日统计数据可视化的实现 Author:萌狼蓝天 Date:2023-5-7 数据读入与基本处理 上图是原始数据的一部分,存放于excel中,首先使用pd读入数据。读入数据后,删除不是收入&#x…

chatgpt赋能Python-python3_8_3怎么用

Python 3.8.3:简介与使用 Python是一种高级编程语言,拥有许多库和框架,是Web开发、数据分析、机器学习、人工智能等领域的首选语言之一。而Python 3.8.3是Python的最新版本,在新功能、稳定性、安全性等方面都有很大提升。 Pytho…

Midjourney 创建私人画图机器人,共享账号如何设置独立绘画服务器

本教程收集于:AIGC从入门到精通教程 Midjourney 创建私人画图机器人,共享账号如何设置独立绘画服务器 你是不是遇到以下问题: 1.Midjourney会员怎么自建绘图服务器,不受其他人的打扰? 2.Midjourney会员共享账号如何自建服务器,供其他人使用? 3.在官方服务器作图,频…

gRPC-go参数功能介绍总结目录(专栏)

本篇文章是gRPC-go框架的参数功能介绍总结 本篇文章的目的: 查看快速方便查询gRPC-go都有哪些参数可用!可以快速的查询到相关案例!gRPC-go版本是v1.30.0 可以从下面的地址下载gRPC-go版本 链接: https://pan.baidu.com/s/1za02qnUII78n-XhlrLf7RA 密码: 3tok 1、grpc-go客…

深入浅出 OkHttp 源码解析及应用实践

作者:vivo 互联网服务器团队- Tie Qinrui OkHttp 在 Java 和 Android 世界中被广泛使用,深入学习源代码有助于掌握软件特性和提高编程水平。 本文首先从源代码入手简要分析了一个请求发起过程中的核心代码,接着通过流程图和架构图概括地介绍…

chatgpt赋能Python-python3_7_6怎么用

Python 3.7.6怎么用 – 简单易上手的编程语言 Python是一种简单易用的编程语言,已经成为了计算机科学领域中最受欢迎的语言之一。Python内置了许多库和工具,可以让用户轻松地完成各种任务。 作为Python的最新版本,Python 3.7.6带来了许多令…

Java Web项目中无效数据怎样处理?

最近在做一个java web项目(自己随便想的),遇到一个这个的需求,就是从后台数据库根据用户id数据查询用户信息给前端用作个人主页展示吧!,但是后台数据库中用户信息中是有密码字段(虽然进行了加密处理)的,对于这个密码数…

一个玩游戏的失足青年,转行做编程到教育的挣扎过程(3/4)

有一个人,从小的心愿是当一名飞行员,终于有一天他当上了飞行员。 但是,他第一次飞行时,飞机就出事了。 好在他能够跳伞。但是,降落却是坏的,打不开...... 突然,他看见了在正下方的地上&#xff…

声音生成——将Autoencoder修改成Variant Autoencoder在mnist训练

文章目录 概述VariantAutoencoder.py文件实现关闭eager execution修改bottlenectk组件修改loss损失函数VariantAutoencoder.py实现的全部代码 train.py文件实现load_mnist模块train模块完整代码执行效果 总结Analysis代码 概述 之前的一篇文章中,介绍了如何实现aut…

if

[rootes3 data]# cat ifaction.sh #!/bin/bash#********************************************************************read -p "请输入身高(m为单位): " HIGH if [[ ! "$HIGH" ~ ^[0-2](\.[0-9]{,2})?$ ]];then echo "输入错误的身高!" exit…

面试字节,简历做了点手脚,第三方背调公司查出来了,被撤销offer!

简历做了手脚被查出来,怎么办? 一位面试字节的程序员哀叹: 运气差,在简历上做了点手脚,被第三方背调查出来了,只能等着被通知撤销offer! 有人说,现在背调查的可严格了,字…

Robust 2.0:支持Android R8的升级版热修复框架

2016年,我们对美团Android热更新方案Robust的技术原理做了详细介绍。近几年,Google 推出了新的代码优化混淆工具R8,Android 热修复补丁制作依赖二次构建包和线上包对比,需要对Proguard切换到R8提前进行适配和改造,本文…

鄞州银行:符合中小银行质量提升的数据治理方案

案例简介 在数字化转型的驱动和数据治理“严监管”的推动下,为解决金融机构数据治理体系不健全、数据质量低下等问题,利用数据治理成熟度评估模型进行问题分析定位,重点围绕数据规划、组织机制、标准建设以及数据类平台建设等方面进行数据质…

springboot+jsp网上药品商城销售管理系统

本设计需要实现一套方便药品管理者轻松便捷的处理药品运营工作的药品销售管理系统。设计并实现了特殊药品管理系统。系统选用B/S模式,应用java开发语言, MySQL为后台数据库。系统主要包括主页、个人中心、用户管理、药品类别管理、药品信息管理、系统管理…

Boy,Slowly...

很多朋友问我为啥写的少了。我说很多东西都是常识,老生常谈无数遍了,不想不断重复写了。常识性的东西,不断强调是对的,但是不断重复写,这就不对了。 (1)朴素 早上看一位朋友发了一条王兴过去老生…

使用Python复制某文件夹下子文件夹名为数据文件夹下的所有以DD开头的文件夹到桌面...

点击上方“Python爬虫与数据挖掘”,进行关注 回复“书籍”即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 楼阁玲珑五云起,其中绰约多仙子。 大家好,我是皮皮。 一、前言 前几天在Python最强王者群【魏哥】问了一个Python自动化办公处理…