【STM32开发之寄存器版】(五)-窗口看门狗WWDG
一、前言
窗口看门狗简介:
窗口看门狗通常被用来监测,由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障。除非递减计数器的值在T6位变成0前被刷新,看门狗电路在达到预置的时间周期时,会产生一个MCU复位。在递减计数器达到窗口寄存器数值之前,如果7位的递减计数器数值(在控制寄存器中)被刷新, 那么也将产生一个MCU复位。这表明递减计数器需要在一个有限的时间窗口中被刷新。窗口看门狗主要特性:
● 可编程的自由运行递减计数器● 条件复位─ 当递减计数器的值小于0x40,(若看门狗被启动)则产生复位。─ 当递减计数器在窗口外被重新装载,(若看门狗被启动)则产生复位。● 如果启动了看门狗并且允许中断,当递减计数器等于0x40时产生早期唤醒中断(EWI),它可 以被用于重装载计数器以避免WWDG复位。窗口看门狗适用场景:
WWDG最适合那些要求看门狗在精确计时窗口起作用的应用程序。本次DEMO的目标:
在本次DEMO中将使用窗口看门狗的中断功能来喂狗,通过STM32F103ZET6开发板的DS0和DS1来提示程序的运行状态。
二、时钟树解析
窗口看门狗WWDG是AHB-APB1总线下的外设,其时钟来源于APB1下的PCLK1时钟,本次实验中,将外部高速时钟HSE(8MHz)用锁相环PLL倍频9倍至72MHz作为系统时钟SYSCLK,AHB1分频系数为1(不分频,仍为72MHz),APB1分频系数为2(2分频,达到PCLK1最大频率36MHz),最后供给WWDG外设的基础时钟为36MHz。具体流程如下所示:
三、窗口看门狗功能介绍
窗口看门狗的时序图如下所示:
其中:
- T[6:0]:控制寄存器(WWDG_CR)的低7位。
- W[6:0]:配置寄存器(WWDG_CFR)的低7位,为窗口看门狗的上窗口。
- 3Fh:下窗口0X40的边界。
当窗口看门狗的计数器在上窗口值之外被刷新,或者低于下窗口值都会产生复位。
窗口看门狗的超时公式如下:
其中:
- Twwdg:WWDG超时时间(单位ms)
- Fpclk1:APB1的时钟频率(单位KHz)
- WDGTB:WWDG的预分频系数
- T[5:0]:窗口看门狗的计数器低6位
根据第二节时钟树解析,设置Fpclk=36MHz,那么可以得到最大-最小超时时间表如下所示:
WDGTB 最小超时值 最大超时值 0 113μs 7.28ms 1 227μs 14.56ms 2 455μs 29.12ms 3 910μs 58.25ms
四、寄存器介绍
对WWDG的程序设计主要涉及3个寄存器:
寄存器 | 作用 |
---|---|
WWDG_CR | 控制寄存器 |
WWDG_CFR | 配置寄存器 |
WWDG_SR | 状态寄存器 |
下面将对这几个寄存器进行一一介绍。
4.1 WWDG_CR控制寄存器
《STM32中文参考手册》对WWDG_CR寄存器的描述如下:
- WWDG_CR控制寄存器只有低8位有效。其中T[6:0]存储的是看门狗的计数器值,当计数器值从40h变为3FH时(T6变为0),产生看门狗复位。
- WDGA 位则是看门狗的激活位,该位由软件置 1,以启动看门狗,并且一定要注意的是该位一旦设置,就只能在硬件复位后才能清零了。
4.2 WWDG_CFR配置寄存器
《STM32中文参考手册》对WWDG_CFR寄存器的描述如下:
该位中的 EWI 是提前唤醒中断,也就是在快要产生复位的前一段时间(T[6:0]=0X40)来提醒我们,需要进行喂狗了,否则将复位!因此,我们一般用该位来设置中断,当窗口看门狗 的计数器值减到 0X40 的时候,如果该位设置,并开启了中断,则会产生中断,我们可以在中断里面向 WWDG_CR 重新写入计数器的值,来达到喂狗的目的。注意这里在进入中断后,必须在不大于 1 个窗口看门狗计数周期的时间(在 PCLK1 频率为 36M 且 WDGTB 为 0 的条件下,该时间为 113us)内重新写 WWDG_CR,否则,看门狗将产生复位!
4.3 WWDG_SR状态寄存器
《STM32中文参考手册》对WWDG_SR寄存器的描述如下:
该寄存器用来记录当前是否有提前唤醒的标志。该寄存器仅有位 0 有效,其他都是保留位。当计数器值达到 40h 时,此位由硬件置 1。它必须通过软件写 0 来清除。对此位写 1 无效。即使中断未被使能,在计数器的值达到 0X40的时候,此位也会被置 1。
五、程序设计
对于窗口看门狗的程序设计主要分为3个部分:窗口看门狗初始化、重置WWDG计数器的值、窗口看门狗中断服务程序。
5.1 窗口看门狗初始化
该部分程序位于HARDWARE/wdg.c/WWDG_Init(),主要功能是使能APB1下wwdg时钟、通过WWDG_CFR寄存器设置窗口值,通过WWDG_CR寄存器设置计数器值并开启看门狗,注册WWDG中断(中断号0),软件清除提前唤醒标志位并使能提前唤醒中断。具体程序如下所示:
//初始化窗口看门狗
//tr :T[6:0],计数器值
//wr :W[6:0],窗口值
//fprer:分频系数(WDGTB),仅最低2位有效
//Fwwdg=PCLK1/(4096*2^fprer).
void WWDG_Init(u8 tr,u8 wr,u8 fprer)
{ RCC->APB1ENR|=1<<11; //使能wwdg时钟 WWDG_CNT=tr&WWDG_CNT; //初始化WWDG_CNT. WWDG->CFR|=fprer<<7; //PCLK1/4096再除2^fprer WWDG->CFR&=0XFF80; WWDG->CFR|=wr; //设定窗口值 WWDG->CR|=WWDG_CNT; //设定计数器值 WWDG->CR|=1<<7; //开启看门狗 MY_NVIC_Init(2,3,WWDG_IRQn,2);//抢占2,子优先级3,组2 WWDG->SR=0X00; //清除提前唤醒中断标志位 WWDG->CFR|=1<<9; //使能提前唤醒中断
}
5.2 重置WWDG计数器的值
该部分程序位于HARDWARE/wdg.c/WWDG_Set_Counter(),主要功能是通过WWDG_CR寄存器重置7位计数器,相当于喂狗。具体程序如下所示:
//重设置WWDG计数器的值
void WWDG_Set_Counter(u8 cnt)
{ WWDG->CR =(cnt&0x7F);//重设置7位计数器
}
5.3 窗口看门狗中断服务程序
该部分程序位于HARDWARE/wdg.c/WWDG_IRQHandler(),主要功能是在中断中喂狗(重置WWDG计数器的值),软件清除提前唤醒中断标志位,并控制DS1翻转(提示信息)。具体代码如下所示:
//窗口看门狗中断服务程序
void WWDG_IRQHandler(void)
{ WWDG_Set_Counter(WWDG_CNT);//重设窗口看门狗的值! WWDG->SR=0X00;//清除提前唤醒中断标志位 LED1=!LED1;
}
六、上机实验
将代码烧录至STM32F103ZET6,窗口看门狗不断触发中断,DS1灯不停闪烁,如下所示:
相关文章:

【STM32开发之寄存器版】(五)-窗口看门狗WWDG
一、前言 窗口看门狗简介: 窗口看门狗通常被用来监测,由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障。除非递减计数器的值在T6位变成0前被刷新,看门狗电路在达到预置的时间周期时,会产生一个M…...

Leetcode203.移除链表元素-Python
题目链接:203. 移除链表元素 - 力扣(LeetCode) 题目描述: 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头节点 。 示例 1: 输入&a…...

属性拷贝MapStruct
端请求通过VO对象接收,并通过DTO对象进行流转,最后转换成DO对象与数据库DAO层进行交互,反之亦然。 当业务简单的时候,可以通过手动编码getter/setter函数来复制对象属性。但是当业务变的复杂,对象属性变得很多&#x…...

Chromium 添加书签功能浅析c++
1、在点击添加书签时候此UI控制逻辑代码在 chrome\browser\ui\views\bookmarks\bookmark_bar_view.cc chrome\browser\ui\views\bookmarks\bookmark_bar_view.h 可以在此看到完成 移除 按钮逻辑,以及书签监听事件等。。。 // Implementation for BookmarkNodeAdd…...

Spring Cloud Netflix Ribbon 负载均衡详解和案例示范
1. 引言 在传统的集中式架构中,负载均衡器一般是放置在服务器端的,例如 Nginx等。随着微服务架构的兴起,服务实例的数量和部署地点变得更加动态和分布式,这使得在客户端进行负载均衡成为了一种可行且更灵活的方案。Netflix Ribbo…...

Armeria gPRC 高级特性 - 装饰器、无框架请求、阻塞处理器、Nacos集成、负载均衡、rpc异常处理、文档服务......
文章目录 定义一个示例高级特性装饰器概述简单案例多种装饰方式 无框架请求概述使用方式 阻塞任务处理器背景概述多种使用方式 rpc 异常统一处理使用方式更详细的异常信息 Armeria 提供 gRPC 客户端多种调用方式同步调用异步调用使用装饰器 负载均衡简单案例Armeria 提供的所有…...

如何制作一个企业网站,建设网站的基本步骤有哪些?
企业网站是企业的门面和名片,决定网民对企业的第一印象,因此,现在很多公司想做一个属于自己网站,但是不知道怎么做,更不知道从何做起,更别说做成了。为了能够让大家清楚如何做一个企业网站,现在…...

01-python+selenium自动化测试-基础学习
前言 基于python3和selenium3做自动化测试,俗话说:工欲善其事必先利其器;没有金刚钻就不揽那瓷器活,磨刀不误砍柴工,因此你必须会搭建基本的开发环境,掌握python基本的语法和一个IDE来进行开发,…...

【redis-05】redis保证和mysql数据一致性
redis系列整体栏目 内容链接地址【一】redis基本数据类型和使用场景https://zhenghuisheng.blog.csdn.net/article/details/142406325【二】redis的持久化机制和原理https://zhenghuisheng.blog.csdn.net/article/details/142441756【三】redis缓存穿透、缓存击穿、缓存雪崩htt…...

写一个登录判断机制py
创建一个简单的登录机制涉及到用户输入的验证和与数据库中存储的凭证的比较。以下是一个使用Python语言和SQLite数据库的示例。这个例子仅用于教学目的,实际应用中应该使用更安全的方法来存储和验证密码,比如使用密码哈希。 首先,你需要安装…...

特征点检测与匹配是计算机视觉中的基础任务之一,广泛应用于图像配准、物体识别、运动估计、三维重建等领域。
特征点检测与匹配是计算机视觉中的基础任务之一,广泛应用于图像配准、物体识别、运动估计、三维重建等领域。下面是一些关键的知识点: 1. 特征点检测 特征点检测的目的是从图像中找到独特的、稳定的点,这些点在图像变化(如旋转、…...

python——Echarts现交互式动态可视化
数据展示 20192018201720162015201420132012北京5817.15785.91765430.78755081.264723.864027.16093661.10973314.934天津2410.252106.23972310.35522723.52667.112390.35182079.07161760.0201河北3742.673513.86433233.83322849.872649.182446.61662295.62032084.2825山西234…...

【含开题报告+文档+PPT+源码】基于SSM框架的民宿酒店预定系统的设计与实现
开题报告 随着人们旅游需求的增加,民宿行业呈现出快速发展的趋势。传统的住宿方式逐渐无法满足人们对个性化、舒适、便捷的需求,而民宿作为一种新型的住宿选择,逐渐受到人们的青睐。民宿的特点是具有独特的风格、便捷的地理位置、相对亲近的…...

正确理解协程
import asyncio# 定义一个异步函数(协程) async def say_after(delay, what):# 等待指定的时间await asyncio.sleep(delay)# 打印消息print(what)# 定义另一个异步函数 async def main():# 同时启动两个协程,并等待这2个协程结束await say_af…...

蒙特卡罗方法 - 采样和蒙特卡罗方法篇
序言 蒙特卡罗( Monte Carlo \text{Monte Carlo} Monte Carlo)方法,也被称为计算机随机模拟方法,是一种基于“随机数”的计算方法。这一方法源于美国在第二次世界大战期间研制原子弹的“曼哈顿计划”。其核心思想是使用随机数&am…...

论文阅读:InternVL v1.5| How Far Are We to GPT-4V? 通过开源模型缩小与商业多模式模型的差距
论文地址:https://arxiv.org/abs/2404.16821 Demo: https://internvl.opengvlab.com Model:https://huggingface.co/OpenGVLab/InternVL-Chat-V1-5 公开时间:2024年4月29日 InternVL1.5,是一个开源的多模态大型语言模…...

什么是电能表PTB认证
电能表PTB认证是指电能表产品经过德国国家计量研究所(Physikalisch-Technische Bundesanstalt,简称PTB)的认证和审核过程。PTB是德国联邦政府在计量、物理、材料和测试领域的技术专家和合作伙伴,拥有世界领先的技术水平和专业知识…...

C# 单例模式继承
简介:单例模式是软件工程中最著名的模式之一。从本质上讲,singleton 是一个只允许创建自身的单个实例的类,并且通常提供对该实例的简单访问。最常见的是,单例不允许在创建实例时指定任何参数 - 否则,对实例进行第二次请…...

ESP8266模块(WIFI STM32)
目录 一、介绍 二、传感器原理 1.原理图 2.引脚描述 3.ESP8266基础AT指令介绍 4.ESP8266基础工作模式 三、程序设计 main.c文件 esp8266.h文件 esp8266.c文件 四、实验效果 五、资料获取 项目分享 一、介绍 ESP8266是一款嵌入式系统级芯片,它集成了Wi…...

微信小程序学习实录9:掌握wx.chooseMedia实现多图片文件上传功能(选择图片、预览图片、上传图片)
要实现多图片上传到服务器,需要在小程序前端和PHP后端分别进行相应的设置。 基本流程 微信小程序提供了丰富的API来支持多图片上传功能。在微信小程序中实现多图片的选择、预览以及上传到服务器的功能: 1. 选择图片 使用 wx.chooseImage API 可以让用…...

助动词的分类及其缩略形式
助动词的分类及其缩略形式 1. 助动词 (auxiliary verb)2. 基本助动词 (primary auxiliary)2.1. 基本助动词 be、do 和 have2.2. 实义动词 be、do 和 have 3. 情态助动词 (modal auxiliary)3.1. 情态助动词取代情态动词 4. 半助动词 (semi-auxiliary)4.1. 不能与 it ... that-cl…...

Redis——分布式锁
在一个分布式系统中,只要涉及到多个节点访问同一个公共资源的时候,就需要加锁来实现互斥,从而达到线程安全的问题。 但是呢,分布式系统不同一些,因为分布式系统部署在不同的服务器上,很可能大量的请求打到…...

C++面试速通宝典——13
208. class里面定义int a,如果不实现构造函数,实例化这个类,a的值是? 答:a的值是未定义的(在C标准中成为“未初始化”)。 解释: 在C中,如果一…...

数据结构(二叉树)
1. 树相关术语 父结点/双亲结点:如果一个结点有子结点那么它就是父结点或者双亲结点;例如A是BCDEFG的父结点,J是PQ的父结点等等;子结点:一个结点含有的子树的根节点称为该结点的子结点;如上图的H是D的子结点…...

Windows 通过 Docker 安装 GitLab
1. 安装 Docker Desktop 下载网站:Windows | Docker Docs 2. 拉取 GitLab Docker 镜像 打开 PowerShell 或 命令提示符,拉取 GitLab 镜像: docker pull gitlab/gitlab-ee:latest或则使用社区版: docker pull gitlab/gitlab-ce…...

SQL专项练习第六天
Hive 在处理不同数据需求时的灵活性和强大功能,包括间隔连续问题的处理、行列转换、交易数据查询、用户登录统计以及专利数据分析等方面。本文将介绍五个 Hive 数据处理问题的解决方案,并通过实际案例进行演示。 先在home文件夹下建一个hivedata文件夹&a…...

CSS——属性值计算
CSS——属性值计算 今天来详细讲解一下 CSS的属性值计算过程,这是 CSS 的核心之一(另一个是视觉可视化模型,个人理解,这个相对复杂,以后再讲)。 基本概念 层叠样式表:Cascade Style Sheet&am…...

408算法题leetcode--第26天
496. 下一个更大元素 I 题目地址:496. 下一个更大元素 I - 力扣(LeetCode) 题解思路:单调栈,如注释 时间复杂度:O(n m) 空间复杂度:O(n) 代码: class Solution { public:vector<int&g…...

JavaScript 与浏览器存储
JavaScript提供了两种存储数据的方式:LocalStorage和SessionStorage。这两种方式都是浏览器提供的客户端存储解决方案,可以将数据保存在用户的浏览器中,供网站使用。 LocalStorage和SessionStorage的区别在于数据的作用域和生命周期。 Loca…...

Chromium 如何查找已经定义好的mojom函数实现c++
进程通信定义通常都是用.mojom文件或者idl文件格式 以content\common\frame.mojom里面的BeginNavigation函数为例。 一、如何查找BeginNavigation函数定义,在vscode里面直接搜索BeginNavigation,过滤条件 *.idl,*.mojom,*.cc 效果: 这样…...