【自由看门狗配置及计算】

一、看门狗使用场景

看门狗是一个硬件计时电路,用来监测由软件故障导致的系统故障。

片上有两个看门狗定时器外设,自由看门狗定时器(FWDGT也叫独立看门狗)和窗口看门狗定时器(WWDGT)。

当嵌入式程序在运行过程中发生死机或程序跑飞的情况下,一般都是要手动进行开关机或者复位,让程序能够重新运行。但是当一个嵌入式系统被安装到一些特殊位置时,若发生死机又不能及时进行手动复位,这时就需要看门狗了。

二、自由看门狗定时器(FWDGT)时钟源

以STM32为例,其自由看门狗定时器(FWDGT)使用的是LSI(40KHz),
以GD32为例,其自由看门狗定时器(FWDGT)使用独立的时钟源(IRC40K)。

因此就算是主时钟失效了,它仍然能保持工作状态,这非常适合于需要独立环境且对计时精度要求不高的场合。

三、FWDGT 的主要特性

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

四、FWDGT 寄存器配置

以GD32为例。
自由看门狗定时器带有一个 8 级预分频器和一个 12 位的向下递减计数器。
自由看门狗定时器框图:
在这里插入图片描述

1、 FWDGT配置内容

  • 时钟源
  • 计算分频系数和重装载值(根据想要的触发周期)

2、控制寄存器 (FWDGT_CTL)

主要是通过配置不同的值来设置FWDGT的功能。
在这里插入图片描述
向控制寄存器(FWDGT_CTL)中:

  • 写入0xCCCC可开启自由看门狗定时器,计数器开始向下计数。当计数器记到0x000,产生一次复位。
  • 写入0xAAAA可重装载计数器,重装载值来源于FWDGT_RLD寄存器。
    软件可以在计数器计数值达到0x000之前可以通过重装载计数器来阻止看门狗定时器复位。

3、预分频寄存器 (FWDGT_PSC)

在这里插入图片描述
在这里插入图片描述

该寄存器用于存储FWDGT的分频系数。由上图可知,只有低3位是可以读写的,若分频系数设为64时,写入寄存器的值为0x04.

4、重装载寄存器 (FWDGT_RLD)

在这里插入图片描述
该寄存器用于存储递减计数器的重装载值,就是预先设置一个值,计数启动后,递减计数器从该值开始递减,当递减至0的时候就将该值赋给递减计数器,继续开始下一轮递减,周而复始,直至计时结束;
在这里插入图片描述
用户手册给出了各种分频系数下最大支持的计数周期,比如分频系数选择64,则在最大计数值4096的限制下,其支持得到的最大计数周期为6553.6ms.。若你想要的触发周期是10s,就不能选择64分频,可选择128、256作为分频系数。

5、状态寄存器 (FWDGT_STAT)

判断FWDGT的状态在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
由上可知:FWDGT和普通定时器的原理是一样的,也是通过设置一个频率,然后不停地进行计数。不同的是FWDGT当计数值超过设定值时,若不进行喂狗,就会复位系统,需要注意的是,看门狗一旦启动就不能停止,只能通过复位或掉电停止。

五、FWDGT 计数频率计算

计算公式:
Tout = ( 1 / (时钟源频率/ 分频系数)) * 重载值
注意:重载值最大值为4096.
假设自由看门狗的溢出时间Tout为1s,当着1s之内不进行喂狗的话,独立看门狗就会复位系统。

示例:
自由看门狗时钟源:40KHZ
期望触发周期:1s
由上可知,满足周期1s的,可以选择16、32 64 128 256

以32分频:
独立看门狗计数时钟频率f=40KHz/32=1250Hz;
计数一次耗时t=1/f=1/1250s;
计时1s时,需要计数次数n=1250;
Tout = ( 1 / (40KHz/ 32)) * 1250
即看门狗配置为:
预分频为32,重装载值为1250;

/*配置独立时钟源*/
//enable IRC40K
rcu_osci_on(RCU_IRC40K);
//wait till IRC40K is ready
rcu_osci_stab_wait(RCU_IRC40K);/*设置看门狗预分频系数和重装载值*/
fwdgt_config(1250, FWDGT_PSC_DIV32);
fwdgt_enable();/*在程序中定期喂狗,否则将导致程序重启*/
fwdgt_counter_reload();//喂狗

注意:“定期”的意思是在看门狗触发周期内.

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

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

相关文章

conda 创建、激活、退出、删除虚拟环境

一、conda 本地环境常用操作 #获取版本号 conda --version 或 conda -V #检查更新当前conda conda update conda #查看当前存在哪些虚拟环境 conda env list 或 conda info -e #查看--安装--更新--删除包 conda list: conda search package_name# 查询包 cond…

Centos 更换yum国内源的命令 -- yum更新速度太慢问题

【Linux】yum | 更新为国内源 | 删除源 | 删除repo | CentOS7_linux如何删除repo文件-CSDN博客

Linux程序调试优化(1)——内存占用详解及优化思路

文章目录 1.free查看总体的内存占用2./proc/$PID/status 查看某进程状态 linux开发最重要的两个参数,分别是内存以及CPU使用率,若内存出现严重不足,则在需要使用内存时,可能出现申请不到的情况,导致 OOM,L…

不出天府锋巢直播产业基地,即可激活电商直播产业、产教融合及人才培训服务

天府锋巢直播产业基地打造直播产业产教融合及人才培训服务新模式,携手政府、企业、高校,促进直播产业与创新人才双向奔赴,推进教学与实战深度融合,推动实习与就业无缝衔接。 各方资讯一应俱全 直播产业产教融合及人才培训服务全套…

ArrayList扩容

在Java中,ArrayList是一个动态数组,它允许在运行时改变其大小。当向ArrayList添加元素并且当前数组容量不足以容纳新元素时,ArrayList会自动扩容。 扩容原理 初始容量:当创建一个新的ArrayList时,可以指定一个初始容量…

DFS专题:力扣岛屿问题(持续更新)

DFS专题:力扣岛屿问题 开篇 每次做到DFS相关的题目都是直接跳过。蓝桥杯过后痛定思痛,好好学习一下DFS和BFS。先从DFS开始吧。 参考题解:nettee:岛屿类问题的通用解法、DFS 遍历框架 一、岛屿数量 题目链接: 200.岛屿数量 题…

x86_64/amd64和arm64区别

1.概况 x86_64(也称为AMD64或x64)和ARM64是两种不同的处理器架构,它们在设计理念、应用场景和性能特点上有所区别。 2.设计理念 x86_64架构起源于Intel的x86架构,它是对原始32位x86架构的扩展,增加了对64位计算的支…

Vue3学习05 一些API

Vue3-API 其它 API【shallowRef 与 shallowReactive 】shallowRefshallowReactive总结 【readonly 与 shallowReadonly】readonlyshallowReadonly 【toRaw 与 markRaw】toRawmarkRaw 【customRef】 Vue3新组件【Teleport】【Suspense】【全局API转移到应用对象】【其他】 其它 …

webuploader后端开发要点

百度fex团队的webuploader是一个很方便的web页面文件上传轮子,可以很方便地集成到前端html和js里,当然了,后端需要咱们自己开发实现。比较遗憾的是webuploader现在已经从百度的fex主页移除了,该项目可能已经不再维护了。 关于后端…

java小作业(9)----用函数实现斐波那契数列(第二遍)

代码&#xff1a; public class Main {public static void main(String[] args) {int n 20; // 你可以更改这个值来计算和输出前n个斐波那契数for (int i 0; i < n; i) {System.out.print(fibonacci(i) " ");}}public static int fibonacci(int n) {if (n <…

BackTrader 中文文档(一)

原文&#xff1a;www.backtrader.com/ 主页 欢迎来到 backtrader&#xff01; 原文&#xff1a;www.backtrader.com/ 一个功能丰富的 Python 框架&#xff0c;用于回测和交易 backtrader允许您专注于编写可重复使用的交易策略、指标和分析器&#xff0c;而不必花时间构建基础…

Android T多屏多显——应用双屏间拖拽移动功能(更新中)

功能以及显示效果简介 需求&#xff1a;在双屏显示中&#xff0c;把启动的应用从其中一个屏幕中移动到另一个屏幕中。 操作&#xff1a;通过双指按压应用使其移动&#xff0c;如果移动的距离过小&#xff0c;我们就不移动到另一屏幕&#xff0c;否则移动到另一屏。 功能分析…

振弦式渗压计的安装与防护:在水工建筑物中的关键应用

振弦式渗压计&#xff0c;作为一种高效的孔隙水压力或液体液位测量工具&#xff0c;广泛应用于水工建筑物、基岩内、测压管、钻孔、堤坝、管道和压力容器内。其安装和防护工作至关重要&#xff0c;直接关系到测量数据的准确性和仪器的使用寿命。本文将重点探讨振弦式渗压计在填…

RabbitMQ实战教程(1)

RabbitMQ 一、RabbitMQ介绍 1.1 现存问题 服务调用&#xff1a;两个服务调用时&#xff0c;我们可以通过传统的HTTP方式&#xff0c;让服务A直接去调用服务B的接口&#xff0c;但是这种方式是同步的方式&#xff0c;虽然可以采用SpringBoot提供的Async注解实现异步调用&…

Ue不消耗輸入

1、介紹 我們都知道ue裏面使用輸入時&#xff0c;都是在PlayerController裏面進行獲取&#xff0c; 使用官方的操作映射&#xff0c;軸映射&#xff0c;以及目前最新的增强型輸入 但是我們發現了一個問題 那就是輸入會被消耗 就是儅我鼠標按在一個按鈕上時 你另一個地方接受…

Elastic安装后 postman对elasticsearch进行测试

一、创建索引和mapping //id 字段自增id //good_sn 商品SKU //good_name 商品名称 //good_introduction 商品简介 //good_descript 商品详情 PUT http://IP:9200/shop { "mappings":{ "good":{ "properties":{ …

Qt显示对话框程序崩溃

问题描述 创建一个继承自QDialog的对话框DialogA&#xff0c;在主窗体显示之前进行显示&#xff0c;当执行DialogA的exec函数时&#xff0c;程序崩溃&#xff0c;提示&#xff1a;Critical error detected c0000374 问题排查 查看DialogA类中的内存创建是否存在异常&#xff0c…

UDF小白入门

UDF小白入门 创建一个函数(普通的Python函数)将成绩转换到考察等级 在PySpark中&#xff0c;使用UDF涉及有三个步骤&#xff1a; 前置&#xff1a;先创建一个spark dataframe from pyspark.sql import SparkSession from pyspark.sql.functions import *spark SparkSession.bu…

LabVIEW光学探测器板级检测系统

LabVIEW光学探测器板级检测系统 特种车辆乘员舱的灭火抑爆系统广泛采用光学探测技术来探测火情。光学探测器作为系统的关键部件&#xff0c;其探测灵敏度、响应速度和准确性直接关系到整个系统的运行效率和安全性。然而&#xff0c;光学探测器在长期使用过程中可能会因为灰尘污…

牛客Linux高并发服务器开发学习第一天

Linux开发环境搭建 安装Xshell 7远程连接虚拟机的Ubuntu 安装Xftp 7可以传输文件(暂时还没使用) 安装VMware Tools可以直接从Windows系统向虚拟机Linux系统拖拽文件实现文件交互。 安装CScode可以远程连接Linux系统进行代码的编写。&#xff08;Windows系统与Linxu系统公钥…