ARM32开发--WDGT看门狗

知不足而奋进 望远山而前行


目录

文章目录

前言

目标

内容

什么是看门狗

ARM中的看门狗

独立看门狗定时器

窗口看门狗定时器

独立看门狗FWDGT

初始化配置

喂狗

完整代码

窗口看门狗WWDGT

初始化配置

喂狗

完整代码

注意

总结


前言

嵌入式系统在如今的科技发展中扮演着越来越重要的角色,而其中保障系统稳定性与可靠性的机制显得尤为关键。本文将深入探讨看门狗(Watchdog)的概念、工作原理以及在 ARM 架构下的两种主要类型:独立看门狗和窗口看门狗。通过学习本文,您将对嵌入式系统中的看门狗有更深入的了解,从而提升系统的稳定性与可靠性。


目标

  • 了解什么是看门狗
  • 了解看门狗工作原理
  • 了解ARM的独立看门狗和窗口看门狗
  • 掌握看门狗初始化和喂狗

内容

什么是看门狗

看门狗(Watchdog)是一种用于监视系统运行情况的硬件设备,本质就是一个倒计时计数器。它能定时检测系统是否正常运行,并在系统出现故障或者卡死时自动重启系统,从而保证系统的稳定性和可靠性。

其基本原理是定期接收来自主控芯片的"喂狗信号",如果在规定的时间内没有接收到信号,硬件看门狗将会

触发系统复位,重新启动整个系统。

硬件看门狗特别适合用于远程或无人值守的系统设备中,它能确保系统在出现故障时及时自动重启减少停机时间并提高系统的可用性。这在一些关键的嵌入式系统、服务器、网络设备等领域非常重要。

看门狗(Watchdog)在嵌入式系统中起着至关重要的作用,它通常是一种硬件计时器或计数器,用于监控系统的运行情况。其作用和重要性包括以下几个方面:

  1. 系统健壮性和稳定性: 看门狗能够监控系统的运行状态,一旦系统出现故障、死锁或意外情况,可以通过重启系统来恢复正常运行,确保系统的稳定性和可靠性。
  2. 防止死锁和程序错误: 当程序发生死循环、意外暂停或其他异常情况时,看门狗可以检测到系统无响应的状态并执行重启操作,从而防止系统永久性死锁。
  3. 系统保护和数据完整性: 通过定期喂狗操作,可以确保系统在正常运行期间不会因软件或硬件故障而丢失关键数据,从而保护系统的数据完整性和稳定性。
  4. 实时系统保障: 对于实时系统而言,看门狗可以帮助确保系统在规定的时间内完成任务,若任务未能及时完成,可以执行重启操作以确保系统的实时性能。

看门狗在嵌入式系统中的作用和重要性体现在提高系统的稳定性、保护数据完整性、预防死锁和程序错误、保障实时系统性能等方面。它是确保嵌入式系统安全可靠运行的重要保障手段之一。

ARM中的看门狗

独立看门狗定时器

有独立时钟源(IRC32K)。即使主时钟失效,FWDGT依然能保持正常工作状态,适用于需要独立环境且对计时精度要求不高的场合。

当内部向下计数器的计数值达到0,独立看门狗会产生一个系统复位。使能独立看门狗的寄存器写保护功能可以避免寄存器的值被意外的配置篡改。

窗口看门狗定时器

用来监测由软件故障导致的系统故障。窗口看门狗定时器开启后,7位向下递减计数器值逐渐减小。计数值达到0x3F时会产生系统复位(CNT[6]位被清0)。在计数器计数值达到窗口寄存器值之前,计数器的更新也会产生复位。因此软件需要在给定的区间内更新计数器。窗口看门狗定时器在计数器计数值达到0x40会产生一个提前唤醒标志,如果使能中断将会产生中断。窗口看门狗定时器时钟是由APB1时钟预分频而来。窗口看门狗定时器适用于需要精确计时的场合。

独立看门狗FWDGT

free watchdog timer

初始化配置
static void wtd_config() {rcu_osci_on(RCU_IRC32K);while( SUCCESS != rcu_osci_stab_wait(RCU_IRC32K) ){  }fwdgt_config( 1000,  FWDGT_PSC_DIV64);fwdgt_enable();
}

/* confiure FWDGT counter clock: 32KHz(IRC32K) / 64 = 0.5 KHz */

独立看门狗计数时钟计算:

  • 独立看门狗具备独立晶振:32KHZ
  • FWDGT_PSC_DIVx: x为分频系数,意思是降低晶振频率。例如为64时,32khz/64 = 0.5khz = 500hz,表示的是1秒钟计数500次。
  • fwdgt_config(2 * 500, FWDGT_PSC_DIV64); 中的第一个参数就是计数值,通过分频我们可以知道1秒钟计数500次,那么我要设置为n秒,就需要 n*500的计数值。
喂狗
fwdgt_counter_reload();
完整代码

#include "gd32f4xx.h"
#include "systick.h"
#include <stdio.h>
#include "main.h"
#include "Usart0.h"void Usart0_on_recv(uint8_t* data, uint32_t len) {printf("recv: %s\r\n", data);
}static void wtd_config() {fwdgt_config(2 * 500, FWDGT_PSC_DIV64);fwdgt_enable();
}int main(void)
{systick_config();Usart0_init();wtd_config();printf("start\r\n");while(1) {delay_1ms(960); // 重启// delay_1ms(450); // 正常/* reed dog */fwdgt_counter_reload();}
}

窗口看门狗WWDGT

初始化配置
static void wtd_config() {rcu_periph_clock_enable(RCU_WWDGT);/**  System clock up to 168Mhz, PCLK1=42MHz *  set WWDGT clock = (PCLK1 (42MHz)/4096)/4 = 2563.5Hz (0.39ms)  *  set counter value to 127*  set window value to 80*  refresh window is: 0.39ms * (127-80)  < refresh window <  0.39ms * (127-0x3F) */wwdgt_config(127, 80, WWDGT_CFG_PSC_DIV4);wwdgt_enable();
}

wwdgt_config(uint16_t counter, uint16_t window, uint32_t prescaler)配置的是窗口时间,计算窗口时间是需要注意几个参数的含义。

  • counter表示计数值,取值为0x00 - 0x7F
  • window表示窗口值,取值为0x00 - 0x7F
  • 窗口区间的初始值最小为0x3F
  • 窗口计数是递减的,因此是 (counter - 初始值) 为最大时间计数,(counter - 窗口区间值)为最小时间计数
  • 一个时钟计数,通过 主频/4096可以得到计数值,4096为12位向下计数器组成。
  • 窗口计数器通过分频,得到一个时钟计数,主频/4096/分频系数
喂狗
完整代码

#include "gd32f4xx.h"
#include "systick.h"
#include <stdio.h>
#include "main.h"
#include "Usart0.h"void Usart0_on_recv(uint8_t* data, uint32_t len) {printf("recv: %s\r\n", data);if(data[0] == 0x04){// 模拟卡死操作while(1);}
}static void wtd_config() {rcu_periph_clock_enable(RCU_WWDGT);/**  System clock up to 168Mhz, PCLK1=42MHz *  set WWDGT clock = (PCLK1 (60MHz)/4096)/4 = 2563.5Hz (0.39ms)   *  set counter value to 127*  set window value to 80*  窗口开始时间-> (counter - window) * 1次计数耗时 =  (127 - 80) * 0.39ms = 18.33ms窗口结束时间-> (counter - 	 0x3F) * 1次计数耗时 = (127 - 63) * 0.39ms = 24.96ms需要在窗口时间内喂狗, 否则会触发重启18.33ms < duration < 24.96ms*/wwdgt_config(127, 80, WWDGT_CFG_PSC_DIV4);wwdgt_enable();
}int main(void)
{systick_config();Usart0_init();wtd_config();printf("start\r\n");while(1) {// 18.33ms < 安全期 < 24.96ms//    delay_1ms(18);delay_1ms(22); // 可以//    delay_1ms(26);/* update WWDGT counter */wwdgt_counter_update(127);}
}

注意

如果计算得到的窗口期和真实的运行结果不一致,要考虑system_gd32f4xx.c里配置的系统时钟是否是168M,即打开该文件,找到__SYSTEM_CLOCK_168M_PLL_8M_HXTAL,释放其注释,保持打开状态。

参考文档:GD32F4标准外设库🌟🌟🌟


总结

本文系统地介绍了看门狗(Watchdog)在嵌入式系统中的重要作用及其工作原理。首先,我们了解了看门狗的基本概念,它是一种硬件设备,用于监视系统运行情况,并在系统故障时自动重启系统,以确保系统的稳定性和可靠性。接着,我们深入探讨了看门狗的作用和重要性,包括提高系统的稳定性、防止死锁和程序错误、保护数据完整性以及保障实时系统性能等方面。随后,针对 ARM 架构,我们详细介绍了两种主要类型的看门狗:独立看门狗和窗口看门狗,并分别给出了其初始化配置和喂狗的方法。通过本文的学习,读者将能够更好地理解看门狗在嵌入式系统中的重要性,进而提高系统的稳定性和可靠性。

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

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

相关文章

JSON序列化与反序列化

目录 JSON序列化 查看JSON文件&#xff0c;设置数据模板类 ​编辑 Newtonsoft.Json下载 运行结果展示 JSON反序列化 序列化是将对象或数据结构转换为可以存储或传输的格式&#xff08;如JSON字符串&#xff09;的过程&#xff0c;而反序列化则是将这个格式的数据转换回原…

Web渗透:文件上传-后端过滤

在上一篇文件上传的内容中笔者阐述了文件上传漏洞产生的相关原理以及使用了一个pikachu靶场的例子进行演示&#xff0c;在这个例子中涉及到了前端代码对于文件上传漏洞的相关防护&#xff0c;以及站在攻击者的角度我们要如何绕过前端的防护成功进行攻击&#xff1b;但是事实上对…

很冷门但真的有趣的IOS应用

Tuesday Tuesday纪念日小组件是一款功能丰富的倒数日和桌面小组件工具APP。此外&#xff0c;Tuesday软件还具有超萌小清新的风格&#xff0c;界面设计清新可爱&#xff0c;适合各种场景使用。用户可以通过小组件实现各种趣味功能&#xff0c;满足不同心情需求。 SideNotes Si…

吴恩达机器学习 第三课 week2 推荐算法(上)

目录 01 学习目标 02 推荐算法 2.1 定义 2.2 应用 2.3 算法 03 协同过滤推荐算法 04 电影推荐系统 4.1 问题描述 4.2 算法实现 05 总结 01 学习目标 &#xff08;1&#xff09;了解推荐算法 &#xff08;2&#xff09;掌握协同过滤推荐算法&#xff08;Collabo…

查找和排序

目录 一、查找 1.1查找的基本概念 1.2顺序查找 1.3折半查找&#xff08;二分查找&#xff09; 1.4散列表的查找 1.4.1基本概念 1.4.2散列函数的构造方法 1.4.3解决冲突的方法 二、排序 2.1排序的基本概念 2.2插入排序 2.2.1直接插入排序&#xff1a; 2.2.2希尔排序…

linux 简单使用 sftp 和 lftp命令

目录 一. 环境准备二. sftp命令连接到SFTP服务器三. lftp命令3.1 连接FTP和SFTP服务器3.2 将文件从sftp服务器下载到本地指定目录 四. 通过WinSCP命令行从SFTP服务器获取文件到Windows 一. 环境准备 ⏹在安卓手机上下载个MiXplorer&#xff0c;用作SFTP和FTP服务器 官网: htt…

windows无法启动redis-server

Warning: no config file specified, using the default config. In order to specify a config file use D:\Code_enve\Redis\redis-server.exe /path/to/redis.conf Creating Server TCP listening socket *:6379: bind: No such file or directory以上是问题的报错信息&…

AIGC-Animate Anyone阿里的图像到视频 角色合成的框架-论文解读

Animate Anyone: Consistent and Controllable Image-to-Video Synthesis for Character Animation 论文:https://arxiv.org/pdf/2311.17117 网页:https://humanaigc.github.io/animate-anyone/ MOTIVATION 角色动画的目标是将静态图像转换成逼真的视频&#xff0c;这在在线零…

计网:网络应用层【Email应用/SMTP协议】

Email应用与SMTP协议 Email应用层的构成 客户端服务器协议 用户代理 用于读写邮件消息&#xff1b;与服务器交互&#xff0c;收发邮件消息 常见的客户端&#xff1a;Outlook&#xff0c;Foxmail&#xff08;这两个是需要下载的客户端&#xff09;&#xff0c;Web客户端&…

【论文复现|智能算法改进】一种基于多策略改进的鲸鱼算法

目录 1.算法原理2.改进点3.结果展示4.参考文献5.代码获取 1.算法原理 SCI二区|鲸鱼优化算法&#xff08;WOA&#xff09;原理及实现【附完整Matlab代码】 2.改进点 混沌反向学习策略 将混沌映射和反向学习策略结合&#xff0c;形成混沌反向学习方法&#xff0c;通过该方 法…

VB实现加法计算

textbox1失去焦点&#xff0c;检查输入的值是否为数字。 textbox2中按下Enter键&#xff0c;检查输入的值是否为数字。 textbox3获得焦点&#xff0c;计算textbox1和textbox2的和。 Public Class Form1Private Sub TextBox1_LostFocus(sender As Object, e As EventArgs) Hand…

基于Django + Web + MySQL的智慧校园系统

基于Django Web MySQL的智慧校园系统 由于时间紧迫&#xff0c;好多功能没实现&#xff0c;只是个半吊子的后台管理系统&#xff0c;亮点是项目安全性还算完整&#xff0c;权限保护加密功能检索功能有实现&#xff0c;可参考修改 功能如下&#xff08;服务为超链接&#xff0…

yii2 ActiveForm使用技巧

持续更新&#xff1a; 1、搜索输入框&#xff1a;form-inline <?php $form ActiveForm::begin([action > [index],method > get,options > [class > form-inline] &#xff08;增加此行代码&#xff09; ]); ?>

PBR网络数据流量分流+NQA联动静态路由

一、实验目的&#xff1a; 企业有两个网段&#xff0c;业务1网段和业务2网段&#xff0c;拓扑图如下&#xff0c; 二、实验要求 pc1报文走左侧链路到达ar1&#xff0c;pc2报文走右侧链路到达ar1&#xff0c;且当ar2或者ar3发生故障时候&#xff0c;可以通过另一个设备到达ar1…

1.4 Kettle 数据同步工具详细教程

工具介绍 一、概述 Kettle&#xff0c;又名 Pentaho Data Integration&#xff08;PDI&#xff09;&#xff0c;是一个开源的数据集成工具&#xff0c;最初由 Pentaho 公司开发。它能够从多种数据源提取、转换并加载&#xff08;ETL&#xff09;数据&#xff0c;适用于数据仓…

字符串根据给定关键词进行高亮显示

问题 一般使用搜索引擎的时候我们会发现,搜索出来的内容都对我们搜索的关键词进行了高亮显示, 这样我们能很直观的看出是不是我们想要的结果, 最近我也遇到了类似的功能, 因为关于舆情的系统使用到了ES, 一开始心想ES本身就有支持的API实现起来不难, 但我这里的需求还不太一样…

Altera的JTAG电路下载模块为何上下拉电阻,不可不知的秘密

一、FPGA背景信息 当前的FPGA市场上有国际和国产两大体系&#xff0c;国际排名&#xff0c;一直很稳定&#xff0c;国际上前三名Xilinx、Altera、Lattice&#xff0c;国内FPG厂商也在填补空白&#xff0c;低端、中低端市场上发力&#xff0c;替代潮流已在兴起&#xff0c;目前…

【驱动篇】龙芯LS2K0300之单总线驱动

实验过程 实验目的&#xff1a; 在龙芯开发板上面使用单总线驱动DS18B20温度传感器 ① 根据原理图连接DS18B20模块 ② 将i2c0引脚的功能复用为GPIO ③ 注册字符设备&#xff0c;按照DS18B20的读写时序编写读写驱动接口 ④ 编写测试用例解析传感器的数值 原理图 将板子上…

马尔可夫聚类算法

马尔可夫聚类算法&#xff08;Markov Clustering Algorithm&#xff0c;MCL&#xff09;是一种用于图聚类的算法&#xff0c;广泛应用于生物信息学、社交网络分析、推荐系统等领域。 其核心思想是模拟随机游走过程&#xff0c;通过迭代地扩散和收缩图上的概率分布来识别图中的…

章十九、JavaVUE —— 框架、指令、声明周期、Vue-cli、组件路由、Element

目录 一、 框架 ● vue.js 框架 ● 特点 ● Vue 安装 二、 第一个vue程序 ● 创建项目 ​编辑 ● 导入 vue.js ● 创建vue对象&#xff0c;设置属性&#xff0c;使用模版渲染到页面 介绍 — Vue.js (vuejs.org) 三、 vue指令 ● v-text ● v-html ● v-…