江协科技STM32学习笔记(第13章 WDG看门狗)

第13章 WDG看门狗

13.1 WDG看门狗

13.1.1 WDG简介

看门狗就是程序运行的一个保障措施,我们得在程序中定期地喂狗,如果程序卡死了,没有在规定的时间里喂狗,那么看门狗硬件电路就会自动帮我们复位一下,防止程序长时间卡死,起到重启的作用。

WDG(Watchdog)看门狗;

看门狗可以监控程序的运行状态,当程序因为设计漏洞、硬件故障、电磁干扰等原因,出现卡死或跑飞现象时,看门狗能及时复位程序,避免程序陷入长时间的罢工状态,保证系统的可靠性和安全性;

看门狗本质上是一个定时器,当指定时间范围内,程序没有执行喂狗(重置计数器)操作时,看门狗硬件电路就自动产生复位信号;

STM32内置两个看门狗:

        独立看门狗(IWDG):独立工作,对时间精度要求较低

        窗口看门狗(WWDG):要求看门狗在精确计时窗口起作用

13.1.2 IWDG框图

预分频器之前,输入时钟是LSI,内部低速时钟, 时钟频率为40KHz,之后时钟进入预分频器进行分频,这个分频器只有8位,所以最大只能进行256分频。上面这个预分频寄存器IWDG_PR,可以配置分频系数,这个PR和定时器的PSC是一个意思,它们都是Prescale的缩写,可能不是一个人设计的,所以手册里很多缩写都不太一样。之后后面,时钟经过预分频器分频之后,时钟驱动递减计数器,每来一个时钟,自减一个数,另外这个数是12位的,所以最大值是2^12-1=4095,然后,当自减到0之后,产生IWDG复位,正常运行时,为了避免复位,我们可以提前在重装寄存器写一个值,IWDG_RLR,和定时器的ARR是一样的,RLR是Reloader,ARR是Auto Reloader,那当我们预先写好值之后,在运行过程中,我们在这个键寄存器里写一个特定数据,控制电路进行喂狗,这时重装值就会复制到当前的计数器中,这样计数器就会回到重装值,重新自减运行了。状态寄存器IWDG_SR,这就是标志电路运行的状态了,其实这个SR里没什么东西,只有两个更新同步位,最后,上面这些寄存器,位于1.8V供电区,下面主要的工作电路,都位于VDD供电区。

13.1.3 IWDG键寄存器

键寄存器本质上是控制寄存器,用于控制硬件电路的工作;

在可能存在干扰的情况下,一般通过在整个键寄存器写入特定值来代替控制寄存器写入一位的功能,以降低硬件电路受到干扰的概率。

如果只在控制寄存器中设置一个位,那这一位就有可能在误操作中,变成1或者变成0,这个概率是比较大的,所以单独设置一位来进行控制比较危险。比如程序跑飞,胡乱地设置各个寄存器,寄存器收到影响,可能会变成0x0000,0xFFFF,它可以随机变为任何数,但它恰好变成0xAAAA这个数的概率比较小。

写入键寄存器的值

作用

0xCCCC

启用独立看门狗

0xAAAA

IWDG_RLR中的值重新加载到计数器(喂狗)

0x5555

解除IWDG_PRIWDG_RLR的写保护

0x5555之外的其他值

启用IWDG_PRIWDG_RLR的写保护

13.1.4 IWDG超时时间

13.1.5 WWDG框图

窗口看门狗没有重装寄存器, 那如何重装寄存器喂狗呢?我们直接在CNT写入数据就行了,想写多少就写多少。喂狗的最早时间界限,就写到看门狗配置寄存器(WWDG_CFR)存起来。左边就是输出信号的操作逻辑了,什么情况下会产生复位,就有这几个逻辑门来确定。

时钟来源是PCLK1,也就是APB1的时钟,这个时钟默认是36MHz,所以就是36MHz的时钟进来,进来之后,还是先经过一个预分频器进行分频,这个和独立看门狗的预分频器,定时器的预分频器,都是一个作用,就是灵活地调节后面计数器地时钟频率,同时预分频系数也是计算计数器溢出时间的重要参数。接着,分频之后的时钟,驱动这个计数器进行计数,这个计数器和独立看门狗一样,也是一个递减计数器,没来一个时钟,自减一次,不过这个计数器比较特殊,从图上看,这里写了T6~T0,总共是7个位,但下面确写的是6位递减计数器,最高位T6,这里用来当作溢出标志位,T6位等于1时,表示计数器没溢出,T6位等于0时,表示计数器溢出,不过对于硬件电路来说,T6位也是计数器的一部分。只不过T6位被单独拎出来,当作标志位了而已。举个例子,比如这个计数器,我们给初始值111 1111,那么来一个计数脉冲,值减1,变为111 1110,再来一个变为111 1101,直到减为100 0000这一个数值,是一个关键节点,此时包括T6位在内的数,是100 0000,转为16进制0x40,那就是说,若果把T6位的值也当作计数器的一部分,那计数器的值实际上才减一半,但是如果把T6位剥离出去,当作溢出标志位,低6位,当作计数器,那此时的状态就是,标志位为1,计数器为000 0000,已经减到0了,再减一次,下一个值就是011 1111,这时最高位T6由1变为0,即代表计数器溢出,这时最高位T6,就会通过这个线路,产生复位信号。

这就是这个计数器的工作流程和溢出条件。 

13.1.6 WWDG工作特性

递减计数器T[6:0]的值小于0x40时,WWDG产生复位;

递减计数器T[6:0]在窗口W[6:0]外被重新装载时,WWDG产生复位;

递减计数器T[6:0]等于0x40时可以产生早期唤醒中断(EWI),用于重装载计数器以避免WWDG复位;

定期写入WWDG_CR寄存器(喂狗)以避免WWDG复位。

13.1.7  WWDG超时时间

13.1.8 IWDG和WWDG对比 

IWDG独立看门狗

WWDG窗口看门狗

复位

计数器减到0

计数器T[5:0]减到0后、过早重装计数器

中断

早期唤醒中断

时钟源

LSI40KHz

PCLK136MHz

预分频系数

483264128256

1248

计数器

12

6位(有效计数)

超时时间

0.1ms~26214.4ms

113us~58.25ms

喂狗方式

写入键寄存器,重装固定值RLR

直接写入计数器,写多少重装多少

防误操作

键寄存器和写保护

用途

独立工作,对时间精度要求较低

要求看门狗在精确计时窗口起作用

13.2 独立看门狗

13.2.1 硬件电路

13.2.2 软件部分

(1)复制《OLED显示屏》并改名为《独立看门狗》

(2)IWDG库函数

void IWDG_WriteAccessCmd(uint16_t IWDG_WriteAccess);       //写使能控制,操作键寄存器
void IWDG_SetPrescaler(uint8_t IWDG_Prescaler);            //写预分频器
void IWDG_SetReload(uint16_t Reload);                      //写重装值
void IWDG_ReloadCounter(void);                             //重新装在寄存器,喂狗
void IWDG_Enable(void);                                    //启动独立看门狗
FlagStatus IWDG_GetFlagStatus(uint16_t IWDG_FLAG);         //获取标志位状态

(3)main.c

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "Key.h"int main(void)
{/*模块初始化*/OLED_Init();						//OLED初始化Key_Init();							//按键初始化/*显示静态字符串*/OLED_ShowString(1, 1, "IWDG TEST");/*判断复位信号来源*/if (RCC_GetFlagStatus(RCC_FLAG_IWDGRST) == SET)	//如果是独立看门狗复位{OLED_ShowString(2, 1, "IWDGRST");			//OLED闪烁IWDGRST字符串Delay_ms(500);OLED_ShowString(2, 1, "       ");Delay_ms(100);RCC_ClearFlag();							//清除标志位}else											//否则,即为其他复位{OLED_ShowString(3, 1, "RST");				//OLED闪烁RST字符串Delay_ms(500);OLED_ShowString(3, 1, "   ");Delay_ms(100);}/*IWDG初始化*/IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);	//独立看门狗写使能IWDG_SetPrescaler(IWDG_Prescaler_16);			//设置预分频为16IWDG_SetReload(2499);							//设置重装值为2499,独立看门狗的超时时间为1000msIWDG_ReloadCounter();							//重装计数器,喂狗IWDG_Enable();									//独立看门狗使能while (1){Key_GetNum();								//调用阻塞式的按键扫描函数,模拟主循环卡死IWDG_ReloadCounter();						//重装计数器,喂狗OLED_ShowString(4, 1, "FEED");				//OLED闪烁FEED字符串Delay_ms(200);								//喂狗间隔为200+600=800msOLED_ShowString(4, 1, "    ");Delay_ms(600);}
}

13.3 窗口看门狗

13.3.1 硬件电路

13.2.2 软件部分

(1)复制《独立看门狗》工程并改名为《窗口看门狗》

(2)WWDG库函数

void WWDG_DeInit(void);                             //恢复缺省配置
void WWDG_SetPrescaler(uint32_t WWDG_Prescaler);    //写入预分频器
void WWDG_SetWindowValue(uint8_t WindowValue);      //写入窗口值
void WWDG_EnableIT(void);                           //使能中断
void WWDG_SetCounter(uint8_t Counter);              //写入计数器
void WWDG_Enable(uint8_t Counter);                  //使能窗口看门狗
FlagStatus WWDG_GetFlagStatus(void);                //获取标志位
void WWDG_ClearFlag(void);                          //清除标志位

(3)main.c

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "Key.h"int main(void)
{/*模块初始化*/OLED_Init();						//OLED初始化Key_Init();							//按键初始化/*显示静态字符串*/OLED_ShowString(1, 1, "WWDG TEST");/*判断复位信号来源*/if (RCC_GetFlagStatus(RCC_FLAG_WWDGRST) == SET)	//如果是窗口看门狗复位{OLED_ShowString(2, 1, "WWDGRST");			//OLED闪烁WWDGRST字符串Delay_ms(500);OLED_ShowString(2, 1, "       ");Delay_ms(100);RCC_ClearFlag();							//清除标志位}else											//否则,即为其他复位{OLED_ShowString(3, 1, "RST");				//OLED闪烁RST字符串Delay_ms(500);OLED_ShowString(3, 1, "   ");Delay_ms(100);}/*开启时钟*/RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE);	//开启WWDG的时钟/*WWDG初始化*/WWDG_SetPrescaler(WWDG_Prescaler_8);			//设置预分频为8WWDG_SetWindowValue(0x40 | 21);					//设置窗口值,窗口时间为30msWWDG_Enable(0x40 | 54);							//使能并第一次喂狗,超时时间为50mswhile (1){Key_GetNum();								//调用阻塞式的按键扫描函数,模拟主循环卡死OLED_ShowString(4, 1, "FEED");				//OLED闪烁FEED字符串Delay_ms(20);								//喂狗间隔为20+20=40msOLED_ShowString(4, 1, "    ");Delay_ms(20);WWDG_SetCounter(0x40 | 54);					//重装计数器,喂狗}
}

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

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

相关文章

最新爆火文生图模型FLUX

在AI图片生成领域,Flux模型的推出引起了广泛关注。随着AI技术的不断进步,新的模型层出不穷,而Flux正是其中的一颗新星。 Flux:一款迅速走红的AI图片生成模型 8月初,初创公司Black Forest Labs推出了文本生成图像模型…

米联客-FPGA程序设计Verilog语法入门篇连载-10 Verilog语法_一般设计规范

软件版本:无 操作系统:WIN10 64bit 硬件平台:适用所有系列FPGA 板卡获取平台:https://milianke.tmall.com/ 登录“米联客”FPGA社区 http://www.uisrc.com 视频课程、答疑解惑! 1概述 本小节讲解Verilog语法的一般…

合并两个有序数组(LeetCode)

题目 给你两个按 非递减顺序 排列的整数数组 和 ,另有两个整数 和 ,分别表示 和 中的元素数目。请你 合并 到 中,使合并后的数组同样按 非递减顺序 排列。 注意:最终,合并后数组不应由函数返回,而是…

Docker最佳实践进阶(一):Dockerfile介绍使用

大家好,上一个系列我们使用docker安装了一系列的基础服务,但在实际开发过程中这样一个个的安装以及繁杂命令不仅仅浪费时间,更是容易遗忘,下面我们进行Docker的进阶教程,帮助我们更快速的部署和演示项目。 一、什么是…

【初阶数据结构】通讯录项目(可用作课程设计)

文章目录 概述1. 通讯录的效果2. SeqList.h3. Contact.h4. SeqList.c5. Contact.c6. test.c 概述 通讯录项目是基于顺序表这个数据结构来实现的。如果说数组是苍蝇小馆,顺序表是米其林的话,那么通讯录就是国宴。 换句话说,通讯录就是顺序表…

个人可识别信息(PII) AI 去除 API 数据接口

个人可识别信息(PII) AI 去除 API 数据接口 ai / 隐私保护 基于 AI 模型自动去除个人识别信息(PII) 个人信息保护 / AI 模型 。 1. 产品功能 基于自有专业模型进行 PII 自动去除高效处理敏感信息全接口支持 HTTPS(TLS v1.0 / v1.1 / v1.2 /…

【剑指 offer】镜像二叉树

目 录 描述: 操作给定的二叉树,将其变换为源二叉树的镜像 思路: 仔细观察可以发现,所谓的二叉树镜像本质是自顶向下(or自底向上)进行左右子树交换的过程 public class Solution {public void Mirror(TreeNode root) {if(root nu…

音视频开发继续学习

RGA模块 RGA模块定义 RGA模块是RV1126用于2D图像的裁剪、缩放、旋转、镜像、图片叠加等格式转换的模块。比方说:要把一个原分辨率1920 * 1080的视频压缩成1280 * 720的视频,此时就要用到RGA模块了。 RGA模块结构体定义 RGA区域属性结构体 imgType&am…

LeetCode-3148. 矩阵中的最大得分

本人算法萌新,为秋招找工作开始磨炼算法,算法题均用python实现,如果我有哪些地方做的有问题的,还请大家不吝赐教. 1.题干 给你一个由 正整数 组成、大小为 m x n 的矩阵 grid。你可以从矩阵中的任一单元格移动到另一个位于正下方或正右侧的任意单元格(不必相邻&…

提高办公效率,四款语音转文字工具推荐!

无论是在会议记录、采访速记还是日常笔记中,语音转文字技术都展现出了其独特的价值。接下来是就为大家推荐几款市面上广受好评的语音转文字工具! 365在线转文字 链接:https://www.pdf365.cn/ 365在线转文字是一款非常实用的在线语音转文字…

【Unity/网络】Unity和内网穿透的网络测试 —— 以聊天室为例

这两天在做那个CodeMonky的胡闹厨房的案例,一直困扰我的是关于Lobby和Relay的相关网络服务,需要挂加速器并且延迟不低,所以我一直在寻找一些其他替代方案,想起来之前做一个UEC的网络枪战时做过一个内网穿透的方法,所以…

机械行业数字化生产供应链产品解决方案(十二)

我们为机械行业提供的数字化生产供应链解决方案通过集成物联网、人工智能和大数据技术,打造了一套智能化的生产和供应链管理系统,实现了从设计、生产到物流的全程数字化、智能化。该系统通过实时数据采集与分析,优化生产计划和资源配置&#…

前后端分离项目实战-通用管理系统搭建(前端Vue3+ElementPlus,后端Springboot+Mysql+Redis)第二篇:项目登录功能的实现

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

怎么等比例调整图片尺寸大小?调整图片尺寸的8个方法

在数字时代,图片已成为我们日常生活与工作中不可或缺的一部分。从社交媒体分享到专业设计项目,图片的质量和外观直接影响着信息的传达与接收。因此,在处理图片时,保持其原始的纵横比,即等比例调整图片尺寸,…

梅丽尔·斯特里普表演艺术家中心对外开放并恢复线下活动 体现了她的“卓越”

梅丽尔斯特里普表演艺术家中心对外开放并恢复线下活动 体现了她的“卓越” 2024-08-14 20:38 发布于:河北省 该中心将为美国演员工会和美国电视广播艺人协会的艺术家提供资源和机会,而且全部免费 同时命名的还有汤姆汉克斯和丽塔威尔逊放映室、妮可…

PHP 无参数RCE总结

在这篇文章中,我总结了在参与CTF比赛过程中积累的关于PHP无参数远程代码执行(RCE)的经验。由于一直以来时间有限,今天终于有机会整理这些知识点。 可能用到的函数(PHP的内置函数) localeconv() 函数返回一…

安美数字酒店宽带运营系统 weather.php 任意文件读取漏洞复现

0x01 产品简介 HiBOS酒店宽带运营系统是由安美世纪(北京)科技有限公司开发的一套专为酒店设计的宽带管理系统。该系统旨在提升酒店宽带服务的运营效率和安全性,为酒店客人提供稳定、高速、便捷的上网体验。 0x02 漏洞概述 安美数字酒店宽带运营系统 weather.php …

Ansible自动化运维中剧本角色(roles)来完成apache服务操作

🏡作者主页:点击! 🐧Linux基础知识(初学):点击! 🐧Linux高级管理防护和群集专栏:点击! 🔐Linux中firewalld防火墙:点击! Ansible…

Kafka服务端日志详解

文章目录 服务端日志Topic消息存储方式主体介绍log文件追加记录消息index和timeindex索引文件 日志文件清理Kafka的文件高效读写机制Kafka的文件结构顺序写磁盘零拷贝 合理配置刷盘频率客户端消费进度管理 服务端日志 Kafka的日志信息是通过conf/server.properties文件中的log…

互联网红利消退,AI 大模型接棒新红利

在科技发展的浪潮中,互联网曾经是推动经济增长和社会变革的强大引擎,为无数企业和个人带来了巨大的红利。然而,随着时间的推移,互联网红利似乎正在逐渐消退,而与此同时,AI 大模型正以其强大的创新能力和广泛…