STM32实现看门狗(HAL库)
文章目录
- 一. 看门狗
- 1. 独立看门狗(IWDG)
- 1.1 原理
- 1.2 相关配置
- 1.3 相关函数
- 2. 窗口看门狗(WWDG)
- 2.1 原理
- 2.2 相关配置
- 2.3 相关函数
一. 看门狗
单片机在日常工作中常常会因为用户配置代码出现BUG,而导致芯片无法正常工作;或者会受到来自外界电磁场的干扰,造成程序跑飞 ,或陷入死循环 ,如果无法系统复位,那么整个系统都会卡死,这对产品的使用是灾难性的后果。
出于对单片机运行状态进行实时监测的考虑,产生了一种专门用于监测单片机程序运行状态的模块或者芯片,俗称看门狗(WatchDog) 。
在STM32中,看门狗分为独立看门狗(IWDG)还有窗口看门狗(WWDG) ,二者的主要区别如下:
| 独立看门狗 IWDG | 窗口看门狗 WWDG | |
|---|---|---|
| 时钟源 | 独立时钟LSI (40KZ低速时钟) | PCLK1 时钟 |
| 中断 | 没有中断,超时直接复位 | 超时产生中断,可做复位前函数操作或重新喂狗 |
| 复位条件 | 递减计数到0 | 窗口期外或者递减到0x3F |
| 计数器位数 | 12位 (最大计数范围4096-0) | 6位(最大计数范围127-63) |
| 应用场合 | 防止程序跑飞、死循环 | 检测程序时效,防止软件异常 |
1. 独立看门狗(IWDG)
1.1 原理
低速时钟 LSI经过预分频器 分频后用作驱动12 位的递减计数器,当递减至重装载值时,若还没有及时喂狗,系统就会产生一个复位信号,CPU收到复位信号,系统复位重新运行。具体步骤可以参考下面的框图。
独立看门狗(IWDG)由专用的低速时钟(LSI)驱动,即使主时钟发生故障它仍有效。额外注意的是,独立看门狗由 V D D V_{DD} VDD电压域供电,即使MCU在停止模式和待机模式下依然工作,除非使用RTC唤醒后喂狗,否则STM32进入低功耗模式后会因为没有及时喂狗而被唤醒。
1.2 相关配置
HAL库使用独立看门狗非常简单,使用STM32CubeMX配置IWDG只有三个参数:
· IWDG counter clock prescaler:分频系数
· IWDG down-counter reload value:重装载值
· IWDG window value : 窗口值(默认不修改。当计数器的值大于窗口值时,如果执行重载操作,则会产生复位)
IWDG溢出时间计算公式:
其中 N p r e s c a l e r N_{prescaler} Nprescaler是分频系数, N r e l o a d N_{reload} Nreload为重装载值, f I W D G f_{IWDG} fIWDG为低速时钟源的频率。
1.3 相关函数
初始化函数:
/*** @brief Initialize the IWDG according to the specified parameters in the* IWDG_InitTypeDef and start watchdog. Before exiting function,* watchdog is refreshed in order to have correct time base.* @param hiwdg pointer to a IWDG_HandleTypeDef structure that contains* the configuration information for the specified IWDG module.* @retval HAL status*/
HAL_StatusTypeDef HAL_IWDG_Init(IWDG_HandleTypeDef *hiwdg)
喂狗函数:
/*** @brief Refresh the IWDG.* @param hiwdg pointer to a IWDG_HandleTypeDef structure that contains* the configuration information for the specified IWDG module.* @retval HAL status*/
HAL_StatusTypeDef HAL_IWDG_Refresh(IWDG_HandleTypeDef *hiwdg)
2. 窗口看门狗(WWDG)
2.1 原理
窗口看门狗的流程框图如下图所示:
窗口看门狗的的时钟信号来自PCLK1,然后经过看门狗预分频器进行分频处理。
看门狗控制寄存器(WWDG_CR)为8位寄存器,其中首位为使能位,用于开启看门狗。后面为T[6:0] 的值。寄存器后六位为递减计数器(CNT),由分频后的时钟信号进行驱动。
看门狗配置寄存器(WWDG_CFR),寄存器的值为窗口上限值,当看门狗控制寄存器的值W6大于看门狗配置寄存器的值T6,则说明已经进入窗口期(比较器输出0),否则为非窗口期(比较器输出1)。
图中三个逻辑门电路(A、B、C)的作用分别如下:
A: 与门,输出1的条件是看门狗被使能的同时B输出为1。
B: 或门,输出1的条件要么是递减计数器减至窗口下限值(T6为0),要么是c门输出1。
C: 与门,输出1的条件是递减计数器减至窗口上限值的同时被喂狗(即WWDG_CR被写入)。
相比于独立看门狗,窗口看门狗(WWDG)是一个既能产生系统复位信号和提前唤醒中断的六位递减计数器。
(1)复位的条件: 1.当递减计数器值从0x40递减到0x3F时复位(即T6位跳变到0)
2. 计数器的值大于W[6:0]值时喂狗会复位。
(2)中断的条件: 1.当递减计数器等于0x40时可产生提前唤醒中断 (EWI)。
(3)喂狗条件 : 需要在窗口期(0x3F<窗口期< W[6:0])重装载计数器的值,才能防止复位。
2.2 相关配置
使用STM32CubeMX配置WWDG主要有五个参数:
-
WWDG counter clock prescaler:分频系数
-
WWDG window value : 窗口上限值,即W[6:0](即喂狗的窗口区间在0x3F ~ WWDG window value之间)
-
WWDG free-running downcounter value:每次复位后重新装载的值,递减到窗口区间内才可以刷新。这个值必须大于0x40和WWDG window value。
-
Early wakeup interrupt :早期唤醒中断,开启后当计数器到达0x40时会产生中断,可以在中断中进行喂狗或者函数操作。
-
Window watchdog interrupt:窗口看门狗全局中断。在NVIC Settings中,若Early wakeup interrupt为Enable,则该中断需要打开。
2.3 相关函数
1. 初始化函数:
/*** @brief Initialize the WWDG according to the specified.* parameters in the WWDG_InitTypeDef of associated handle.* @param hwwdg pointer to a WWDG_HandleTypeDef structure that contains* the configuration information for the specified WWDG module.* @retval HAL status*/
HAL_StatusTypeDef HAL_WWDG_Init(WWDG_HandleTypeDef *hwwdg)
2. 喂狗函数:
/*** @brief Refresh the WWDG.* @param hwwdg pointer to a WWDG_HandleTypeDef structure that contains* the configuration information for the specified WWDG module.* @retval HAL status*/
HAL_StatusTypeDef HAL_WWDG_Refresh(WWDG_HandleTypeDef *hwwdg)
3. 看门狗中断服务函数:
/*** @brief Handle WWDG interrupt request.* @note The Early Wakeup Interrupt (EWI) can be used if specific safety operations* or data logging must be performed before the actual reset is generated.* The EWI interrupt is enabled by calling HAL_WWDG_Init function with* EWIMode set to WWDG_EWI_ENABLE.* When the downcounter reaches the value 0x40, and EWI interrupt is* generated and the corresponding Interrupt Service Routine (ISR) can* be used to trigger specific actions (such as communications or data* logging), before resetting the device.* @param hwwdg pointer to a WWDG_HandleTypeDef structure that contains* the configuration information for the specified WWDG module.* @retval None*/
void HAL_WWDG_IRQHandler(WWDG_HandleTypeDef *hwwdg)
4. 早期唤醒回调函数:
/*** @brief WWDG Early Wakeup callback.* @param hwwdg pointer to a WWDG_HandleTypeDef structure that contains* the configuration information for the specified WWDG module.* @retval None*/
__weak void HAL_WWDG_EarlyWakeupCallback(WWDG_HandleTypeDef *hwwdg)
{/* Prevent unused argument(s) compilation warning */UNUSED(hwwdg);/* NOTE: This function should not be modified, when the callback is needed,the HAL_WWDG_EarlyWakeupCallback could be implemented in the user file*/
}
相关文章:
STM32实现看门狗(HAL库)
文章目录 一. 看门狗1. 独立看门狗(IWDG)1.1 原理1.2 相关配置1.3 相关函数 2. 窗口看门狗(WWDG)2.1 原理2.2 相关配置2.3 相关函数 一. 看门狗 单片机在日常工作中常常会因为用户配置代码出现BUG,而导致芯片无法正常工…...
【漏洞复现】网络摄像头——弱口令
声明:本文档或演示材料仅供教育和教学目的使用,任何个人或组织使用本文档中的信息进行非法活动,均与本文档的作者或发布者无关。 文章目录 漏洞描述漏洞复现其他补充 漏洞描述 主流网络摄像头存在弱口令。 漏洞复现 JAWS 1)信息…...
视觉图像面积计算
在图像处理和计算机视觉中,计算对象面积的常见方法有两种:使用四邻域标记算法和使用轮廓计算。每种方法在不同情况下有各自的优缺点。 四邻域标记算法: 优点: 简单易实现。能够处理带有孔洞的复杂区域(只要孔洞不影响连…...
Vue笔记10-其它Composition API
shallowReactive与shallowRef shallow:浅的,和deep相反 shallowReactive:只处理对象最外层属性的响应式 shallowRef:只处理基本数据类型的响应式,不进行对象的响应式处理 如果有一个对象数据,结构比较深&a…...
AI集成工具平台一站式体验,零门槛使用国内外主流大模型
目录 0 写在前面1 AI艺术大师1.1 绘画制图1.2 智能作曲 2 AI科研助理2.1 学术搜索2.2 自动代码 3 AI智能对话3.1 聊天机器人3.2 模型竞技场 4 特别福利 0 写在前面 人工智能大模型浪潮滚滚,正推动着千行百业的数智化进程。随着技术演进,2024年被视为是大…...
北京交通大学学报
《北京交通大学学报》是经新闻出版广电总局批准,由教育部主管,北京交通大学主办的自然科学理论与技术类学术期刊。学报致力于全面反映交通运输和信息与通信领域相关学科的最新研究进展。主要刊登交通运输工程、系统科学、信息与通信工程、控制科学与工程…...
【LinuxC语言】手撕Http之处理POST请求
文章目录 前言声明POST的组成读取POST信息读取消息体长度读取消息体解析消息体How to use?总结前言 在互联网的世界中,HTTP协议无疑是最重要的协议之一。它是Web的基础,支持着我们日常生活中的大部分在线活动。尽管有许多现成的库可以处理HTTP请求,但了解其底层工作原理是…...
以软件定义推动智算中心建设
2024 年 6 月 27 日,由益企研究院和 CDCC 主办、OCTC 开放计算委员会协办、隆高展览承办的"2024 中国智算中心全栈技术大会、第 5 届中国数据中心绿色能源大会暨第 10 届中国(上海)国际数据中心产业展览会”在上海圆满结束。本次大会以&…...
Apache Seata分布式事务原理解析探秘
本文来自 Apache Seata官方文档,欢迎访问官网,查看更多深度文章。 本文来自 Apache Seata官方文档,欢迎访问官网,查看更多深度文章。 前言 fescar发布已有时日,分布式事务一直是业界备受关注的领域,fesca…...
MySQL-18-mysql source 执行 sql 文件时中文乱码
拓展阅读 MySQL 00 View MySQL 01 Ruler mysql 日常开发规范 MySQL 02 truncate table 与 delete 清空表的区别和坑 MySQL 03 Expression 1 of ORDER BY clause is not in SELECT list,references column MySQL 04 EMOJI 表情与 UTF8MB4 的故事 MySQL 05 MySQL入门教程&a…...
flutter环境安装(Mac+vscode)
以前据说flutter跨平台开发app很牛逼,最近突然想到这个东西,于是想体验一下flutter的开发流程,看看能否适合做独立开发。 我用的是mac,手机也是ios,就开始着手部署mac下的开发环境了。 开发后台的时候,一…...
【题解】—— LeetCode一周小结27
🌟欢迎来到 我的博客 —— 探索技术的无限可能! 🌟博客的简介(文章目录) 【题解】—— 每日一道题目栏 上接:【题解】—— LeetCode一周小结26 2024.7 1.最大化一张图中的路径价值 题目链接:…...
C++后端开发--网络编程基础
目录 一、网络编程基础概念 1.1 网络协议 1.2 IP地址和端口号 1.3 Socket 1.4 TCP协议的三次握手和四次挥手 TCP的三次握手 TCP的四次挥手 整个流程更通俗易懂 TCP 三次握手流程图 TCP 四次挥手流程图 1.5 详细介绍一下http协议 HTTP协议的主要特点 HTTP请求 HTT…...
如何将资源前端通过 Docker 部署到远程服务器
作为一个程序员,在开发过程中,经常会遇到项目部署的问题,在现在本就不稳定的大环境下,前端开发也需要掌握部署技能,来提高自己的生存力,今天就详细说一下如何把一个前端资源放到远程服务器上面通过docker部…...
@react-google-maps/api实现谷歌地图嵌入React项目中,并且做到点击地图任意一处,获得它的经纬度
1.第一步要加入项目package.json中或者直接yarn install它都可以 "react-google-maps/api": "^2.19.3",2.加入项目中 import AMapLoader from amap/amap-jsapi-loader;import React, { PureComponent } from react; import { GoogleMap, LoadScript, Mar…...
【MySQL】2.库的操作
库的操作 一.创建数据库1.数据库的编码集 二.查看数据库三.修改数据库四.删除数据库五.数据库的备份和恢复 一.创建数据库 create database [if not exists] db_name [charsetutf8] [collateutf8_general_ci] //创建一个名为db_name的数据库,本质就是在/var/lib/my…...
深入Laravel服务容器:构建灵活应用的秘诀
标题:深入Laravel服务容器:构建灵活应用的秘诀 Laravel框架的服务容器是一个强大的工具,它负责管理类的依赖关系和执行依赖注入(DI)。服务容器是Laravel依赖注入系统的核心,使得应用组件之间的耦合度降低&…...
3.js - 模板渲染 - 金属切面效果
md,狗不学,我学 源码 // ts-nocheck// 引入three.js import * as THREE from three// 导入轨道控制器 import { OrbitControls } from three/examples/jsm/controls/OrbitControls// 导入lil.gui import { GUI } from three/examples/jsm/libs/lil-gui.m…...
【测试】系统压力测试报告模板(Word原件)
系统压力测试,简而言之,是在模拟高负载、高并发的环境下,对系统进行全面测试的过程。它旨在评估系统在面对极端使用条件时的性能表现,包括处理能力、响应时间、资源消耗及稳定性等关键指标。通过压力测试,开发团队能够…...
图片预加载和懒加载
图片预加载 图片预加载是指在页面展示之前提前加载即将使用到的图片资源,以便当用户需要查看时,能够直接从本地缓存中快速渲染,从而提高页面加载速度和用户体验。 原理 图片预加载通过提前将图片下载到浏览器缓存中,当用户实际…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...
《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...
算法笔记2
1.字符串拼接最好用StringBuilder,不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...
佰力博科技与您探讨热释电测量的几种方法
热释电的测量主要涉及热释电系数的测定,这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中,积分电荷法最为常用,其原理是通过测量在电容器上积累的热释电电荷,从而确定热释电系数…...
在Ubuntu24上采用Wine打开SourceInsight
1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
push [特殊字符] present
push 🆚 present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中,push 和 present 是两种不同的视图控制器切换方式,它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...
[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...
【记录坑点问题】IDEA运行:maven-resources-production:XX: OOM: Java heap space
问题:IDEA出现maven-resources-production:operation-service: java.lang.OutOfMemoryError: Java heap space 解决方案:将编译的堆内存增加一点 位置:设置setting-》构建菜单build-》编译器Complier...
