【物联网】浅谈单片机中的看门狗

news2024/11/19 11:23:14

STM32看门狗是一种重要的系统保护机制,能够监控系统的运行状态并在故障时自动重启。它在各个领域都有广泛的应用,如工业自动化、通信设备和汽车电子等。通过配置和控制看门狗定时器,我们可以提高系统的稳定性和可靠性。在实际应用中,根据具体需求和STM32型号进行相应的设置和喂狗操作,以确保系统的正常运行。STM32看门狗的应用不仅可以保证系统的安全性,还能提升整个系统的可靠性和稳定性。


文章目录

    • 什么是看门狗?
    • STM32 看门狗的工作原理
    • STM32 看门狗的配置
    • STM32 看门狗的应用场景
    • 总结


什么是看门狗?

STM32 看门狗(Watchdog)是一种硬件定时器,用于监控系统的运行状态,并在系统出现故障或死锁时自动重启系统。看门狗是一种常见的系统可靠性保护机制,可以防止系统因软件错误或硬件故障而导致的无限循环或停止响应的情况。所以,出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的芯片,俗称“看门狗”(watchdog)。


STM32 看门狗的工作原理

STM32 看门狗的工作原理是通过定时器和复位信号来实现的。看门狗定时器会周期性地计数,当计数器的值达到预设的阈值时,看门狗会产生一个复位信号,将系统重启。为了防止看门狗复位系统,我们需要在每次定时器溢出之前重置看门狗计数器。

在这里插入图片描述

工作原理:在系统运行以后也就启动了看门狗的计数器,看门狗就开始自动计数,如果到了一定的时间还不去清理看门狗,那么看门狗计数器就会溢出从而引起看门狗中断,造成系统复位。所以,在使用有看门狗的芯片时要注意清理看门狗。

硬件看门狗是利用了一个定时器,来监控主程序的运行,也就是说在主程序的运行过程中,我们要在看门狗定时器定时时间到之前对其进行复位。如果出现死循环,或者说PC指针不能回来,那么定时时间到后就会使单片机复位。

软件看门狗技术的原理和这差不多,只不过是用软件的方法实现,我们还是以51系列来讲,我们知道在51单片机中有两个定时器,我们就可以用这两个定时器来对主程序的运行进行监控。我们可以对T0设定一定的定时时间,当产生定时中断的时候对一个变量进行赋值,而这个变量在主程序运行的开始已经有了一个初值,在这里我们要设定的定时值要小于主程序的运行时间,这样在主程序的尾部对变量的值进行判断,如果值发生了预期的变化,就说明T0中断正常,如果没有发生变化则使程序复位。对于T1我们用来监控主程序的运行,我们给T1设定一定的定时时间,在主程序中对其进行复位,如果不能在一定的时间里对其进行复位,T1 的定时中断就会使单片机复位。在这里T1的定时时间要设的大于主程序的运行时间,给主程序留有一定的的裕量。而T1的中断正常与否我们再由T0定时中断子程序来监视。这样就够成了一个循环,T0监视T1,T1监视主程序,主程序又来监视T0,从而保证系统的稳定运行。


STM32 看门狗的配置

在 STM32 中,我们可以通过寄存器来配置和控制看门狗。以下是 STM32 看门狗的基本配置步骤:

  1. 使能看门狗时钟:根据具体的 STM32 型号,我们需要使能相应的看门狗时钟。

  2. 配置看门狗定时器:设置看门狗定时器的预分频和重载值。预分频用于设置看门狗定时器的时钟频率,重载值用于设置看门狗定时器的计数阈值。

  3. 使能看门狗:将看门狗使能位设置为 1,启动看门狗定时器。

  4. 定期喂狗:在系统运行过程中,需要定期喂狗,即重置看门狗计数器,以防止看门狗复位系统。可以使用看门狗喂狗指令或者写入特定的寄存器来重置看门狗计数器。

当使用STM32的看门狗时,通常需要配置和控制看门狗定时器,并在系统运行过程中定期喂狗。下面是一个简单的例子,展示了如何在STM32上配置和使用看门狗。

#include "stm32f4xx.h"

void WWDG_Configuration(void)
{
    // 使能看门狗时钟
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE);

    // 配置看门狗定时器
    WWDG_SetPrescaler(WWDG_Prescaler_8); // 设置预分频为8,时钟频率为PCLK1/8
    WWDG_SetWindowValue(0x7F);           // 设置看门狗窗口值
    WWDG_Enable(0x7F);                    // 使能看门狗,设置计数器的初始值为0x7F
}

void Feed_WWDG(void)
{
    // 定期喂狗,重置看门狗计数器
    WWDG_SetCounter(0x7F);
}

int main(void)
{
    // 初始化系统时钟和其他外设

    WWDG_Configuration();

    while (1)
    {
        // 系统正常运行,定期喂狗
        Feed_WWDG();

        // 其他系统任务
    }
}

在上面的例子中,我们首先调用WWDG_Configuration函数来配置看门狗定时器。在这个函数中,我们使能了看门狗时钟,并设置了预分频和窗口值。预分频用于设置看门狗定时器的时钟频率,窗口值用于设置看门狗定时器的计数阈值。然后,我们调用WWDG_Enable函数来启动看门狗定时器,并将计数器的初始值设置为窗口值。

main函数中,我们使用一个无限循环来模拟系统的正常运行。在循环中,我们调用Feed_WWDG函数来定期喂狗,即重置看门狗计数器。这样,只要系统正常运行,并且在看门狗定时器溢出之前定期喂狗,系统就不会被看门狗复位。


STM32 看门狗的应用场景

STM32 看门狗广泛应用于需要保证系统可靠性和稳定性的领域,特别是嵌入式系统和实时系统。以下是一些常见的应用场景:

  1. 实时操作系统(RTOS):在实时操作系统中,看门狗可以用来监控任务的运行状态,并在任务死锁或异常情况下重启系统。

  2. 工业自动化:在工业自动化领域,看门狗可以用来监控控制系统的运行状态,并在系统故障时自动重启。

  3. 通信设备:在通信设备中,看门狗可以用来监控网络连接状态,并在网络故障时重启设备。

  4. 汽车电子:在汽车电子系统中,看门狗可以用来监控车辆的运行状态,并在系统故障时保证车辆的安全。


总结

STM32 看门狗是一种重要的系统可靠性保护机制,可以监控系统的运行状态,并在系统故障时自动重启。通过配置和控制看门狗,我们可以提高系统的稳定性和可靠性。在实际应用中,我们需要根据具体的需求和系统特点来选择合适的看门狗配置参数,并定期喂狗,以确保系统的正常运行。

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

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

相关文章

43 验证二叉搜索树

验证二叉搜索树 理解题意:验证搜索二叉树:中序遍历是升序题解1 递归(学习学习!)题解2 中序遍历(保持升序) 给你一个二叉树的根节点 root ,判断其是否是一个 有效的二叉搜索树。 有…

selenium查找网页如何处理网站资源一直加载非常卡或者失败的情况

selenium查找网页如何处理网站资源一直加载失败的情况 selenium获取一个网页,某个网页的资源卡了很久还没有加载成功,如何放弃这个卡的数据,继续往下走 有2钟方式。通常可以采用下面的方式一来处理这种情况 方式一、WebDriverWait 这种方式…

【python】pandas库

文章目录 简单介绍Series数据结构DataFrame数据结构索引对象基本功能reindex重新索引drop丢弃指定轴上的项索引、选取和过滤用loc和iloc进行选取算法运行数据对齐DataFrame和Series之间的运算函数应用和映射排名和排序 简单介绍 pandas是python进行数据分析中非常重要的一个库…

linux MySQL高阶语句

linux MySQL高阶语句 1、MySQL高级语言1.1order by排序1.2group by分组1.3limit前几行1.4as别名1.5通配符1.6子查询1.7in1.8not in1.9exists 2、视图2.1视图概念2.2功能2.3应用场景2.4视图和表的区别和联系2.5创建视图 3、null值3.1null值3.2null值与空值的区别3.3验证null和空…

MYSQL的CRUD语句(含c++代码)

一.MySQl表的创建与删除 创建语句与删除语句 注意: 主键的数据类型,不可以是变长度类型需要()限制长度,表名字需要使用符号来包围。 二.MySQl数据插入 三.MySQl数据删除 四.MySQl数据更新 使用语句 SET SQL_SAFE_UPDATES 0; show variabl…

Makefile核心(第一节)

文章目录 前言Makefile核心举例讲解结束 前言 曾以为学习过程是痛苦的,其实真正静下心来是美好的,虽然很枯燥,但生活就是这样,不学习还能干吗呢…… ——张顺 makefile是相当重要的,只要你要写大工程,就必须…

十天学完基础数据结构-第三天(数组(Array))

数组的基本概念 数组是一种线性数据结构,用于存储相同数据类型的元素。它具有以下基本概念: 元素:数组中的每个数据项称为元素,可以是整数、浮点数、字符等。 索引:每个元素在数组中都有一个唯一的位置,称…

JavaScript系列从入门到精通系列第十四篇:JavaScript中函数的简介以及函数的声明方式以及函数的调用

文章目录 一:函数的简介 1:概念和简介 2:创建一个函数对象 3:调用函数对象 4:函数对象的普通功能 5:使用函数声明来创建一个函数对象 6:使用函数声明创建一个匿名函数 一:函…

2023最新使用微信小程序完成一键授权登录

前言: 使用开发工具:小程序。在我这一篇已经详细介绍了小程序的安装介绍http://t.csdnimg.cn/IEVc0今天我给大家带来的是微信的一键授权登录,保存用户信息,退出的功能!!!希望看完了这篇博客能够…

【python海洋专题十】Cartopy画特定区域的地形等深线图

【python海洋专题十】Cartopy画特定区域的地形等深线图 海洋与大气科学 前几期可以认为关于平面的元素画法🆗了 本期关于特定区域平面画法 全球区域水深图 本期内容 画某元素特定区域的平面图:我有两个方法: 第一个:裁剪nc文…

嵌入式学习笔记(45) NandFlash的接口

9.1.1 Nand的型号与命名 (1)K9F2G08:K9F表示是三星公司的NandFlash系列。2G表示Nand的大小是2Gbit(256MB)。08表示Nand是8位的(数据线有8根)。 (2)Nand命名中可以看出,厂家、系列型号、容量大小、数据位数 9.1.2 Nand的数据位 …

机器视觉工程师,努力方向错了,白费

努力方向错了,白费。 在这个知识经济,知识付费,知识大V横行的时代,知识似乎遍地都是。但你有没有想过,微博里的段子是不是知识?微信里的爆款文章是不是知识?得到App里的音频是不是知识&#xf…

OpenGLES:绘制一个混色旋转的3D球体

一.概述 前面几篇博文讲解了如何使用OpenGLES实现不同的3D图形 本篇博文讲解怎样实现3D世界的代表图形:一个混色旋转的3D球体 二.球体解析 2.1 极限正多面体 如果有学习过我前几篇3D图形绘制的博文,就知道要想绘制一个3D图形,首先要做的…

基于Java的校园二手书交易平台设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding)有保障的售后福利 代码参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

挑战自己,编程你的五子棋:Python+Pygame实践经验分享

引言 五子棋,古老而经典,是一种两人对抗的策略棋类游戏。想要体验制作游戏的乐趣吗?本文将详细指导你如何使用Python语言和Pygame库,一步步打造自己的五子棋游戏! 1. 开始之前:重要准备 首先&#xff0…

使用DNS查询Web服务器IP地址

浏览器并不具备访问网络的功能,其最终是通过操作系统实现的,委托操作系统访问服务器时提供的并不是浏览器里面输入的域名而是ip地址,因此第一步需要将域名转换为对应的ip地址 域名:www.baidu.com ip地址是一串数字 tcp/ip的网络结…

项目进展(六)-继续学习32位ADC芯片ADS1285

一、数据手册学习 1.1时序图 SPI时序图,这是很重要的一个地方,一定要在代码中将SPI配置成对应的模式。 先放一堆截图在这吧,一些引脚的功能及特性还未看到,等具体了解之后再详细介绍下面几张截图的时序: 1.2 内…

大模型RLHF算法更新换代,DeepMind提出自训练离线强化学习框架ReST

文章链接: https://arxiv.org/abs/2308.08998 大模型(LLMs)爆火的背后,离不开多种不同基础算法技术的支撑,例如基础语言架构Transformer、自回归语言建模、提示学习和指示学习等等。这些技术造就了像GPT-3、PaLM等基座…

问答雕虫1

问题: 现在有如下表 假设按时间顺序,记录中连续出现0.2 0.3 0.5 0.7四条记录记为一次有效数据组,统计一段时间范围内,有效数据组出现的次数,最终计算有效数据组在整个时间范围内的记录的占比。用mysql语句或者函数如何…

uniapp uni.showToast 一闪而过的问题

问题:在页面跳转uni.navigateBack()等操作的前或后,执行uni.showToast,即使代码中设置2000ms的显示时间,也会一闪而过。 解决:用setTimeout延后navigateBack的执行。