【STM32】基础知识 第十六课 窗口看门狗 WWDG 深入浅出

news2025/1/16 21:08:02

【STM32】基础知识 第十六课 窗口看门狗 WWDG 深入浅出

  • 概述
  • 窗口看门狗 (WWDG)
  • WWDG_SR 状态寄存器
  • WWDG 配置与使用
  • 使用 WWDG 进行故障检测
  • 案例

概述

在嵌入式开发中, 可靠性和稳定性是至关重要的. 这就是为什么许多单片机, 比如 STM32, 提供了窗口看门狗 (Window Watchdog, WWDF) 的功能. WWDG 是一种硬件定时器, 其目的在于防止软件错误导致的系统故障. WWDG 是通过监控软件运行的正常新, 并在检测到异常情况时自动重启系统, 从而防止系统长时间处于错误状态. 虽然 STM32 同时提供了独立看门狗 (Independent Watchdog, IWDG) 和 WWDG, 但 WWDG 具有更高精度和更灵活的配置选项, 使其在一些需要精确定时或特殊需求的应用中具有优势.

STM32 窗口看门狗

窗口看门狗 (WWDG)

WWDG 的核心是一个 7 位的定时器 (取值范围 0-127). 用户可以设定一个窗口值和一个计数重载值. 当定时器计数值在重载值到窗口值之间倒数时, 称为窗口期. 窗口期是唯一可以刷新 WWDG 的时机. 也就是说, 只有在 “窗口” 打开期间, 才可以 “喂狗”.

如果在窗口未打开前就重载了 WWDG, 或者在窗口打开后没有及时重载 WWDG, 那么 WWDG 都会产生系统复位.

这样的设计能够使系统检测到两种软件错误:

  • 执行过快: 窗口未打开前就重载了 WWDG
  • 执行过慢: 窗口打开后没有及时重载 WWDG

WWDG_SR 状态寄存器

在 STM32 中, WWDG_SR 是窗口看门狗状态寄存器 (Windows Watchdog Status Register). WWDG_SR 只有一个比特位, 即比特 0 (EWIF), 又称为早早期唤醒中断标志 (Early Wakeup Interrupt Flag). 这个标志位用来表示窗口看门狗定时器已达到了 63 (也就是 127-64), 即将达到重载值. 这个功能可以用来唤醒 CPU, 让它有足够的时间去刷新窗口看门狗, 防止系统复位.

注: 虽热 EWIF 位可以通过软件清零, 但是在窗口看门狗启动后, 这个标志位会自动置位, 所以在大多数情况下, 我们需要手动清零这个标志位.

WWDG 配置与使用

在 STM32 中, 使用 WWDG 首先需要启动 WWDG 时钟, 并设置预分频器和窗口值. 通过访问 WWDG 的控制寄存器 (WWDG_CR) 和配置寄存器 (WWDG_CFR) 来实现.

具体步骤如下:

  1. 启动 WWDG 时钟: 通过访问复位和时钟控制 (RCC) 的 APB1 使能寄存器 (RCC_APB1ENR), 能使 WWDG 时钟
  2. 设置 WWDG 的预分频器和窗口值:通过访问 WWDG 的配置寄存器 (WWFG_CRF), 设置预分频器 (WDGTB) 和窗口值 (W). 同时, 可以使能窗口看门狗早期中断 (EWI)
  3. 设置 WWDG 的计数器重载值: 通过访问 WWDG 的控制寄存器 (WWDG_CR), 设置计数器的重载值, 并使能 WWDG

使用 WWDG 进行故障检测

WWDG 能够检测出软件中心过快和执行过慢两种类型的错误. 当主程序在窗口打开后没有及时重载 WWDG, 说明团建执行过慢, 这两种情况都会引发 WWDG 产生系统复位.

因为在实际应用中, 软件执行的速度往往与任务的完成密切相关. 如果软件执行过快, 可能意味着某些任务被跳过或者未被正确处理. 如果软件执行过慢, 可能意味着系统的性能无法满足需求, 或者某些任务执行时间过长. 通过 WWDG, 我们可以确保软件在预定的时间范围内正确的运行.

案例

#include "./SYSTEM/sys/sys.h"
#include "./SYSTEM/usart/usart.h"
#include "./SYSTEM/delay/delay.h"
#include "./BSP/LED/led.h"
#include "./BSP/WDG/wdg.h"


int main(void)
{
    HAL_Init();                             /* 初始化HAL库 */
    sys_stm32_clock_init(RCC_PLL_MUL9);     /* 设置时钟, 72Mhz */
    delay_init(72);                         /* 延时初始化 */
    usart_init(115200);                     /* 串口初始化为115200 */
    led_init();                             /* 初始化LED */
    LED0(0);                                /* 点亮LED0 红灯 */
    delay_ms(300);                          /* 延时300ms再初始化看门狗,LED0的变化"可见" */
    wwdg_init(0X7F, 0X5F, WWDG_PRESCALER_8);/* 计数器值为7f,窗口寄存器为5f,分频数为8 */

    while (1)
    {
        LED0(1);                            /* 关闭红灯 */
    }
}

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

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

相关文章

redis 源码记录

正好最近时间富裕,看一看redis源码,简单的记录一下。也有可能说的是不全面的,自行斟酌,只能通过debug来简单的梳理本次测试流程,而不是全量的覆盖的所有测试用例,时不时更新,争取一天学一点点。…

基于Web的水果蔬菜销售系统的设计与实现(论文+源码)_kaic

摘 要 随着互联网经济与技术进程的不断推进,网上购物方式受到公众的普遍关注和欢迎。传统的樱桃线下销售模式缺陷不断暴露,难以满足公众不断加快的生活节奏和生活方式的需求。本文根据目前大众的实际需要,根据网上商城的特点、现状以及主要功…

Java 与排序算法(3):插入排序

一、插入排序 插入排序(Insertion Sort)是一种简单直观的排序算法,它的基本思想是将待排序序列分为已排序区间和未排序区间,然后每次从未排序区间取出一个元素,将其插入到已排序区间的合适位置中,使得插入…

【SpringBoot】八:Web服务---WebMvcConfigurer

文章目录 1.WebMvcConfigurer简介2. 页面跳转控制器3. 数据格式化4. 拦截器4.1 一个拦截器4.2 多个拦截器 1.WebMvcConfigurer简介 WebMvcConfigurer是SpringMVC xml配置文件的JavaConfig实现方式。 2. 页面跳转控制器 创建 SpringMVC 配置类: 3. 数据格式化 Formatter&…

计算机组成原理-存储系统-主存储器(芯片)和CPU连接

目录 一、SRAM和DRAM芯片 DRAM:栅极电容存储信息 SRAM:双稳态触发器存储信息 区别​编辑 二、ROM芯片 三、主存于CPU的连接 位扩展法 字扩展法 字位同时扩展法 译码器 四、双端口RAM和多模块存储器 4.1双端口RAM 4.2多模块存储器 4.2.1单体多字…

pthread多线程: 创建最简单的线程

文章目录 1. 目的1.1 不使用 Pthread 的情况1.2 使用 Pthread 的情况1.3 使用 Pthread 的好处 2. Pthread 创建线程的 API2.1 环境2.2 pthread_create()2.3pthread_join() 3. 创建最简单的线程3.1 要点3.2 代码 4. 创建多个子线程4.1 要点4.2 代码 5. 总结 1. 目的 Pthread 提…

计算机组成原理-存储系统-基本概论及组成

目录 一、存储器的层次化结构 二、存储器分类 存储介质 存取方式 信息可改性 三、性能指标 四、主存储器基本组成 基本的的半导体元件及原理 存储芯片的基本原理 一、存储器的层次化结构 二、存储器分类 存储介质 半导体存储器(主存,cache)、磁表面存储器(…

基于SpringBoot的SSMP的整合案例

基于SpringBoot的SSMP的整合案例 简单介绍模块创建创建实体类导入Mybatis-plus和druid的配置文件使用junit测试查询方法MP分页查询按照条件进行查询业务层Service开发业务层Service快速开发表现层开发表现层 实现分页查询表现层消息一致性的处理查询所有书本信息添加书本删除操…

TensorFlow巨浪中的巨人:大数据领域的引领者 TensorFlow实战【上进小菜猪大数据系列】

上进小菜猪,沈工大软件工程专业,爱好敲代码,持续输出干货。欢迎订阅本专栏! 大数据时代的到来带来了海量数据的处理和分析需求。在这个背景下,TensorFlow作为一种强大的深度学习框架,展现了其在大数据领域…

fastreport使用教程(fastreport报表编辑器)

除了库本身,FastReport.Net还包括单独的程序 – Designer和Viewer。 如您所知,第一个用于创建和编辑报表模板。它具有报表预览模式,您可以从中查看报表,将其导出为所需的数据格式并将其发送到打印。 Viewer用于以fpx预览格式查看报…

清华p-tuning | GPT也能做NLU?清华推出p-tuning方法解决GPT系列模型fine-tuning效果比BERT差问题

一、概述 title:GPT Understands, Too 论文地址:https://arxiv.org/abs/2103.10385 代码:https://github.com/THUDM/P-tuning 1.1 Motivation GPTs模型利用传统的fine-tuning技术在NLU任务上效果比较差,比同等量级的BERT效果…

2023/5/22总结

继承 继承是面向对象三大特征之一。可以使得子类具有父类的属性和方法,还可以在子类中重新定义,追加属性和方法。 如图: 在上面的图片中,dog和cat都继承了Animal类,所以dog和cat都可以称为Animal的子类或者派生类&…

chatgpt赋能Python-python_dng

Python DNG:开启更高效的数据处理之路 什么是Python DNG? Python DNG(Data NumPy Generator)是一种基于Python的高效数据生成器,可以加速数据处理和分析的过程。它基于Numpy数组操作和并行计算思想,可以快…

C++详解NOI题:[NOIP2021] 报数

文章目录 前言一、题目二、暴力解题步骤(50分)三、打表防坑解题(100分)总结 前言 受不了CSDN每日一练的在线竞赛系统了,bug多就算了,勉强能用,可那些题目的神描述,到处是错。所以找…

前端面试知识点总结

前言: 博主突击两个月八股拿到美团(基础研发),腾讯(IEG),百度(搜索部门)暑期实习offer call,这是我学习过程中整理的前端知识点,内容有些多&#…

【13900k】i9 核显升级驱动

这里写自定义目录标题 官方的助手不能用显卡控制中心提示最新的更新搜索显卡 intel uhd graphics 770 手动下载安装自定义音频为啥也要卸载?新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片…

网络编程——嵌入式(驱动)软开基础(六)

1、简述TCP三次握手的过程。 (1)第一次握手:客户端创建传输控制块,然后向服务器发出连接请求报文(将标志位SYN置1,随机产生一个序列号seq=x),接着进入SYN-SENT状态。 (2)第二次握手:服务器收到请求报文后由SYN=1得到客户端请求建立连接,回复一个确认报文(将标志…

进程启动后到加载Activity的流程源码解析(基于安卓版本28)

文章目录 源码解析总体时序图关键类解析ActivityThreadApplicationThreadInstrumentationClientTransactionActivityStackSupervisorActivityRecord梳理概述源码流程梳理 源码解析 总体时序图 关键类解析 只针对流程中用到的关键类进行解析。 ActivityThread 注意其父类是&…

ES6升级之路:探究模板字符串、startsWith()方法和endsWith()方法、repeat()等新特性。

模版字符串 ES6新增的创建字符串的方式,使用反引号定义 示例 <script>// 1.模板字符串可以解析变量 ${}显示变量的值let name 张三;let sayHello HEllo,我的名字叫${name};console.log(name);console.log(sayHello);let result {name: "zhangsan",age: 20…

Java【TCP 协议2】确认应答、超时重传机制

文章目录 前言一、确认应答1, 什么是确认应答2, 序列号和确认应答号 二、超时重传1, 什么是超时重传 总结 前言 各位读者好, 我是小陈, 这是我的个人主页, 希望我的专栏能够帮助到你: &#x1f4d5; JavaSE基础: 基础语法, 类和对象, 封装继承多态, 接口, 综合小练习图书管理系…