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

嵌入式_GD32看门狗配置

嵌入式_GD32独立看门狗配置与注意事项


文章目录

  • 嵌入式_GD32独立看门狗配置与注意事项
  • 前言
  • 一、什么是独立看门狗定时器(FWDGT)
  • 二、独立看门狗定时器原理
  • 三、独立看门狗定时器配置过程与注意事项
  • 总结


前言

使用GD3单片机时,为了提供了更高的安全性、时间的精确性和使用的灵活性。独立看门狗定时器可用来检测和解决由软件错误引起的故障;在此简单记录一下GD32独立看门狗的配置过程和注意事项。

注:本项目基于GD32F103CBT6硬件平台,看门狗使用时钟源为40kHz(IRC40K), 使用标准库GD32F10x_Firmware_Library_V1.0.0(提示:此库坑多、慎用!)

一、什么是独立看门狗定时器(FWDGT)

独立看门狗定时器(FWDGT) 有独立的时钟源(IRC40K) 。 即使主时钟失效, FWDGT依然能保持正常工作状态,适用于需要独立环境且对计时精度要求不高的场合。当内部向下计数器的计数值达到0,独立看门狗会产生一个系统复位。使能独立看门狗的寄存器写保护功能可以避免寄存器的值被意外的配置篡改,主要特征如下:

■ 自由运行的12位向下计数器;
■ 使能看门狗定时器,当向下计数器的值达到0时产生系统复位;
■ 独立时钟源,独立看门狗定时器在主时钟故障(例如待机和深度睡眠模式下) 时仍能工作
■ 独立看门狗定时器硬件控制位,用来控制是否在上电时自动启动独立看门狗定时器;
■ 可以配置独立看门狗定时器在调试模式下选择停止还是继续工作

二、独立看门狗定时器原理

在这里插入图片描述
1.向控制寄存器(FWDGT_CTL) 中写0xCCCC可开启独立看门狗定时器,计数器开始向下计数。当计数器记到0x000,产生一次系统位。2.在任何时候向FWDGT_CTL中写0xAAAA都可以重装载计数器,重装载值来源于重装载寄存器(FWDGT_RLD) 寄存器。软件可以在计数器计数值达到0x000之前可以通过重装载计数器来阻止看门狗定时器产生系统复位。
3.如果在选项字节中打开了“硬件看门狗定时器”功能,那么在上电的时候看门狗定时器就被自动打开。
4.为了避免系统复位,软件应该在计数器达到0x000之前重装载计数器。
5.预分频寄存器(FWDGT_PSC) 和FWDGT_RLD寄存器都有写保护功能。在写数据到这些寄存器之前,需要写0x5555到FWDGT_CTL中。写其他任何值到FWDGT_CTL中将会再次启动对这些寄存器的写保护。
6.当FWDGT_PSC或者FWDGT_RLD更新时, FWDGT_STAT寄存器的相应状态位会被置1。
7.如果在DBG控制寄存器0(DBG_CTL0) 中的FWDGT_HOLD位被清0,即使Cortex®-M3内核停止(调试模式下) 独立看门狗定时器依然工作。如果FWDGT_HOLD位被置1,独立看门狗定时器将在调试模式下停止工作

注1:关于状态寄存器的RUD和PUD位说明
在这里插入图片描述在这里插入图片描述

注2:因为重装载寄存器的宽度只有12位,所以最大数值为4095,按照看门狗使用时钟源为40kHz(IRC40K)来计算:
复位时间T_out = (Prer * Rlr)/ 40 (ms)
Prer 为下图预分频系数的倒数, Rlr为重装载计数器的的装载值
在这里插入图片描述

三、独立看门狗定时器配置过程与注意事项

根据程序运行时间来估计一个看门狗复位时间,例如我们需要配置一个复位周期时间为200ms的独立看门狗,步骤如下:
1.计算:配置预分频系数为32,重装载值为250 (200ms = (32*250)/40)
2.需要写0x5555到FWDGT_CTL中,解除解除FWDGT_PSC寄存器和FWDGT_RLD寄存器的写保护,
3.等待等待FWDGT_STAT寄存器的PUD位被置0,可进行设置预分频系数.
4.等待等待FWDGT_STAT寄存器的RUD位被置0,可进行设置重装载数值.
5.重装载计数器,
6.开启独立看门狗,
7.检查是否设置了指定独立看门狗的RCC标志,如果被置起选择清除
8.200ms内喂狗

代码如下(示例):

/************************************************************************功能块说明:宏定义***********************************************************************/
#define FWDG_WRITEACCESS_ENABLE     (0x5555U)
#define FWDG_WRITEACCESS_DISABLE    (0x0000U)
#define FWDG_KEY_RELOAD             (0xCCCCU)
#define FWDG_KEY_ENABLE             (0xAAAAU)#define FWDG_INIT_TIMEOUT           (800u)
#define FWDG_TIMEOUT_200MS          (500u)/************************************************************************功能块说明:看门狗初始化***********************************************************************/
void FWDG_Init(void)
{uint16_t FWDG_Counter = 0;TypeState Flag_Status;/*解除FWDGT_PSC寄存器和FWDGT_RLD寄存器的写保护*/IWDG_Write_Enable(FWDG_WRITEACCESS_ENABLE);/*等待FWDGT_STAT寄存器的PUD位被置0*/do{Flag_Status = IWDG_GetBitState(IWDG_BIT_PUD);FWDG_Counter++;}while((FWDG_Counter < FWDG_INIT_TIMEOUT) && (RESET != Flag_Status));if(Flag_Status != RESET){/*INIT Fail*/}else{/*32分频,最小计数时间0.8ms*/IWDG_SetPrescaler(IWDG_PRESCALER_32);}FWDG_Counter = 0;/*等待FWDGT_STAT寄存器的RUD位被置0*/do{Flag_Status = IWDG_GetBitState(IWDG_BIT_RUD);FWDG_Counter++;}while((FWDG_Counter < FWDG_INIT_TIMEOUT) && (RESET != Flag_Status));if(Flag_Status != RESET){/*INIT Fail*/}else{/*设置装载值250*/IWDG_SetReloadValue(FWDG_TIMEOUT_200MS);}/*重装载计数器*/IWDG_ReloadCounter();/*开启独立看门狗*/IWDG_Enable();/*Check if the system has resumed from IWDG reset */if (RCC_GetBitState(RCC_FLAG_IWDGRST) != RESET){RCC_ClearBitState();}   
}/*喂狗函数*/
void FWDG_FeedWdg(void)
{IWDG_ReloadCounter();
}

总结

1.看门狗是把双刃剑,使用与不适用需要根据程序的实际情况来确定,如果要依靠频繁使用看门狗复位来修正程序,那一定不是件好事。
2.调试过程最好提前关闭看门狗,否则会有意想不到的bug…

相关文章:

嵌入式_GD32看门狗配置

嵌入式_GD32独立看门狗配置与注意事项 文章目录 嵌入式_GD32独立看门狗配置与注意事项前言一、什么是独立看门狗定时器&#xff08;FWDGT&#xff09;二、独立看门狗定时器原理三、独立看门狗定时器配置过程与注意事项总结 前言 使用GD3单片机时&#xff0c;为了提供了更高的安…...

Python 中的 JSON 操作:简单、高效的数据交换格式

在现代的数据交换和存储中&#xff0c;JSON&#xff08;JavaScript Object Notation&#xff09;作为一种轻量级的数据交换格式&#xff0c;备受青睐。它不仅易于阅读和理解&#xff0c;还可以灵活地表达和存储高维数据。本文将介绍如何在 Python 中操作 JSON 文件&#xff0c;…...

IT行业面试攻略:技巧与心态的平衡

引言&#xff1a;在面试IT公司时&#xff0c;调整好心态是取得优秀表现的关键。面试心态直接影响着我们在面试中的自信程度和表现。面对这一挑战&#xff0c;我们需要学会积极自信、认识到紧张是正常的、进行充分准备以及以积极的心态去迎接面试。只有在拥有正确的心态下&#…...

【玩转Linux】标准io缓冲区的操作

(꒪ꇴ꒪ ),hello我是祐言博客主页&#xff1a;C语言基础,Linux基础,软件配置领域博主&#x1f30d;快上&#x1f698;&#xff0c;一起学习&#xff01;送给读者的一句鸡汤&#x1f914;&#xff1a;集中起来的意志可以击穿顽石!作者水平很有限&#xff0c;如果发现错误&#x…...

28.JavaWeb-Elasticsearch

1.Elasticsearch概述 Elasticsearch 是一个分布式的全文检索引擎。采用Java语言开发&#xff0c;基于Apache协议的开源项目&#xff0c;具有实时搜索&#xff0c;稳定&#xff0c;可靠&#xff0c;快速的特点。 1.1 全文检索引擎 分为通用搜索引擎&#xff08;百度、谷歌&…...

Python Flask构建微信小程序订餐系统 (十)

🔥 编辑会员信息 🔥 编辑会员信息可以通过点击会员列表操作,也可以点击会员信息详情点击进行操作 🔥 修改编程会员信息列表布局 🔥 修改 web/templates/member/index.html 文件,添加跳转到编辑会员信息的页面 web/templates/member/set.html 🔥 创建用于会员…...

j2ee相关知识点

浏览器栏中&#xff0c;输入的是servlet的mapping映射&#xff0c;请求到servlet中去&#xff0c;jsp路径&#xff0c;会跳转到对应的页面 Servlet接口位于最顶端&#xff0c;GenericServlet实现了Servlet&#xff0c;HttpServlet继承了GenericServlet 浏览器中访问Servlet映…...

Shell脚本学习-eval内置命令

这个命令&#xff0c;平时接触不是很多&#xff0c;所以不知道是什么回事。 eval内置命令&#xff1a; 功能&#xff1a;当Shell程序执行到eval语句的时候&#xff0c;Shell读入参数args&#xff0c;并将它们组合成一个新的命令&#xff0c;然后执行。也就是重新运算求出参数的…...

word中将合并后的多行拆分为原先的行数

word中将已经合并的多行拆分为原先的行数&#xff0c;我们不用刻意去数应该是多少行&#xff0c; 只需将拆分的行数不断增加&#xff0c;word会默认最大增加到合并前的行数。...

网络知识点之-BGP协议

本文章收录至《网络》专栏&#xff0c;点击右上角专栏图标可访问本专栏&#xff01; 边界网关协议&#xff08;BGP&#xff09;是运行于 TCP 上的一种自治系统的路由协议。 BGP 是唯一一个用来处理像因特网大小的网络的协议&#xff0c;也是唯一能够妥善处理好不相关路由域间的…...

【mac系统】mac系统调整妙控鼠标速度

当下环境&#xff1a; mac系统版本&#xff0c;其他系统应该也可以&#xff0c;大家可以自行试下&#xff1a; 鼠标 mac妙控鼠标&#xff0c;型号A1657 问题描述&#xff1a; 通过mac系统自带的鼠标速度调节按钮&#xff0c;调到最大后还是感觉移动速度哦过慢 问题解决&…...

AI > 语音识别开源项目列举

名称所属开发机构使用场景优缺点技术特点占有率描述CMU Sphinx卡内基梅隆大学嵌入式设备、服务器应用优点&#xff1a;可用于嵌入式设备和服务器应用。 缺点&#xff1a;准确率相对较低&#xff0c;适用范围有限。- 支持多种语言模型和工具。- 适用于嵌入式设备和服务器应用。中…...

golang单元测试及mock总结

文章目录 一、前言1、单测的定位2、vscode中生成单测 二、构造测试case的注意事项1、项目初始化2、构造空interface{}3、构造结构体的time.Time类型4、构造json格式的test case 三、运行单测文件1、整体运行单测文件2、运行单个单测文件报错&#xff08;1&#xff09;command-l…...

mysql中的‘\G’ ‘\g’ ‘;’ navicat dbeaver

省流&#xff1a; 在navicat、dbeaver等客户端中使用时&#xff0c;“\G”、“\g”、“;”都可以不需要。 “\G”、“\g”、“;”都是用来做sql的结束符用。“\g”、“;”作用完全等价。“\G”是将字段横排显示转换成纵列显示。 横排显示&#xff1a; id |e…...

驱动day4work

头文件 #ifndef __CKR_H__ #define __CKR_H__typedef struct {unsigned int MODER; // 00unsigned int OTYPER; // 04unsigned int OSPEEDR; // 08unsigned int PUPDR; // 0Cunsigned int IDR; // 10unsigned int ODR; // 14 } gpio_t;// GPIO口 #define PHY_GPI…...

[SQL挖掘机] - 字符串函数 - length

介绍: length函数是mysql中用于获取字符串长度的函数。它接受一个字符串作为参数&#xff0c;并返回该字符串的字符数量&#xff08;包括空格和特殊字符&#xff09;。 用法: 以下是length函数的语法&#xff1a; length(string)其中&#xff0c;string是要计算长度的字符串…...

「深度学习之优化算法」(十七)灰狼算法

1. 灰狼算法简介 (以下描述,均不是学术用语,仅供大家快乐的阅读)   灰狼算法(Grey Wolf Algorithm)是受灰狼群体捕猎行为启发而提出的算法。算法提出于2013年,仍是一个较新的算法。目前为止(2020)与之相关的论文也比较多,但多为算法的应用,应该仍有研究和改进的余…...

mysql主从复制(主-从-从)

文章目录 一、前期环境准备二、主库配置1.设置server-id值并开启binlog参数2.建立同步账户并给上权限3.查看主库状态4.锁表设置只读5.备份数据库数据 三、从库配置1.设置server-id值并开启binlog参数2.还原从主库备份数据3.设定从主库同步4.启动从库同步开关 四.测试1.在主库上…...

如何制定数据采集解决方案?

数据采集仍是人工智能&#xff08;AI&#xff09;构建团队的主要瓶颈。原因各不相同&#xff1a;用例数据可能不足&#xff0c;深度学习等新机器学习&#xff08;ML&#xff09;技术需要更多数据&#xff0c;或者团队并未建立获取所需数据的适当流程。但无论如何&#xff0c;对…...

RabbitMQ消息可靠性问题及解决

说明&#xff1a;在RabbitMQ消息传递过程中&#xff0c;有以下问题&#xff1a; 消息没发到交换机 消息没发到队列 MQ宕机&#xff0c;消息在队列中丢失 消息者接收到消息后&#xff0c;未能正常消费&#xff08;程序报错&#xff09;&#xff0c;此时消息已在队列中移除 …...

3.3.1_1 检错编码(奇偶校验码)

从这节课开始&#xff0c;我们会探讨数据链路层的差错控制功能&#xff0c;差错控制功能的主要目标是要发现并且解决一个帧内部的位错误&#xff0c;我们需要使用特殊的编码技术去发现帧内部的位错误&#xff0c;当我们发现位错误之后&#xff0c;通常来说有两种解决方案。第一…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集&#xff0c;包含8种湿地亚类&#xff0c;该数据以0.5X0.5的瓦片存储&#xff0c;我们整理了所有属于中国的瓦片名称与其对应省份&#xff0c;方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

04-初识css

一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

Java面试专项一-准备篇

一、企业简历筛选规则 一般企业的简历筛选流程&#xff1a;首先由HR先筛选一部分简历后&#xff0c;在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如&#xff1a;Boss直聘&#xff08;招聘方平台&#xff09; 直接按照条件进行筛选 例如&#xff1a…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec&#xff1f; IPsec VPN 5.1 IPsec传输模式&#xff08;Transport Mode&#xff09; 5.2 IPsec隧道模式&#xff08;Tunne…...

C#中的CLR属性、依赖属性与附加属性

CLR属性的主要特征 封装性&#xff1a; 隐藏字段的实现细节 提供对字段的受控访问 访问控制&#xff1a; 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性&#xff1a; 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑&#xff1a; 可以…...

力扣热题100 k个一组反转链表题解

题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...

MFE(微前端) Module Federation:Webpack.config.js文件中每个属性的含义解释

以Module Federation 插件详为例&#xff0c;Webpack.config.js它可能的配置和含义如下&#xff1a; 前言 Module Federation 的Webpack.config.js核心配置包括&#xff1a; name filename&#xff08;定义应用标识&#xff09; remotes&#xff08;引用远程模块&#xff0…...

comfyui 工作流中 图生视频 如何增加视频的长度到5秒

comfyUI 工作流怎么可以生成更长的视频。除了硬件显存要求之外还有别的方法吗&#xff1f; 在ComfyUI中实现图生视频并延长到5秒&#xff0c;需要结合多个扩展和技巧。以下是完整解决方案&#xff1a; 核心工作流配置&#xff08;24fps下5秒120帧&#xff09; #mermaid-svg-yP…...