STM32看门狗原理与应用详解:独立看门狗 vs 窗口看门狗(上) | 零基础入门STM32第九十四步
| 主题 | 内容 | 教学目的/扩展视频 |
|---|---|---|
| 看门狗 | 什么是看门狗,原理分析,启动喂狗方法,读标志位。 | 熟悉在程序里用看门狗。 |
师从洋桃电子,杜洋老师
📑文章目录
- 一、看门狗核心原理
- 1.1 工作原理图解
- 1.2 经典水桶比喻
- 二、STM32看门狗双雄对比
- 2.1 参数对照表
- 2.2 架构框图
- 独立看门狗架构
- 窗口看门狗架构
- 三、独立看门狗(IWDG)深度解析
- 3.1 关键特性
- 3.2 配置示例代码
- 四、窗口看门狗(WWDG)进阶应用
- 4.1 核心特征
- 4.2 配置代码示例
- 五、设计实践指南
- 5.1 参数计算工具
- 5.2 调试技巧
- 六、常见问题解答
- 七、扩展应用
- 7.1 复合监控系统
- 7.2 看门狗高级用法
- 八、相关资源
一、看门狗核心原理
1.1 工作原理图解
1.2 经典水桶比喻
| 比喻要素 | 技术对应 |
|---|---|
| 水龙头流速 | 计数器递减频率 |
| 桶容量 | 初始重载值 |
| 倒水操作 | 喂狗动作 |
| 水溢出 | 系统复位 |
二、STM32看门狗双雄对比
2.1 参数对照表
| 特性 | 独立看门狗(IWDG) | 窗口看门狗(WWDG) |
|---|---|---|
| 时钟源 | 独立40kHz RC振荡器 | 主时钟(PCLK1) |
| 计数器位宽 | 12位递减计数器 | 7位递减计数器 |
| 工作模式 | 停机/待机模式可用 | 需主时钟运行 |
| 喂狗时间 | 任意时间 | 指定时间窗口 |
| 特殊功能 | 自由定时器模式 | 早期预警中断 |
| 典型应用场景 | 基础监控/低功耗场景 | 时序严格控制系统 |
2.2 架构框图
独立看门狗架构
窗口看门狗架构
三、独立看门狗(IWDG)深度解析
3.1 关键特性
- 独立时钟源:不受主系统时钟影响
- 最长超时时间:26.2秒(预分频256,重载值0xFFF)
- 硬件看门狗模式:通过选项字节配置
- 调试模式冻结:方便单步调试
3.2 配置示例代码
// IWDG初始化
void IWDG_Init(uint16_t reload, uint8_t prescaler)
{IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);IWDG_SetPrescaler(prescaler);IWDG_SetReload(reload);IWDG_ReloadCounter();IWDG_Enable();
}// 喂狗操作
void Feed_Dog(void)
{IWDG_ReloadCounter();
}
四、窗口看门狗(WWDG)进阶应用
4.1 核心特征
- 精确时间窗口:必须在上窗口(0x40)与下窗口(0x3F)之间喂狗
- 早期预警中断:计数器达到0x40时触发中断
- 时钟依赖:需要稳定主时钟源
- 最短超时时间:1.09ms(PCLK1=36MHz)
4.2 配置代码示例
// WWDG初始化
void WWDG_Init(uint8_t counter, uint8_t window)
{RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE);WWDG_SetPrescaler(WWDG_Prescaler_8);WWDG_SetWindowValue(window);WWDG_Enable(counter);WWDG_ClearFlag();WWDG_EnableIT();
}// 中断服务函数
void WWDG_IRQHandler(void)
{if(WWDG_GetFlagStatus() != RESET) {// 处理早期预警WWDG_SetCounter(0x7F);WWDG_ClearFlag();}
}
五、设计实践指南
5.1 参数计算工具
| 看门狗类型 | 计算公式 | 示例计算(超时1s) |
|---|---|---|
| IWDG | Tout = (4×2^prescaler) × reload / 40k | prescaler=4(256分频), reload=1250 |
| WWDG | Tout = (4096×2^WDGTB) × (T[5:0]+1) / PCLK1 | PCLK1=36M, WDGTB=3, T=54 |
5.2 调试技巧
- 利用IWDG冻结功能:在调试模式暂停计数器
- WWDG窗口时间测量:使用逻辑分析仪捕获喂狗信号
- 安全喂狗策略:在多个关键节点重复喂狗
- 异常处理机制:在复位前保存系统状态
六、常见问题解答
Q1:看门狗导致频繁复位怎么办?
- 检查喂狗间隔是否小于超时时间
- 验证时钟源配置是否正确
- 确认未在中断外进行长时间阻塞操作
Q2:如何选择看门狗类型?
- 低功耗场景选IWDG
- 实时性要求高选WWDG
- 关键系统可同时使用双看门狗
Q3:窗口看门狗窗口值如何设置?
- 上窗口值 = 允许最早喂狗时间
- 下窗口值 = 最晚喂狗时间
- 典型设置:窗口值 = 0x5F,计数器初始值 = 0x7F
七、扩展应用
7.1 复合监控系统
7.2 看门狗高级用法
- 系统自检模式:故意触发复位测试看门狗功能
- 低功耗唤醒:配合停机模式实现定时唤醒
- 安全认证:通过看门狗记录系统运行状态
附:STM32看门狗相关寄存器速查表
| 寄存器 | IWDG | WWDG |
|---|---|---|
| 控制寄存器 | IWDG_KR | WWDG_CR |
| 预分频寄存器 | IWDG_PR | WWDG_CFR |
| 重载寄存器 | IWDG_RLR | WWDG_CFR |
| 状态寄存器 | - | WWDG_SR |
八、相关资源
[1] 洋桃电子B站课程-STM32入门100步
[2] STM32官方文档手册
[3] STM32F103固件函数库用户手册(中文)
[4] 看门狗原理.pptx
💬 技术讨论(请在评论区留言~)
📌 下期预告:下一期将探讨看门狗应用程序分析,欢迎持续关注!
点击查阅🔍往期【STM32专栏】文章
版权声明:本文采用[CC BY-NC-SA 4.0]协议,转载请注明来源
实测开发版:洋桃1号开发版(基于STM32F103C8T6)
更新日志:
- v1.0 初始版本(2025-04-06)
相关文章:
STM32看门狗原理与应用详解:独立看门狗 vs 窗口看门狗(上) | 零基础入门STM32第九十四步
主题内容教学目的/扩展视频看门狗什么是看门狗,原理分析,启动喂狗方法,读标志位。熟悉在程序里用看门狗。 师从洋桃电子,杜洋老师 📑文章目录 一、看门狗核心原理1.1 工作原理图解1.2 经典水桶比喻 二、STM32看门狗双雄…...
Android学习总结之service篇
引言 在 Android 开发里,Service 与 IntentService 是非常关键的组件,它们能够让应用在后台开展长时间运行的操作。不过,很多开发者仅仅停留在使用这两个组件的层面,对其内部的源码实现了解甚少。本文将深入剖析 Service 和 Inte…...
网络安全的挑战与防护策略
随着互联网的高速发展,人们的生活、学习和工作已离不开网络。然而,便利的背后也潜藏着巨大的安全隐患。从数据泄露、账户被盗,到网络攻击、系统瘫痪,网络安全问题层出不穷,影响范围从个人用户到国家机构。 网络安全&a…...
spring mvc异步请求 sse 大文件下载 断点续传下载Range
学习连接 异步Servlet3.0 Spring Boot 处理异步请求(DeferredResult 基础案例、DeferredResult 超时案例、DeferredResult 扩展案例、DeferredResult 方法汇总) spring.io mvc Asynchronous Requests 官网文档 spring.io webflux&webclient官网文…...
Opencv计算机视觉编程攻略-第十节 估算图像之间的投影关系
目录 1. 计算图像对的基础矩阵 2. 用RANSAC 算法匹配图像 3. 计算两幅图像之间的单应矩阵 4. 检测图像中的平面目标 图像通常是由数码相机拍摄的,它通过透镜投射光线成像,是三维场景在二维平面上的投影,这表明场景和它的图像之间以及同一…...
14.流程自动化工具:n8n和家庭自动化工具:node-red
n8n 安装 docker方式 https://docs.n8n.io/hosting/installation/docker/ #https://hub.docker.com/r/n8nio/n8n docker pull n8nio/n8n:latest docker rm -f n8n; docker run -it \ --network macvlan --hostname n8n \ -e TZ"Asia/Shanghai" \ -e GENERIC_TIME…...
图形渲染: tinyrenderer 实现笔记(Lesson 1 - 4)
目录 项目介绍环境搭建Lesson 1: Bresenham’s Line Drawing Algorithm(画线算法)Lesson 2: Triangle rasterization 三角形光栅化Scanline rendering 线性扫描Modern rasterization approach 现代栅格化方法back-face culling 背面剔除 Lesson 3: Hidde…...
大规模硬件仿真系统的编译挑战
引言: 随着集成电路设计复杂度的不断提升,硬件仿真系统在现代芯片设计流程中扮演着越来越重要的角色。基于FPGA(现场可编程门阵列)的商用硬件仿真系统因其灵活性、全自动化、高性能和可重构性,成为验证大规模集成电路设…...
Kotlin问题汇总
Kotlin问题汇总 真机安装调试 查看真机的Android版本,将build.gradle文件中的minSdk改为手机的Android版本,点Sync Now更新设置 apk安装失败 在gradle.properties全局配置中设置android.injected.testOnlyfalse Unresolved reference: 在activity_…...
记一次常规的网络安全渗透测试
目录: 前言 互联网突破 第一层内网 第二层内网 总结 前言 上个月根据领导安排,需要到本市一家电视台进行网络安全评估测试。通过对内外网进行渗透测试,网络和安全设备的使用和部署情况,以及网络安全规章流程出具安全评估报告。本…...
【8】搭建k8s集群系列(二进制部署)之安装work-node节点组件(kubelet)
一、下载k8s二进制文件 下载地址: https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG -1.20.md 注:打开链接你会发现里面有很多包,下载一个 server 包就够了,包含了 Master 和 Worker Node 二进制文件。…...
Sentinel-自定义资源实现流控和异常处理
目录 使用SphU的API实现自定义资源 BlockException 使用SentinelResource注解定义资源 SentinelResourceAspect 使用Sentinel实现限流降级等效果通常需要先把需要保护的资源定义好,之后再基于定义好的资源为其配置限流降级等规则。 Sentinel对于主流框架&#…...
使用 VIM 编辑器对文件进行编辑
一、VIM 的两种状态 VIM(vimsual)是 Linux/UNIX 系列 OS 中通用的全屏编辑器。vim 分为两种状态,即命令状态和编辑状态,在命令状态下,所键入的字符系统均作命令来处理;而编辑状态则是用来编辑文本资料&…...
visual studio 2022的windows驱动开发
在visual studio2022中,若在单个组件中找不到Windows Driver Kit (WDK)选项,可通过提升vs版本解决,在首次选择时选择WDM 创建好项目在Source Files文件夹中创建一个test.c文件,并输入以下测试代码: #include <ntdd…...
基于大数据的美团外卖数据可视化分析系统
【大数据】基于大数据的美团外卖数据可视化分析系统 (完整系统源码开发笔记详细部署教程)✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 该系统通过对海量外卖数据的深度挖掘与分析,能够为美团外卖平台提供运营决策支…...
C/C++测试框架googletest使用示例
文章目录 文档编译安装示例参考文章 文档 https://github.com/google/googletest https://google.github.io/googletest/ 编译安装 googletest是cmake项目,可以用cmake指令编译 cmake -B build && cmake --build build将编译产物lib和include 两个文件夹…...
vue2打包部署到nginx,解决路由history模式下页面空白问题
项目使用的是vue2,脚手架vue-cli 4。 需求:之前项目路由使用的是hash,现在要求调整为history模式,但是整个过程非常坎坷,遇到了页面空白问题。现在就具体讲一下这个问题。 首先,直接讲路由模式由hash改为…...
如何将本地项目上传到Gitee的指定分支
在团队协作开发中,我们经常需要将本地项目代码上传到代码托管平台(如Gitee)的特定分支。本文将详细介绍从零开始完成这一过程的完整步骤,包含多种场景的解决方案和常见问题处理。 一、准备工作 1.1 安装Git 确保你的系统已安装…...
【数据结构】排序算法(中篇)·处理大数据的精妙
前引:在进入本篇文章之前,我们经常在使用某个应用时,会出现【商品名称、最受欢迎、购买量】等等这些榜单,这里面就运用了我们的排序算法,作为刚学习数据结构的初学者,小编为各位完善了以下几种排序算法&…...
AI随身翻译设备:从翻译工具到智能生活伴侣
文章目录 AI随身翻译设备的核心功能1. 实时翻译2. 翻译策略3. 翻译流程4. 输出格式 二、AI随身翻译设备的扩展功能1. 语言学习助手2. 旅行助手3. 商务助手4. 教育助手5. 健康助手6. 社交助手7. 技术助手8. 生活助手9. 娱乐助手10. 应急助手 三、总结四、未来发展趋势࿰…...
chromadb 安装和使用
简介 Chromadb 是一个开源的嵌入式向量数据库,专为现代人工智能和机器学习应用设计,旨在高效存储、检索和管理向量数据。以下是关于它的详细介绍: 核心特性 易于使用:提供了简洁直观的 API,即使是新手也能快速上手…...
【全球首发】DeepSeek谷歌版1.1.5 - 免费GPT-4级别AI工具
【全球首发】DeepSeek谷歌版1.1.5 - 免费GPT-4级别AI工具 资源简介 DeepSeek谷歌版1.1.5是目前全球领先的免费AI助手,性能超越国内主流AI产品,提供类似GPT-4的智能体验。 版本信息 最新版本:1.1.5(2024最新版)应用…...
LeetCode第132题_分割回文串II
LeetCode 第132题:分割回文串 II 题目描述 给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是回文。 返回符合要求的 最少分割次数 。 难度 困难 题目链接 点击在LeetCode中查看题目 示例 示例 1: 输入…...
LabVIEW 在故障诊断中的算法
在故障诊断领域,LabVIEW 凭借其强大的图形化编程能力、丰富多样的工具包以及卓越的功能性能,成为工程师们进行故障诊断系统开发的得力助手。通过运用各种算法,能够对采集到的信号进行全面、深入的分析处理,从而准确地诊断出系统中…...
SQL DB 数据类型
SQL DB 数据类型 引言 在数据库管理系统中,数据类型是定义和存储数据的方式。SQL(结构化查询语言)数据库中的数据类型决定了数据的存储格式、大小、取值范围以及如何处理数据。合理选择和使用数据类型对于确保数据库性能、数据完整性和应用程序的准确性至关重要。 SQL 数…...
Qt音频输出:QAudioOutput详解与示例
1. 简介 QAudioOutput是Qt多媒体框架中的一个关键类,它提供了将PCM(脉冲编码调制)原始音频数据发送到音频输出设备的接口。作为Qt多媒体组件的一部分,QAudioOutput允许开发者在应用程序中实现音频播放功能,支持多种音…...
springboot 启动方式 装配流程 自定义starter 文件加载顺序 常见设计模式
目录 springboot介绍 核心特性 快速搭建 Spring Boot 项目 方式一:使用 Spring Initializr 方式二:使用 IDE 插件 示例代码 1. 创建项目并添加依赖 2. 创建主应用类 3. 创建控制器类 4. 运行应用程序 配置文件 部署和监控 部署 监控 与其…...
Android学习之Material Components
以下是 Material Design 提供的核心控件列表(基于最新 Material Components for Android 库),按功能分类整理: 1. 基础按钮类 控件名称类名说明MaterialButtoncom.google.android.material.button.MaterialButton遵循 Material 规…...
sentinel新手入门安装和限流,热点的使用
1 sentinel入门 1.1下载sentinel控制台 🔗sentinel管理后台官方下载地址 下载完毕以后就会得到一个jar包 1.2启动sentinel 将jar包放到任意非中文目录,执行命令: java -jar 名字.jar如果要修改Sentinel的默认端口、账户、密码ÿ…...
Ubuntu 22 Linux上部署DeepSeek R1保姆式操作详解(Xinference方式)
一、安装步骤 1.基础环境安装 安装显卡驱动、cuda,根据自己硬件情况查找相应编号,本篇不介绍这部分内容,只给出参考指令,详情请读者自行查阅互联网其它参考资料。 sudo apt install nvidia-utils-565-server sudo apt install…...
