STM32-笔记26-WWDG窗口看门狗
一、简介
窗口看门狗用于监测单片机程序运行时效是否精准,主要检测软件异常,一般用于需要精准检测程序运行时间的场合。
窗口看门狗的本质是一个能产生系统复位信号和提前唤醒中断的6位计数器(有的地方说7位。其实都无所谓,本质是一样的)。
产生复位条件:
- 当递减计数器值从 0x40 减到 0x3F 时复位(即T6位跳变到0)
- 计数器的值大于 W[6:0] 值时喂狗会复位。
产生中断条件:
- 当递减计数器等于 0x40 时可产生提前唤醒中断 (EWI)。
在窗口期内重装载计数器的值,防止复位,也就是所谓的喂狗。
二、WWDG工作原理及框图


三、WWDG寄存器及函数介绍
窗口看门狗内有一个7位的递减计数器,并可以设置成自由运行。它可以被当成看门狗用于在发生问题时复位整个系统。它由主时钟驱动,具有早期预警中断功能;在调试模式下,计数器可以被冻结。
3.1 控制寄存器

3.2 配置寄存器

3.3 状态寄存器

3.4 寄存器映像

3.5 函数



等......
配置步骤

四、WWDG溢出时间计算

在上面的超时公式中:周期(时间 = Tpclk1) = 频率的倒数 = PCLK1(频率)
4096 * 2^WDGTB / PCLK1 = 数一个数的时间单位是ms
PCLK1 = 36MHZ( 常等于)
(T[5:0]+1) = 个数
五、看门狗实验
5.1 实验目的
开启窗口看门狗,计数器值设置为 0X7F ,窗口值设置为 0X5F ,预分频系数为 8 。在 while 循环里喂狗,同时翻转 LED1 状态;在提前唤醒中断服务函数进行喂狗,同时翻转 LED2 状态。

这里设置的窗口上限值为:

从开始计数,到记完数要复位的地方,也就是0X7F - 0X3F这段记58.25ms
复制项目文件夹19-串口打印功能,重命名位28-WWDG窗口看门狗
新建文件夹wwdg

打开项目
加载文件
加入wwdg驱动文件

代码:
main.c
#include "sys.h"
#include "delay.h"
#include "led.h"
#include "uart1.h"
#include "wwdg.h"int main(void)
{HAL_Init(); /* 初始化HAL库 */stm32_clock_init(RCC_PLL_MUL9); /* 设置时钟, 72Mhz */led_init();//初始化led灯uart1_init(115200);wwdg_init(0x7f,0x5f,WWDG_PRESCALER_8);printf("hello word!\r\n");if(__HAL_RCC_GET_FLAG(RCC_FLAG_WWDGRST) != RESET){printf("窗口看门狗复位!\r\n");__HAL_RCC_CLEAR_RESET_FLAGS();}elseprintf("外部复位!\r\n");while(1){
// delay_ms(50);
// wwdg_feed();
// led1_Toggle();}
}
wwdg.c
#include "wwdg.h"
#include "led.h"WWDG_HandleTypeDef wwdg_handle = {0};//初始化窗口看门狗函数
void wwdg_init(uint8_t tr,uint8_t wr,uint32_t psc)
{wwdg_handle.Instance = WWDG;wwdg_handle.Init.Counter = tr;//计数器的值wwdg_handle.Init.Prescaler = psc;//预分频系数wwdg_handle.Init.Window = wr;//窗口上限值wwdg_handle.Init.EWIMode = WWDG_EWI_ENABLE;//窗口看门狗早期唤醒启用HAL_WWDG_Init(&wwdg_handle);
}//msp函数初始化
void HAL_WWDG_MspInit(WWDG_HandleTypeDef *hwwdg)
{__HAL_RCC_WWDG_CLK_ENABLE();HAL_NVIC_SetPriority(WWDG_IRQn,2,2);//抢占优先级和响应优先级HAL_NVIC_EnableIRQ(WWDG_IRQn);
}//中断服务函数
void WWDG_IRQHandler(void)
{HAL_WWDG_IRQHandler(&wwdg_handle);
}//提前唤醒回调函数
void HAL_WWDG_EarlyWakeupCallback(WWDG_HandleTypeDef *hwwdg)
{//wwdg_feed();led2_Toggle();
}//喂狗函数
void wwdg_feed(void)
{HAL_WWDG_Refresh(&wwdg_handle);
}
wwdg.h
#ifndef __WWDG_H__
#define __WWDG_H__#include "sys.h"void wwdg_init(uint8_t tr,uint8_t wr,uint32_t psc);
void wwdg_feed(void);#endif
5.2 出现的结果
5.2.1 检验出现的结果1
当主函数为下面这段代码时,出现的结果是:
#include "sys.h"
#include "delay.h"
#include "led.h"
#include "uart1.h"
#include "wwdg.h"int main(void)
{HAL_Init(); /* 初始化HAL库 */stm32_clock_init(RCC_PLL_MUL9); /* 设置时钟, 72Mhz */led_init();//初始化led灯uart1_init(115200);wwdg_init(0x7f,0x5f,WWDG_PRESCALER_8);printf("hello word!\r\n");while(1){ }
}
此时wwdg.c文件中,有喂狗操作。

串口窗口显示结果为

并且开发板LED2疯狂闪烁,表示在唤醒回调函数中成功喂狗
5.2.2 检验出现的结果2
当主函数为下面代码时:

此时wwdg.c文件中,有喂狗操作。

串口窗口显示结果为

并且开发板LED2疯狂闪烁,表示由外部复位,并且在此时成功喂狗
5.2.3 检验出现的结果3
主函数代码不变,wwdg.c文件如下图所示:

串口窗口显示结果为

并且开发板LED2疯狂闪烁,表示此时没有喂狗,看数数溢出由,窗口看门狗是否复位
5.2.4 检验出现的结果4
主函数代码如下图所示:

wwdg.c文件代码如下:

串口窗口显示结果为

LED1疯狂闪烁,这个时候延迟10ms喂狗的,此时喂狗在窗口期前,这个时候数数溢出由看门狗会复位
5.2.5 检验出现的结果5
主函数代码如下:

串口窗口显示如下:

LED1疯狂闪烁,在while函数中喂狗成功
5.3 关于疑问
在wwdg.c文件中,psc预分频器的定义,这里使用的是uint16_t,没有报错
我的理解是:4096 * 8 = 32768 = 1000 0000 0000 0000,十六位够用

这里如果定义的是uint8,则会报错,如下图所示:

翻译如下:

相关文章:
STM32-笔记26-WWDG窗口看门狗
一、简介 窗口看门狗用于监测单片机程序运行时效是否精准,主要检测软件异常,一般用于需要精准检测程序运行时间的场合。 窗口看门狗的本质是一个能产生系统复位信号和提前唤醒中断的6位计数器(有的地方说7位。其实都无所谓࿰…...
10.装饰器
装饰器的基本用法创建简单的装饰器带参数的装饰器装饰器链类装饰器内置装饰器 定义:装饰器是一个函数,它接受另一个函数作为参数,并返回一个新的函数。装饰器通常用于在函数执行前后添加额外的功能,如日志记录、权限检查、性能测试等。 1.基…...
uniapp H5页面实现懒加载
在 uniapp 中,要在小的 view 内实现列表懒加载,可以通过以下步骤来实现: 使用 scroll-view 组件来创建一个可滚动的区域。在 scroll-view内 部放置一个list组件,用于显示数据列表。监听 scroll-view 的滚动事件,当滚动…...
STM32使用UART发送字符串与printf输出重定向
首先我们先看STM32F103C8T6的电路图 由图可知,其PA9和PA10引脚分别为UART的TX和RX(注意:这个电路图是错误的,应该是PA9是X而PA9是RX,我们看下图的官方文件可以看出),那么接下来我们应该找到该引脚的定义是什么…...
NLP初识
目录 0简介一、自然语言概述1. 什么是NLP?2. NLP常用工具0简介 NLP系列开始更新了!!!这个系列主要会介绍一些NLP的基础概念,比如RNN、LSTM、GRU等内容,重头戏放在大语言模型的基础讲解上,其中大语言模型的分享主要由两个方面:1.基础结构(Seq2Seq,Attention,Transfor…...
解決當前IP地址僅適用於本地網路
想要解決“當前IP地址僅適用於本地網路”其實並不困難。本篇文章將介紹其發生的原因以及如何解決。 “僅限本地網路”是什麼意思? 當IP地址為“僅限本地網路”時,意味著設備正在使用私人網路內部IP地址,但無法連接到互聯網。如果將本地IP視…...
Eplan 项目结构(高层代号、安装地点、位置代号)
Eplan中的项目结构分为3个层次: (1)功能面结构。指明这个系统的功能,有什么用途。在EPlan中,指的就是"高层代号()"。 一般指的是线体。 (2)位置面结构。指明该…...
文献分享集:跨模态的最邻近查询RoarGraph
文章目录 1. \textbf{1. } 1. 导论 1.1. \textbf{1.1. } 1.1. 研究背景 1.2. \textbf{1.2. } 1.2. 本文的研究 1.3. \textbf{1.3. } 1.3. 有关工作 2. \textbf{2. } 2. 对 OOD \textbf{OOD} OOD负载的分析与验证 2.1. \textbf{2.1. } 2.1. 初步的背景及其验证 2.1.1. \textbf{2…...
xdoj 判断字符串子串
判断字符串子串 问题描述 编写程序: 判断一个不大于 20 个字符的字符串是否是另一个不大于 20 个字符的字符串的子 串,如果是,则输出子串在父串的起始位置, 如果不是子串,则输出 No!。 输入说明 输入分 2 行: 第…...
n8n - AI自动化工作流
文章目录 一、关于 n8n关键能力n8n 是什么意思 二、快速上手 一、关于 n8n n8n是一个具有原生AI功能的工作流自动化平台,它为技术团队提供了代码的灵活性和无代码的速度。凭借400多种集成、原生人工智能功能和公平代码许可证,n8n可让您构建强大的自动化…...
asp.net core 属性路由和约定路由
在 ASP.NET Core 中,Web API 中的路由(Route)用于确定客户端请求的 URL 与服务器端处理逻辑之间的映射关系。路由机制在 Web API 的开发中非常重要,它帮助定义和管理不同请求路径如何触发特定的控制器和操作方法。 1. 路由概述 …...
【PS不常见教程】实操篇之通道抠图-抠黑色背景的图片
观前小提示:本文内容为我原创成果,若您需要转载或引用其中图片或文字内容,请记得标注来源是“璞子的家”哦,感谢您的尊重,理解与支持,谢谢啦! 如果没看过之前的文章,可以先看之前的两…...
电子电气架构 --- 整车整车网络管理浅析
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 所谓鸡汤,要么蛊惑你认命,要么怂恿你拼命,但都是回避问题的根源,以现象替代逻辑,以情绪代替思考,把消极接受现实的懦弱,伪装成乐观面对不幸的…...
【数据结构05】排序
系列文章目录 【数据结构05】排序 . 【算法思想04】二分查找 文章目录 系列文章目录[toc] 1. 基本思想与实现1.1 插入类排序1.1.1 直接插入排序(*)1.1.2 折半插入排序1.1.3 希尔排序(*) 1.2 交换类排序1.2.1 冒泡排序(…...
推荐系统的三道菜
推荐系统的本质就是在有太多展示内容的情况下,对内容的呈现进行排序。 它的排序依据主要有三个方面: 1. 用户信息 排序的主要依据就是用户感兴趣的程度。 要获知用户的兴趣点,就要搜集“用户信息”,比如用户的历史行为、身份信息、…...
ModuleNotFoundError: No module named XXX
我们在安装了某个包之后,还是提示找不到包 方法一: python -m pip install 包名 -i https://pypi.tuna.tsinghua.edu.cn/simple 方法二: conda install 包名 如果还是找不到包: 请检查环境:...
JAVA:HashMap在1.8做了哪些优化的详细解析
1、简述 HashMap 是 Java 中最常用的数据结构之一,它以键值对的形式存储数据,允许快速的插入、删除和查找操作。在 JDK 1.8 之前,HashMap 主要是基于数组加链表的结构实现的。然而,在面对大量哈希冲突时(即多个键的哈…...
jest使用__mocks__设置模拟函数不生效 解决方案
模拟文件 // __mocks__/axios.js const axios jest.fn(); axios.get jest.fn(); axios.get.mockResolvedValue({data: {undoList: [get data],}, }); export default axios; 测试文件 jest.mock(axios); import Axios from axios;test(mytest, () > {console.log("…...
javaEE-网络原理-1初识
目录 一.网络发展史 1.独立模式 2.网络互联 二.局域网LAN 1.基于网线直连: 2.基于集线器组件: 3.基于交换机组件: 4.基于交换机和路由器组件 编辑 三、广域网WAN 四、网络通信基础 1.ip地址 2.端口号: 3.协议 4.五…...
笔上云世界微服务版
目录 一、项目背景 二、项目功能 一功能介绍 三、环境准备 • 需要开发的端口 • Mysql 导入数据库 编辑 • Redis 编辑 • RabbitMQ 编辑 在创建blog虚拟主机(方法如下) • Nacos • Nginx 四、前端部署 五、后端部署 六、测试计划操作 一功能测试 二…...
如何备份大量小表组成的数据库_并行导出与多文件并发写入.txt
PHP开发无需选机箱,真正关键的是CPU单核性能、RAM容量和SSD读写延迟;生产服务器的硬件选型属于运维范畴,与PHP编码、调试、本地运行无关。PHP 是运行在服务器端的脚本语言,源码开发阶段根本不需要考虑机箱、散热或 PCIe 插槽——这…...
程序员的心理学学习笔记 - 逆火效应
逆火效应 1、基本介绍 逆火效应指的是当人们遇到与自己坚定信念相矛盾的证据时,不但不会改变想法,反而会更加坚信自己原来的观点,有如下原因威胁感:挑战某个信念等于挑战自我认同,大脑会启动防御认知失调:矛…...
如何配置Oracle 19c Data Pump目录_数据泵导入导出的环境准备
必须先创建DIRECTORY对象并授权:CREATE OR REPLACE DIRECTORY dpump_dir AS /u01/app/oracle/dpdump; GRANT READ,WRITE ON DIRECTORY dpump_dir TO scott; 且Oracle进程需有目录读写权限。怎么创建 Data Pump 目录对象(DIRECTORY)oracle dat…...
2026届必备的五大AI辅助论文神器推荐榜单
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 人工智能助力撰写开题报告,能大幅提高研究框架搭建效率,它依据自然语…...
从线程安全到高性能计算:深入解析C++数学表达式库ExprTk的设计哲学与应用实践
1. 为什么选择ExprTk:从线程崩溃到高性能计算 去年我在开发一个金融数据分析系统时,遇到了一个棘手的问题。系统需要实时处理大量数学表达式,最初采用C调用Python的方案,单线程测试时一切正常,但上线后多线程环境下频繁…...
保姆级教程:用TSM模型(PyTorch版)实现视频打架检测,从数据预处理到实时推理
实战指南:基于TSM模型的视频暴力行为检测系统开发 在公共安全领域,视频监控系统每天产生海量数据,但传统的人工监控方式效率低下且容易遗漏关键事件。想象一下,当监控中心同时处理数百路视频流时,操作员很难持续保持高…...
5分钟掌握Python剪映API:让视频剪辑效率提升10倍的终极指南
5分钟掌握Python剪映API:让视频剪辑效率提升10倍的终极指南 【免费下载链接】JianYingApi Third Party JianYing Api. 第三方剪映Api 项目地址: https://gitcode.com/gh_mirrors/ji/JianYingApi 你是否厌倦了每天重复的视频剪辑工作?添加水印、调…...
ytDownloader:如何一站式解决全网视频下载难题
ytDownloader:如何一站式解决全网视频下载难题 【免费下载链接】ytDownloader Desktop App for downloading Videos and Audios from hundreds of sites 项目地址: https://gitcode.com/GitHub_Trending/yt/ytDownloader 在当今数字时代,视频内容…...
YOLO11和dlib实战:如何用Python在10分钟内搞定一个简易疲劳检测脚本?
YOLO11与dlib极简实战:10分钟搭建Python疲劳检测原型 从理论到实践的快速验证 在计算机视觉领域,快速验证算法可行性是每个开发者都面临的挑战。传统方案往往需要搭建完整的Web系统或移动应用,这对于算法验证而言显得过于沉重。本文将展示如何…...
OpCore-Simplify:黑苹果配置终极简化指南,告别繁琐手动调试
OpCore-Simplify:黑苹果配置终极简化指南,告别繁琐手动调试 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在为黑苹果配置的…...

