嵌入式_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独立看门狗配置与注意事项前言一、什么是独立看门狗定时器(FWDGT)二、独立看门狗定时器原理三、独立看门狗定时器配置过程与注意事项总结 前言 使用GD3单片机时,为了提供了更高的安…...
Python 中的 JSON 操作:简单、高效的数据交换格式
在现代的数据交换和存储中,JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,备受青睐。它不仅易于阅读和理解,还可以灵活地表达和存储高维数据。本文将介绍如何在 Python 中操作 JSON 文件,…...
IT行业面试攻略:技巧与心态的平衡
引言:在面试IT公司时,调整好心态是取得优秀表现的关键。面试心态直接影响着我们在面试中的自信程度和表现。面对这一挑战,我们需要学会积极自信、认识到紧张是正常的、进行充分准备以及以积极的心态去迎接面试。只有在拥有正确的心态下&#…...
【玩转Linux】标准io缓冲区的操作
(꒪ꇴ꒪ ),hello我是祐言博客主页:C语言基础,Linux基础,软件配置领域博主🌍快上🚘,一起学习!送给读者的一句鸡汤🤔:集中起来的意志可以击穿顽石!作者水平很有限,如果发现错误&#x…...
28.JavaWeb-Elasticsearch
1.Elasticsearch概述 Elasticsearch 是一个分布式的全文检索引擎。采用Java语言开发,基于Apache协议的开源项目,具有实时搜索,稳定,可靠,快速的特点。 1.1 全文检索引擎 分为通用搜索引擎(百度、谷歌&…...
Python Flask构建微信小程序订餐系统 (十)
🔥 编辑会员信息 🔥 编辑会员信息可以通过点击会员列表操作,也可以点击会员信息详情点击进行操作 🔥 修改编程会员信息列表布局 🔥 修改 web/templates/member/index.html 文件,添加跳转到编辑会员信息的页面 web/templates/member/set.html 🔥 创建用于会员…...
j2ee相关知识点
浏览器栏中,输入的是servlet的mapping映射,请求到servlet中去,jsp路径,会跳转到对应的页面 Servlet接口位于最顶端,GenericServlet实现了Servlet,HttpServlet继承了GenericServlet 浏览器中访问Servlet映…...
Shell脚本学习-eval内置命令
这个命令,平时接触不是很多,所以不知道是什么回事。 eval内置命令: 功能:当Shell程序执行到eval语句的时候,Shell读入参数args,并将它们组合成一个新的命令,然后执行。也就是重新运算求出参数的…...
word中将合并后的多行拆分为原先的行数
word中将已经合并的多行拆分为原先的行数,我们不用刻意去数应该是多少行, 只需将拆分的行数不断增加,word会默认最大增加到合并前的行数。...
网络知识点之-BGP协议
本文章收录至《网络》专栏,点击右上角专栏图标可访问本专栏! 边界网关协议(BGP)是运行于 TCP 上的一种自治系统的路由协议。 BGP 是唯一一个用来处理像因特网大小的网络的协议,也是唯一能够妥善处理好不相关路由域间的…...
【mac系统】mac系统调整妙控鼠标速度
当下环境: mac系统版本,其他系统应该也可以,大家可以自行试下: 鼠标 mac妙控鼠标,型号A1657 问题描述: 通过mac系统自带的鼠标速度调节按钮,调到最大后还是感觉移动速度哦过慢 问题解决&…...
AI > 语音识别开源项目列举
名称所属开发机构使用场景优缺点技术特点占有率描述CMU Sphinx卡内基梅隆大学嵌入式设备、服务器应用优点:可用于嵌入式设备和服务器应用。 缺点:准确率相对较低,适用范围有限。- 支持多种语言模型和工具。- 适用于嵌入式设备和服务器应用。中…...
golang单元测试及mock总结
文章目录 一、前言1、单测的定位2、vscode中生成单测 二、构造测试case的注意事项1、项目初始化2、构造空interface{}3、构造结构体的time.Time类型4、构造json格式的test case 三、运行单测文件1、整体运行单测文件2、运行单个单测文件报错(1)command-l…...
mysql中的‘\G’ ‘\g’ ‘;’ navicat dbeaver
省流: 在navicat、dbeaver等客户端中使用时,“\G”、“\g”、“;”都可以不需要。 “\G”、“\g”、“;”都是用来做sql的结束符用。“\g”、“;”作用完全等价。“\G”是将字段横排显示转换成纵列显示。 横排显示: 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中用于获取字符串长度的函数。它接受一个字符串作为参数,并返回该字符串的字符数量(包括空格和特殊字符)。 用法: 以下是length函数的语法: length(string)其中,string是要计算长度的字符串…...
「深度学习之优化算法」(十七)灰狼算法
1. 灰狼算法简介 (以下描述,均不是学术用语,仅供大家快乐的阅读) 灰狼算法(Grey Wolf Algorithm)是受灰狼群体捕猎行为启发而提出的算法。算法提出于2013年,仍是一个较新的算法。目前为止(2020)与之相关的论文也比较多,但多为算法的应用,应该仍有研究和改进的余…...
mysql主从复制(主-从-从)
文章目录 一、前期环境准备二、主库配置1.设置server-id值并开启binlog参数2.建立同步账户并给上权限3.查看主库状态4.锁表设置只读5.备份数据库数据 三、从库配置1.设置server-id值并开启binlog参数2.还原从主库备份数据3.设定从主库同步4.启动从库同步开关 四.测试1.在主库上…...
如何制定数据采集解决方案?
数据采集仍是人工智能(AI)构建团队的主要瓶颈。原因各不相同:用例数据可能不足,深度学习等新机器学习(ML)技术需要更多数据,或者团队并未建立获取所需数据的适当流程。但无论如何,对…...
RabbitMQ消息可靠性问题及解决
说明:在RabbitMQ消息传递过程中,有以下问题: 消息没发到交换机 消息没发到队列 MQ宕机,消息在队列中丢失 消息者接收到消息后,未能正常消费(程序报错),此时消息已在队列中移除 …...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
(二)原型模式
原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...
【JavaWeb】Docker项目部署
引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…...
sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...
day36-多路IO复用
一、基本概念 (服务器多客户端模型) 定义:单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用:应用程序通常需要处理来自多条事件流中的事件,比如我现在用的电脑,需要同时处理键盘鼠标…...
