独立看门狗与窗口看门狗

news2024/11/15 9:14:04

定义

看门狗的本质是一个定时器,在启动后,需要在一定时间内再给它一个信号,俗称“喂狗”,如果没有按时“喂狗”,说明MCU可能处于非正常状态,这时看门狗就向MCU发送个复位信号,使整个系统重启,重新进入正常的工作状态。看门狗命令在程序的中断中拥有最高的优先级。

独立看门狗( Independent Watchdog, IWDG)

在这里插入图片描述

时钟:独立看门狗的时钟源来自LSI(内部低速时钟),意味着不受外部晶振电路影响,同时就算系统主时钟发生故障时,也可以正常工作。使用内部晶振,也意味精度并不高,因此只适合应用在对时间精度要求比较低的场合。

计数:独立看门狗的计数器是一个12位的递减计数器,计数最大值为0xFFF,当计数器递减到0时,就会产生一个复位信号,重启整个系统。如果在递减到0之前,将重装载数值写入递减计数器,就会由重装载数值开始递减到0,如此反复,就永远不会到0,就不会产生复位信号,这个重装载计数值写入递减计数器的过程就叫“喂狗”。
重装载数值来自重装载寄存器( IWDG_RLR), 这个值大小决定独立看门狗的溢出时间(复位倒计时)。

/*
* STM32
* 函数名: void IWDG_Init(uint16_t period)
* 输入参数: period-设置喂狗周期,单位 ms
* 输出参数:无
* 返回值:无
* 函数作用:初始化独立看门狗的喂狗时间
* 刷新时间计算: Prescaler/LSI*Reload
*/
void IWDG_Init(uint16_t period) {
    hiwdg.Instance = IWDG; // 选择独立看门狗
    hiwdg.Init.Prescaler = IWDG_PRESCALER_256; // 设置预分频
    hiwdg.Init.Reload = 40000/256*period/1000; // 设置重装载值
    if (HAL_IWDG_Init(&hiwdg) != HAL_OK) // 初始化独立看门狗
    {
        Error_Handler();
    }
}  

总结:独立看门狗包含一个12位递减计数器,从用户定义的t开始递减到0,必须在t~0之间喂狗,否则复位重启。

窗口看门狗( Windowwatchdog, WWDG)

在这里插入图片描述

窗口看门狗,包含一个7位递减计数器,从用户定义的t开始递减到64,必须在t~64之间喂狗,在t之前或者64之后喂狗,也会导致复位重启。 这里的t值,称之为窗口上限,由用户自定义设置;这里的64,称之为窗口下限,是系统固定的。窗口看门狗计数器必须在上窗口和下窗口之间被刷新(喂狗),不能过早,也不能过晚,这也就窗口看门狗中的“窗口”含义。

时钟:窗口看门狗的时钟源来自PCLK1(最高36MHz),经过4096分频,再经过WWDG_CFG的Bits[8:7]位WDGTB分频得到, WDGTB支持2^n分频( 0≤n≤3)。

计数: 窗口看门狗的计数器是一个7位的递减计数器,计数最大值为0x7F,当计数器递减到0x3F时,就会产生一个复位信号,重启整个系统。 当递减计数器递减到0x40时,如果使能了提前唤醒中断( WWDG_CFG的Bits[9]位EWI设置为1), 则会产生提前唤醒中断,在该中断可以保存重要数据或者向WWDG_CR重新写入新计数器值,完成喂狗操作。 一旦0x40变为0x39,系统将进行复位,因此必须在一个窗口看门狗计数周期内完成喂狗操作。WWDG_CR的Bits[7]位WDGA为窗口看门狗使能位,当为1时,窗口看门狗才工作。

在这里插入图片描述

窗口:窗口看门狗的WWDG_CFG的Bits[6:0]位为窗口上边界值,该值应小于计数器最大值0x7F,大于窗口下边界值0x3F。

窗口看门狗初始化
“HAL_WWDG_Init()–HAL库系统函数”函数会回调“ HAL_WWDG_MspInit()–HAL库系统函数”进行硬件相关初始化。
在这里插入图片描述

窗口看门狗中断处理
使能中断后,当窗口看门狗计数到0x40时,会进去提前唤醒中断,在该中断处理函数里,用户可以保存数据或喂狗。

/*
* 函数名: void WWDG_IRQHandler(void)
* 输入参数:无
* 输出参数:无
* 返回值:无
* 函数作用: WWDG 的中断处理函数
*/  
void WWDG_IRQHandler(void) {
    HAL_WWDG_IRQHandler(&hwwdg);  // HAL库的系统函数
}  


/*
* 函数名: void HAL_WWDG_EarlyWakeupCallback(WWDG_HandleTypeDef* hwwdg)
* 输入参数: hwwdg-WWDG 句柄
* 输出参数:无
* 返回值:无
* 函数作用:提前唤醒中断回调函数
*/  
void HAL_WWDG_EarlyWakeupCallback(WWDG_HandleTypeDef* hwwdg) { 
    ClearWWDG(); // 用户函数内调用HAL库的系统函数“ HAL_WWDG_Refresh()”刷新计数器值,实现喂狗操作  
    printf("-------复位前保存数据------\n\r");
    printf("--------- 软件喂狗 --------\n\r");
}   

对比

在这里插入图片描述

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

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

相关文章

51单片机数码管显示

文章目录前言一、数码管简介二、数码管原理图三、数码管显示原理四、静态数码管代表编写五、动态数码管总结前言 这篇文章将介绍数码管的显示其中包含了动态数码管和静态数码管两种。 一、数码管简介 数码管其实就是由多个发光二极管封装在一起组成“8”字型的器件当分别点亮…

【数据结构】超详细——堆的实现

一、堆的概念及性质 1.1 什么是堆? 堆是一种完全二叉树(具体在下一章讲述),若二叉树的深度h,除了第h层外其余各层节点数满了,只有第h层缺额且该层结点靠左;任何一个数组可以看作完全二叉树&…

【14】C语言_函数简介

目录 1、C语言中函数的分类: 2、库函数 3、自定义函数 1、C语言中函数的分类: 1.库函数 2.自定义函数 2、库函数 为什么会有库函数? 1.我们知道在我们学习C语言编程的时候,总是在一个代码编写完成之后迫不及待的想知道结果,想把这个结果打印到我们的屏…

ESP32设备驱动-LX1972可见光传感器驱动

LX1972可见光传感器驱动 1、LX1972介绍 LX1972 是一款低成本硅光传感器,其光谱响应非常接近人眼。专利电路在 520nm 处产生峰值光谱响应,IR 响应小于峰值响应的 5%,高于 900nm。 光电传感器是一个 PIN 二极管阵列,具有线性、准确和非常可重复的电流传递函数。 芯片上的…

扫盲-从零开始搭建阿里云流媒体服务器/音视频编解码/

1.基础概念 2.简单模式-HTTP文件服务器 存储采用NAS,服务器配置 采用FASTDFS (192条消息) Linux新手入门系列:FastDFS单机部署一键安装脚本_IT小胖豆的博客-CSDN博客 有几个坑: 常用命令: tail -20f /usr/local/nginx/logs/er…

3小时精通opencv(三)图片裁剪与形状绘制

3小时精通opencv(三)图片裁剪与形状绘制 参考视频资源:3h精通Opencv-Python 文章目录3小时精通opencv(三)图片裁剪与形状绘制图片裁剪绘制形状绘制直线绘制矩形绘制圆形绘制文字整体代码图片裁剪 图片裁剪不需要使用opencv中特有的函数, 对于opencv中读取到的图像, 直接当做矩…

15. python数据类型转换

1. 隐式类型转换 - 自动完成 在隐式类型转换中,Python 会自动将一种数据类型转换为另一种数据类型,不需要我们去干预。 (1) 以下实例中,我们对两种不同类型的数据进行运算,较低数据类型(整数)就会转换为较…

java 探花交友项目day4 MongoDB

数据库表 接口定义 其他都比较简单 我们讲黑名单查询页面的设计 DubboService public class BlackListApiImpl extends ServiceImpl<BlackListMapper,BlackList> implements BlackListApi{Autowiredprivate BlackListMapper blackListMapper;Autowiredprivate UserInf…

Allegro如何输出坐标文件操作指导

Allegro如何输出坐标文件操作指导 PCB在SMT的时候会需要用坐标文件,Allegro支持输出坐标文件,如下图 具体操作如下 选择Tools选择report出现repor

LINUX学习之正则表达式(十二)

普通正则 元字符 元字符匹配描述.匹配除了换行符以外的任意单个字符*前导字符出现0次或连续多次.*任意长度字符^行首(以…开头)$行尾(以…结尾)^$空行[]匹配括号里任意单个字符或一组单个字符[^]匹配不包含括号里任一单个字符或一组单个字符^[]匹配以括号里任意单个字符或一组…

Python技能树-推导式

Python 列表推导式(1) Python 独步天下的推导式表达式&#xff0c;使用列表推导式过滤出偶数列表 # -*- coding: UTF-8 -*- if __name__ __main__:list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]print()print("# 使用列表推导式过滤出偶数")# TODO(you): 请在此实现过滤代…

Allegro如何添加平衡铜操作指导

Allegro如何添加平衡铜操作指导 PCB在加工的时候,工厂会添加平衡铜,Allegro支持自动加上平衡铜,如下图 具体操作如下 选择Manufacture点击Thieving

比较器: Comparable 与 Comparator 区别

比较器&#xff1a; Comparable 与 Comparator 区别 每博一文案 师父说: 人不能精得过火&#xff0c;太精明的人往往让人生厌&#xff0c;人也别傻的可怜&#xff0c;一腔热血付出却白忙一场。 太精明的人&#xff0c;凡事都想要争个明明白白&#xff0c;每一分钱都要和人计较…

macOS Ventura 13.1 系统问题:掉电快 充电慢

今年一月份升级了 MBA 的系统&#xff0c;之后的笔记本&#xff1a; 使用过程&#xff1a;电量不禁用&#xff0c;掉电很快。 充电过程&#xff1a;很慢。而且存在一定几率&#xff1a;电量充到某个值&#xff08;如30%&#xff09;之后不管再充多久还是这个电量值。 系统信息…

HDFS高可用单NameNode从standby恢复为active(二)

1、背景 有一个hdfs高可用集群&#xff0c;因为某些操作&#xff0c;导致其中一个namenode的信息全部丢失了。最后只剩下一个完整的namenode信息和datanode信息。于是在在启动hdfs后发现独有的namenode始终处于standby状态。即使通过hdfs haadmin -transitionToActive命令也不能…

java面向接口编程2023027

那就再进一步&#xff1a;面向接口编程 面向接口编程前面已经提到&#xff0c;接口体现的是一种规范和实现分离的设计哲学&#xff0c;充分利用接口可以极好地降低程序各模块之间的耦合&#xff0c;从而提高系统的可扩展性和可维护性。 基于这种原则&#xff0c;很多软件架构设…

Leetcode——第 329 场周赛

题目链接&#xff1a; 交替数字和 根据第 K 场考试的分数排序 执行逐位运算使字符串相等 拆分数组的最小代价 题目描述 交替数字和 给你一个正整数 n 。n中的每一位数字都会按下述规则分配一个符号&#xff1a; 最高有效位 上的数字分配到 正 号。 剩余每位上数字的符号都与…

学习记录666@项目管理之项目质量管理

什么项目质量管理 所谓项目质量&#xff0c;是项目满足需求的程度&#xff1b;所谓质量管理&#xff0c;就是为了使项目满足需求的程度足够高或者是合适程度下而进行的一系列管理活动。 包括规划质量管理、实施质量保证、质量控制三个方面。 规划质量管理 规划质量管理主要…

JUC面试(七)——CountDownLatchCyclicBarrierSemaphore

CountDownLatch 概念 让一些线程阻塞直到另一些线程完成一系列操作才被唤醒 CountDownLatch主要有两个方法&#xff0c;当一个或多个线程调用await方法时&#xff0c;调用线程就会被阻塞。其它线程调用CountDown方法会将计数器减1&#xff08;调用CountDown方法的线程不会被…

nacos源码分析==客户端从服务端读取配置文件-服务端服务注册

客户端从服务端读取配置文件 客户端启动的时候会扫描到boostrap.yml中的信息&#xff0c;扫描到标签ConditionalOnProperty会将NacosConfigBootstrapConfiguration 中的bean注入。其中NacosConfigProperties就是读取的boostrap.yml中spring.cloud.nacos.config下的配置项。Nac…