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

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/8WWDG_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.hqwc.cn/news/124320.html

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

相关文章

SpringBoot结合Redisson实现分布式锁

🧑‍💻作者名称:DaenCode 🎤作者简介:啥技术都喜欢捣鼓捣鼓,喜欢分享技术、经验、生活。 😎人生感悟:尝尽人生百味,方知世间冷暖。 📖所属专栏:Sp…

C语言动态内存管理

🐵本篇文章将会对动态内存管理相关知识进行讲解 1. 为什么要存在动态内存管理❓ 目前我们掌握了两种开辟内存的方式,分别为: int a 10;//存放一个值 int arr[] { 1,2,3,4,5,6,7,8,9,10 };//存放一组数 这两种内存开辟方式都是静态的&#…

周期性触发的自定义触发器

背景 本文我们实现一个周期性触发的自定义触发器,顺便看下实现自定义触发器的一些要点 周期性触发器实现 实现一个每分钟触发一次的自定义事件时间触发器,实现代码和注意事项如下所示 package wikiedits.trigger;import org.apache.flink.api.common…

自然语言处理的分类

动动发财的小手,点个赞吧! 简介 作为理解、生成和处理自然语言文本的有效方法,自然语言处理(NLP)的研究近年来呈现出快速传播和广泛采用。鉴于 NLP 的快速发展,获得该领域的概述并对其进行维护是很困难的。…

【算法训练-二分查找 三】【特殊二分】寻找峰值

废话不多说,喊一句号子鼓励自己:程序员永不失业,程序员走向架构!本篇Blog的主题是【数组的二分查找】,使用【数组】这个基本的数据结构来实现,这个高频题的站点是:CodeTop,筛选条件为…

【Linux】RPM包使用详解

🍁 博主 "开着拖拉机回家"带您 Go to New World.✨🍁 🦄 个人主页——🎐开着拖拉机回家_大数据运维-CSDN博客 🎐✨🍁 🪁🍁 希望本文能够给您带来一定的帮助🌸文…

Python爬虫解决中文乱码

目录 一、中文乱码 二、chardet.detect()解决 三、在页面查找编码格式解决 一、中文乱码 问题在于文本的编码格式不正确 import requestsurlhttps://www.shicimingju.com/book/sanguoyanyi.html headers{User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKi…

燃气安全如何保障?万宾燃气管网监测系统时刻感知管网运行态势

近年来随着我国城镇化建设的加快,燃气已经成为每个家庭的必需品。然而,每年夏季频繁发生的燃气爆炸事故,已经严重危害人民生命财产安全危害社会公共安全和公共利益。为了保障燃气安全运行,近日,许多城市都在大力推进燃…

SpringCloudGateway网关中各个过滤器的作用与介绍

文章目录 RemoveCachedBodyFilterAdaptCachedBodyGlobalFilterNettyWriteResponseFilterForwardPathFilterRouteToRequestUrlFilterWebSocketRoutingFilterNettyRoutingFilterForwardRoutingFilterDispatcherHandler 是什么?⭐如何确定最后的路由路径?下…

Vue3+TS+ECharts5实现中国地图数据信息显示

1.引言 最近在做一个管理系统,主要技术栈使用的是Vue3TSViteElementPlus,主要参考项目是yudao-ui-admin-vue3,其中用到ECharts5做数字大屏,展示中国地图相关信息,以此基础做一个分享,写下这篇文章。 &quo…

28270-2012 智能型阀门电动装置 学习笔记

声明 本文是学习GB-T 28270-2012 智能型阀门电动装置. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了智能型阀门电动装置(以下简称智能电装)的术语、技术要求、试验方法、检验规则、标 志、包装、运输和贮存条件等。 本标准适…

2023/10/4 -- ARM

今日任务:QT实现TCP服务器客户端搭建的代码,现象 ser: #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);server new QTcpSe…