STM32——独立看门狗

文章目录

    • 一、看门狗基础介绍
      • (一)看门狗概述:
      • (二)看门狗的作用:
      • (三)看门狗的原理:
      • (四)为什么需要使用看门狗来提高系统的可靠性:(了解)
      • (五)硬件配置
      • (六)看门狗应用
      • (七)想了解高级功能和技巧可以参考以下方式:
    • 二、HAL库独立看门狗学习和时间溢出计算
    • 三、HAL库独立看门狗配置流程

一、看门狗基础介绍

(一)看门狗概述:

看门狗(Watchdog)是一种用于提高系统可靠性的硬件或软件机制。它的作用是监控系统的运行状态,并在系统出现故障或停止响应时采取相应的措施,如复位系统或执行预定义的异常处理程序。

(二)看门狗的作用:

通过使用看门狗,系统能够在出现故障或停止响应时快速检测并采取措施。它可用于监控各种硬件和软件故障,如死锁、无限循环、崩溃等。看门狗是特别有用的,当系统处于无人监视或远程控制的环境中时,可以确保系统自动恢复或采取适当的应对措施。

(三)看门狗的原理:

1.监控系统状态:看门狗定时器会周期性地计数,当系统正常运行时,软件会定期“喂狗”,即重置看门狗计数器,防止计数器溢出。如果系统在规定的时间内未能喂狗,即未能刷新看门狗计数器,说明系统可能出现了故障或停止响应。
2.超时触发复位:看门狗定时器的计数器达到预设的阈值(重装载值)时,会触发看门狗超时事件。这意味着系统在规定的时间内未能喂狗,被认为是异常状态。超时事件可以触发复位电路,导致系统执行复位操作,将系统恢复到初始状态。
3.系统恢复:当看门狗超时事件发生时,系统会执行相应的恢复操作。这可以包括重新初始化系统、重新加载程序或执行特定的异常处理程序,以确保系统能够正常运行。

(四)为什么需要使用看门狗来提高系统的可靠性:(了解)

1.异常恢复:看门狗可以在系统出现异常或故障时触发重启操作。如果系统在运行过程中发生了死锁、崩溃、无限循环或其他异常情况,看门狗能够检测到这些情况并通过重启系统来恢复正常运行。这有助于避免系统持续处于不可用或不稳定状态。
2.软件故障保护:即使在软件出现故障或异常的情况下,看门狗也能够确保系统的可靠性。通过定期喂狗操作,软件可以证明自己仍在正常运行。如果软件由于某种原因无法进行喂狗操作(如死循环或异常跳转),看门狗将检测到这种情况并采取相应的恢复措施。
3.系统稳定性监控:看门狗可以监控系统的运行状态和稳定性。它会定期计时,如果系统在设置的时间间隔内没有进行喂狗操作,说明系统可能出现了故障或停滞。在这种情况下,看门狗将触发重启操作,以确保系统恢复到可靠的状态。
4.预防嵌入式系统停顿:在嵌入式系统中,可能会出现一些无法预料的情况,导致系统停顿或无响应。看门狗可以帮助预防这些停顿情况的发生。通过设置适当的看门狗定时器周期和喂狗操作,可以确保系统在规定时间内持续运行,避免长时间的停顿或无响应。

(五)硬件配置

学习如何配置单片机的时钟源和时钟分频器,以确保看门狗定时器的时钟频率正确,具体查看对应芯片的数据手册或参考手册,我用的是stm32f103的板子,STM32 的独立看门狗由内部专门的 40Khz 低速时钟驱动,即使主时钟发生故障,它也仍然有效。这里需要注意独立看门狗的时钟是一个内部 RC 时钟,所以并不是准确的 40Khz,而是在 30~60Khz 之间的一个可变化的时钟,只是我们在估算的时候,以 40Khz 的频率来计算,看门狗对时间的要求不是很精确,所以,时钟有些偏差,都是可以接受的。(本段参考正点原子STM32HAL库开发指南)
至于看门狗硬件引脚如何设置需要硬件工程师决定。

(六)看门狗应用

看门狗在实际应用中的用途,如监控系统死锁、处理器失效等
学习如何合理设置看门狗的预分频器和重装载值,以达到适当的超时时间
研究如何在系统中处理看门狗复位,以确保系统能够正确恢复并继续正常运行

(七)想了解高级功能和技巧可以参考以下方式:

1.学习如何在看门狗定时器中断中执行特定的操作
2.探索看门狗模块的其他功能,如窗口模式、硬件喂狗等
3.研究如何在系统中处理看门狗异常,如故障检测和容错机制

二、HAL库独立看门狗学习和时间溢出计算

学习看门狗需要了解以下几个寄存器
1.IWDG_KR
在这里插入图片描述

在键寄存器(IWDG_KR)中写入 0xCCCC,开始启用独立看门狗;此时计数器开始从其复位
值 0xFFF 递减计数。当计数器计数到末尾 0x000 时,会产生一个复位信号(IWDG_RESET)。 无论何时,只要键寄存器 IWDG_KR 中被写入 0xAAAA, IWDG_RLR 中的值就会被重新加载到计数器中从而避免产生看门狗复位。
IWDG_PR 和 IWDG_RLR 寄存器具有写保护功能。要修改这两个寄存器的值,必须先向
IWDG_KR 寄存器中写入 0x5555。将其他值写入这个寄存器将会打乱操作顺序,寄存器将重新被保护。重装载操作(即写入 0xAAAA)也会启动写保护功能。
2.IWDG_PR 预分频寄存器
该寄存器用来设置看门狗时钟的分频系数,最低为 4,最高位 256,该寄存器是一个 32 位的寄存器,但是我们只用了最低 3 位,其他都是保留位
在这里插入图片描述

3.IWDG_RL重装载寄存器
在这里插入图片描述

4.独立看门狗时间溢出计算

溢出时间Tout=重装载值X看门狗时钟周期
看门狗时钟周期=1/(预分频值X时钟频率)
预分频值=1/(预分频因子)

预分频因子的确定要查看PR寄存器中的后三位,我们用的是100,对应的是64分频因子,带入上式子,如下所示就可以算出来溢出时间了,单位ms
在这里插入图片描述
Ps:有同学问为什么设置500重装载值和64预分频因子呢?
其实是我自己在问啦哈哈哈哈哈,因为我第一次学看门狗。
很简单,就看你要多久的溢出时间,我这个设置大概是1s溢出时间,你想改时间再设置其他数值即可!

三、HAL库独立看门狗配置流程

1.定义看门狗句柄

IWDG_HandleTypeDef IWDG_Handler;

2.看门狗配置初始化
分频系数
重装载值
看门狗初始化

void IWDG_Init(u8 prer,u16 rlr)
{IWDG_Handler.Instance=IWDG;IWDG_Handler.Init.Prescaler=prer;	//设置IWDG分频系数IWDG_Handler.Init.Reload=rlr;		//重装载值HAL_IWDG_Init(&IWDG_Handler);		//初始化IWDG,默认会开启独立看门狗	
}

3.喂狗函数

void IWDG_Feed(void)
{   HAL_IWDG_Refresh(&IWDG_Handler); 	//喂狗
}

4.While(1)按键喂狗

if(KEY_Scan(0)==WKUP_PRES) //如果WK_UP按下,喂狗
{
IWDG_Feed(); //喂狗
}
delay_ms(10);

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

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

相关文章

Linux 中的 rm 命令及示例

Linux 中的 rm 命令及示例 rm命令是Linux中最常见、最基础的命令之一。即使您对 Linux 的使用经验有限,您也很可能听说过它。该命令的主要目的是删除文件和目录。使用此命令删除文件和目录无法撤消。 这意味着您应该谨慎使用此命令,因为如果没有备份&am…

振南技术干货集:制冷设备大型IoT监测项目研发纪实(5)

注解目录 1.制冷设备的监测迫在眉睫 1.1 冷食的利润贡献 1.2 冷设监测系统的困难 (制冷设备对于便利店为何如何重要?了解一下你所不知道的便利店和新零售行业。关 于电力线载波通信的论战。) 2、电路设计 2.1 防护电路 2.1.1 强电防护…

Colmap三维重建详解与使用方法

图片捕获过程,请遵循以下指导方针以获得最佳重建结果: 1 捕捉具有良好纹理的图像。避免使用完全没有质感的图片(例如,白色的墙或空桌子)。如果场景本身没有足够的纹理,你可以放置额外的背景对象,如海报等。 2 在相似的照明条件下…

@Value和@Scheduled注解简介

(1)SpringBoot读取配置文件,使用Value注解获取数据,中文乱码问题解决办法 new String(xxx.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8) (2)Scheduled注解 例如,Scheduled(…

前端处理返回数据为数组对象且对象嵌套数组并重名的数据,合并名称并叠加数据

前端处理返回数据为数组对象且对象嵌套数组并重名的数据,合并名称并叠加数据 var newList[]; var table{}; var dataObj{}; var finalList[]; var tableData[{brName:营业部,dateStr:2023-11-23,tacheArr:[{dealCnt:20,tacheName:奔驰}]},{brName:营业部,dateStr:2…

TypeError: Cannot read property ‘sendpost‘ of undefined

箭头函数指向问题,定义let that this 解决

大宽带服务器有什么优势?

大宽带服务器有什么优势? 什么是大带宽服务器?从属性上看,大宽带可以分为G口大带宽、万兆大带宽等,从线路上看,可以分为电信、移动、联通等,从地域属性看,可以分为国内宽带、国际宽带。大宽带是…

如何活跃谷歌开发者账号,增加账号的权重和真实性,从而延长应用在线时长?

众所周知,每个谷歌开发者账号都有一个初始权重,而权重的高低会影响到账号的稳定性和真实性,从而影响应用上架的成功率和应用在线时长。 关于提高谷歌账号权重、活跃度及稳定性,以下的方法和建议可供参考: 1、社区活动…

外设——CAN总线收发器TJA1043

目录 1. 引脚 2. 工作模式 3. 5种模式和7种状态标识的理解和使用 1. 引脚 2. 工作模式 该收发器相较于普通收发器,引脚多了几个,就是功能等多了。TJA1043支持五种操作模式,就是通过控制引脚STB_N和EN来原则。五种模式: 正常模式…

OpenCV滑块验证码图像缺口位置识别

OpenCV图像缺口位置识别 1、背景2、图像缺口位置识别原理3、图像缺口位置识别实现4、滑块验证码HTTP图像需要保存到本地吗1、背景 在使用Selenium完成自动化爬虫时,许多网站为了防止机器人爬取数据会使用验证码(例如滑块验证码)。通过Selenium动作操作,爬虫可以模拟用户输入…

前端工程、静态代码、Html页面 打包成nginx 的 docker镜像

1. 创建一个 mynginx的目录 2. 将前端代码文件夹(比如叫 front )复制到 mynginx 目录下 3. 在mynginx 目录下创建一个名为Dockerfile 的文件(文件名不要改),文件内容如下: # 使用官方的 Nginx 镜像作为基…

神经网络训练技巧

1. 逐渐增加训练数据规模,比如先在小数据集上训练,之后再增大数据集继续训练。

网站权重是什么意思

网站权重是指搜索引擎对网站的评估指标,用以衡量网站的重要性 搜索引擎会根据网站权重来决定网站在搜索结果中的排名和位置,从而决定其在搜索中的可见度 网站权重是多方面因素的综合评估,其中主要包括网站内容质量、外部链接量及质量、网站…

JS逆向之wasm逆向(二)

本文仅供技术交流和技术学习 不做其他用途 接着上一篇继续讲: 上篇地址: JS逆向之wasm逆向(二进制) 网址: aHR0cHM6Ly93d3cuN3E2Y3lqLmNvbTo5MDAxL3JlZ2lzdGVyNDY5Njg/aV9jb2RlPTQ0Mjc5OTU1 这个网站我们后面可以继续讲他的debugger 和滑块…

[点云分割] Clustering of Pointclouds into Supervoxels

介绍 “Clustering of Pointclouds into Supervoxels” 是一种点云数据聚类的方法,用于将点云数据分割成具有相似特征的超体素(supervoxel)。 超体素是一种在点云数据中表示连续区域的方法,类似于像素在图像中表示连续区域。超体…

C 语言 http通信

1,C语言本身不包含直接支持HTTP协议的功能,但你可以使用第三方库来实现HTTP客户端或服务器。 以下是一些常用的C语言HTTP库: libcurl:一个支持多种协议的开源库,包括HTTP、HTTPS、FTP等。它提供了一组简单的API&…

因果发现31种高效经典方案汇总,附配套算法和代码

因果发现(Causal Discovery)是一个复杂的过程,其目标是从大量的数据中确定变量之间的因果关系。这个过程通常涉及到的是如何从纷繁复杂的数据中发现其中隐含的因果关系。有时,研究者可以通过随机实验进行干预来发现因果关系&#…

解决PDF预览时,电子签章、日期等不显示问题

文章目录 问题描述问题排查问题解决 问题描述 在预览PDF时,部分签章或控件没有显示。如下图: 正确应该要这样: 问题排查 根据网上搜索,排查,我先看看,pdf.worker.js 里的这三行代码,是否已经注…

JVM 类加载

① 类加载过程 从上面的图片我们可以看出整个 JVM 执行的流程中,和程序员关系最密切的就是类加载的过程了,所以 接下来我们来看下类加载的执行流程。 对于一个类来说,它的生命周期是这样的: 其中前 5 步是固定的顺序并且也是类加载…

Android : Spinner(列表选项框) + BaseAdapter -简单应用

​​容器与适配器:​​​​​ http://t.csdnimg.cn/ZfAJ7 示例图: 实体类 Demo.java package com.example.mygridviewadapter.entity;public class Demo {private String text;private int img;public Demo(String text, int img) {this.text…