当前位置: 首页 > news >正文

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溢出时间计算公式:

T o u t = N p r e s c a l e r ∗ N r e l o a d f I W D G T_{out}= \frac{N_{prescaler}*N_{reload}}{f_{IWDG}} Tout=fIWDGNprescalerNreload

其中 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主要有五个参数:

  1. WWDG counter clock prescaler:分频系数

  2. WWDG window value : 窗口上限值,即W[6:0](即喂狗的窗口区间在0x3F ~ WWDG window value之间)

  3. WWDG free-running downcounter value:每次复位后重新装载的值,递减到窗口区间内才可以刷新。这个值必须大于0x40和WWDG window value。

  4. Early wakeup interrupt :早期唤醒中断,开启后当计数器到达0x40时会产生中断,可以在中断中进行喂狗或者函数操作。

  5. 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. 独立看门狗&#xff08;IWDG&#xff09;1.1 原理1.2 相关配置1.3 相关函数 2. 窗口看门狗&#xff08;WWDG&#xff09;2.1 原理2.2 相关配置2.3 相关函数 一. 看门狗 单片机在日常工作中常常会因为用户配置代码出现BUG&#xff0c;而导致芯片无法正常工…...

【漏洞复现】网络摄像头——弱口令

声明&#xff1a;本文档或演示材料仅供教育和教学目的使用&#xff0c;任何个人或组织使用本文档中的信息进行非法活动&#xff0c;均与本文档的作者或发布者无关。 文章目录 漏洞描述漏洞复现其他补充 漏洞描述 主流网络摄像头存在弱口令。 漏洞复现 JAWS 1&#xff09;信息…...

视觉图像面积计算

在图像处理和计算机视觉中&#xff0c;计算对象面积的常见方法有两种&#xff1a;使用四邻域标记算法和使用轮廓计算。每种方法在不同情况下有各自的优缺点。 四邻域标记算法&#xff1a; 优点&#xff1a; 简单易实现。能够处理带有孔洞的复杂区域&#xff08;只要孔洞不影响连…...

Vue笔记10-其它Composition API

shallowReactive与shallowRef shallow&#xff1a;浅的&#xff0c;和deep相反 shallowReactive&#xff1a;只处理对象最外层属性的响应式 shallowRef&#xff1a;只处理基本数据类型的响应式&#xff0c;不进行对象的响应式处理 如果有一个对象数据&#xff0c;结构比较深&a…...

AI集成工具平台一站式体验,零门槛使用国内外主流大模型

目录 0 写在前面1 AI艺术大师1.1 绘画制图1.2 智能作曲 2 AI科研助理2.1 学术搜索2.2 自动代码 3 AI智能对话3.1 聊天机器人3.2 模型竞技场 4 特别福利 0 写在前面 人工智能大模型浪潮滚滚&#xff0c;正推动着千行百业的数智化进程。随着技术演进&#xff0c;2024年被视为是大…...

北京交通大学学报

《北京交通大学学报》是经新闻出版广电总局批准&#xff0c;由教育部主管&#xff0c;北京交通大学主办的自然科学理论与技术类学术期刊。学报致力于全面反映交通运输和信息与通信领域相关学科的最新研究进展。主要刊登交通运输工程、系统科学、信息与通信工程、控制科学与工程…...

【LinuxC语言】手撕Http之处理POST请求

文章目录 前言声明POST的组成读取POST信息读取消息体长度读取消息体解析消息体How to use?总结前言 在互联网的世界中,HTTP协议无疑是最重要的协议之一。它是Web的基础,支持着我们日常生活中的大部分在线活动。尽管有许多现成的库可以处理HTTP请求,但了解其底层工作原理是…...

以软件定义推动智算中心建设

2024 年 6 月 27 日&#xff0c;由益企研究院和 CDCC 主办、OCTC 开放计算委员会协办、隆高展览承办的"2024 中国智算中心全栈技术大会、第 5 届中国数据中心绿色能源大会暨第 10 届中国&#xff08;上海&#xff09;国际数据中心产业展览会”在上海圆满结束。本次大会以&…...

Apache Seata分布式事务原理解析探秘

本文来自 Apache Seata官方文档&#xff0c;欢迎访问官网&#xff0c;查看更多深度文章。 本文来自 Apache Seata官方文档&#xff0c;欢迎访问官网&#xff0c;查看更多深度文章。 前言 fescar发布已有时日&#xff0c;分布式事务一直是业界备受关注的领域&#xff0c;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很牛逼&#xff0c;最近突然想到这个东西&#xff0c;于是想体验一下flutter的开发流程&#xff0c;看看能否适合做独立开发。 我用的是mac&#xff0c;手机也是ios&#xff0c;就开始着手部署mac下的开发环境了。 开发后台的时候&#xff0c;一…...

【题解】—— LeetCode一周小结27

&#x1f31f;欢迎来到 我的博客 —— 探索技术的无限可能&#xff01; &#x1f31f;博客的简介&#xff08;文章目录&#xff09; 【题解】—— 每日一道题目栏 上接&#xff1a;【题解】—— LeetCode一周小结26 2024.7 1.最大化一张图中的路径价值 题目链接&#xff1a;…...

C++后端开发--网络编程基础

目录 一、网络编程基础概念 1.1 网络协议 1.2 IP地址和端口号 1.3 Socket 1.4 TCP协议的三次握手和四次挥手 TCP的三次握手 TCP的四次挥手 整个流程更通俗易懂 TCP 三次握手流程图 TCP 四次挥手流程图 1.5 详细介绍一下http协议 HTTP协议的主要特点 HTTP请求 HTT…...

如何将资源前端通过 Docker 部署到远程服务器

作为一个程序员&#xff0c;在开发过程中&#xff0c;经常会遇到项目部署的问题&#xff0c;在现在本就不稳定的大环境下&#xff0c;前端开发也需要掌握部署技能&#xff0c;来提高自己的生存力&#xff0c;今天就详细说一下如何把一个前端资源放到远程服务器上面通过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的数据库&#xff0c;本质就是在/var/lib/my…...

深入Laravel服务容器:构建灵活应用的秘诀

标题&#xff1a;深入Laravel服务容器&#xff1a;构建灵活应用的秘诀 Laravel框架的服务容器是一个强大的工具&#xff0c;它负责管理类的依赖关系和执行依赖注入&#xff08;DI&#xff09;。服务容器是Laravel依赖注入系统的核心&#xff0c;使得应用组件之间的耦合度降低&…...

3.js - 模板渲染 - 金属切面效果

md&#xff0c;狗不学&#xff0c;我学 源码 // 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原件)

系统压力测试&#xff0c;简而言之&#xff0c;是在模拟高负载、高并发的环境下&#xff0c;对系统进行全面测试的过程。它旨在评估系统在面对极端使用条件时的性能表现&#xff0c;包括处理能力、响应时间、资源消耗及稳定性等关键指标。通过压力测试&#xff0c;开发团队能够…...

图片预加载和懒加载

图片预加载 图片预加载是指在页面展示之前提前加载即将使用到的图片资源&#xff0c;以便当用户需要查看时&#xff0c;能够直接从本地缓存中快速渲染&#xff0c;从而提高页面加载速度和用户体验。 原理 图片预加载通过提前将图片下载到浏览器缓存中&#xff0c;当用户实际…...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略&#xff0c;并且实现了基本的选区操作&#xff0c;还调研了自绘选区的实现。那么相对的&#xff0c;我们还需要设计编辑器的选区表达&#xff0c;也可以称为模型选区。编辑器中应用变更时的操作范围&#xff0c;就是以模型选区为基准来…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况&#xff0c;可以通过以下几种方式模拟或触发&#xff1a; 1. 增加CPU负载 运行大量计算密集型任务&#xff0c;例如&#xff1a; 使用多线程循环执行复杂计算&#xff08;如数学运算、加密解密等&#xff09;。运行图…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题

分区配置 (ptab.json) img 属性介绍&#xff1a; img 属性指定分区存放的 image 名称&#xff0c;指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件&#xff0c;则以 proj_name:binary_name 格式指定文件名&#xff0c; proj_name 为工程 名&…...

初探Service服务发现机制

1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能&#xff1a;服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源&#xf…...

uniapp 字符包含的相关方法

在uniapp中&#xff0c;如果你想检查一个字符串是否包含另一个子字符串&#xff0c;你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的&#xff0c;但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...

MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用

文章目录 一、背景知识&#xff1a;什么是 B-Tree 和 BTree&#xff1f; B-Tree&#xff08;平衡多路查找树&#xff09; BTree&#xff08;B-Tree 的变种&#xff09; 二、结构对比&#xff1a;一张图看懂 三、为什么 MySQL InnoDB 选择 BTree&#xff1f; 1. 范围查询更快 2…...

Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么&#xff1f;它的作用是什么&#xff1f; Spring框架的核心容器是IoC&#xff08;控制反转&#xff09;容器。它的主要作用是管理对…...

FFmpeg avformat_open_input函数分析

函数内部的总体流程如下&#xff1a; avformat_open_input 精简后的代码如下&#xff1a; int avformat_open_input(AVFormatContext **ps, const char *filename,ff_const59 AVInputFormat *fmt, AVDictionary **options) {AVFormatContext *s *ps;int i, ret 0;AVDictio…...

跨平台商品数据接口的标准化与规范化发展路径:淘宝京东拼多多的最新实践

在电商行业蓬勃发展的当下&#xff0c;多平台运营已成为众多商家的必然选择。然而&#xff0c;不同电商平台在商品数据接口方面存在差异&#xff0c;导致商家在跨平台运营时面临诸多挑战&#xff0c;如数据对接困难、运营效率低下、用户体验不一致等。跨平台商品数据接口的标准…...