STM32看门狗应用实战:独立看门狗与窗口看门狗深度解析(下) | 零基础入门STM32第九十五步

主题内容教学目的/扩展视频
看门狗什么是看门狗,原理分析,启动喂狗方法,读标志位。熟悉在程序里用看门狗。

师从洋桃电子,杜洋老师


📑文章目录

    • 一、看门狗应用架构分析
      • 1.1 系统监控流程图
      • 1.2 双看门狗应用场景对比
    • 二、独立看门狗实战解析
      • 2.1 测试程序核心代码
      • 2.2 代码执行流程图
      • 2.3 关键参数计算
    • 三、窗口看门狗进阶应用
      • 3.1 测试程序核心逻辑
      • 3.2 程序运行原理图
      • 3.3 时间窗口参数解析
    • 四、关键代码剖析
      • 4.1 独立看门狗初始化
      • 4.2 窗口看门狗中断处理
    • 五、扩展应用设计
      • 5.1 复合监控系统架构
      • 5.2 调试技巧
    • 六、常见问题解答
    • 七、性能优化建议
    • 八、相关资源


▲ 回顾上期🔍STM32看门狗原理与应用详解:独立看门狗 vs 窗口看门狗(上) | 零基础入门STM32第九十四步


一、看门狗应用架构分析

1.1 系统监控流程图

任务阻塞/异常
系统启动
看门狗初始化
主循环运行
执行核心任务
定时喂狗
未及时喂狗
看门狗超时
系统复位

1.2 双看门狗应用场景对比

特性独立看门狗(IWDG)窗口看门狗(WWDG)
触发条件任意时间未喂狗窗口期外喂狗/超时未喂狗
响应速度约1秒(可配置)毫秒级响应
中断支持提供早期预警中断
典型应用基础系统监控实时任务时序控制

二、独立看门狗实战解析

2.1 测试程序核心代码

// main.c关键逻辑
IWDG_Init(); // 初始化看门狗(预分频64,重载值625)
while(1) {IWDG_Feed(); // 喂狗操作if(按键按下) delay_s(2); // 人为制造喂狗失败
}

2.2 代码执行流程图

MCU IWDG 初始化(设置预分频/重载值) 定期喂狗 执行正常任务 延时2秒(跳过喂狗) alt [按键按下] loop [主循环] 超时复位 MCU IWDG

2.3 关键参数计算

超时时间 = \frac{预分频值 \times 重载值}{40} \ (ms)

示例配置:

  • 预分频值:64(实际分频系数=4×64=256)
  • 重载值:625
  • 理论超时时间:≈1秒

三、窗口看门狗进阶应用

3.1 测试程序核心逻辑

// main.c关键代码
WWDG_Init(); // 初始化窗口看门狗
while(1) {delay_ms(54); // 精确窗口时间控制WWDG_Feed();  // 窗口期内喂狗
}

3.2 程序运行原理图

0x40
0x3F
窗口期内
主时钟
预分频器
7位递减计数器
触发中断
系统复位
喂狗操作

3.3 时间窗口参数解析

时间窗口 = \frac{4096 \times 预分频值 \times (CNT-WR)}{PCLK1} \ (μs)

示例配置:

  • 计数器初值(CNT):0x7F(127)
  • 窗口值(WR):0x50(80)
  • 预分频值:8
  • PCLK1时钟:36MHz
  • 实际窗口时间:48ms~64ms

四、关键代码剖析

4.1 独立看门狗初始化

void IWDG_Init(void) {IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);IWDG_SetPrescaler(pre);    // 设置预分频IWDG_SetReload(rlr);       // 设置重载值IWDG_ReloadCounter();      // 重载计数器IWDG_Enable();             // 启动看门狗
}

4.2 窗口看门狗中断处理

void WWDG_IRQHandler(void) {WWDG_ClearFlag();          // 清除中断标志// 紧急处理代码// 保存系统状态/发送警报WWDG_SetCounter(WWDG_CNT); // 重置计数器
}

五、扩展应用设计

5.1 复合监控系统架构

主任务
IWDG喂狗
实时任务
WWDG喂狗
中断预警
异常处理
基础监控

5.2 调试技巧

  1. IWDG冻结功能:在调试模式设置DBGMCU_CR寄存器
  2. WWDG时间测量:使用定时器捕获喂狗脉冲
  3. 安全喂狗策略:
    • 多任务协同喂狗
    • 喂狗前进行系统自检
  4. 状态保存机制:在复位前将关键数据存入备份寄存器

六、常见问题解答

Q1:喂狗操作导致程序卡顿?

  • 优化喂狗位置:放在主循环空闲时段
  • 使用DMA或硬件自动喂狗

Q2:窗口时间计算不准确?

  • 校准主时钟源
  • 使用公式:实际时间 = (4096×预分频×(CNT-WR))/PCLK1

Q3:同时使用双看门狗要注意什么?

  • 设置不同的超时周期
  • IWDG周期 > WWDG周期
  • 错开喂狗时间点

七、性能优化建议

优化方向实施方法预期效果
时钟精度使用外部晶振提高时间计算精度
喂狗策略多任务协同喂狗避免单点故障
异常处理在WWDG中断中保存系统状态提升故障诊断能力
功耗控制在低功耗模式下调整预分频平衡监控与功耗需求

附:看门狗配置速查表

寄存器IWDGWWDG
控制寄存器IWDG_KRWWDG_CR
预分频寄存器IWDG_PRWWDG_CFR
重载寄存器IWDG_RLRWWDG_CFR
状态寄存器-WWDG_SR

八、相关资源

[1] 洋桃电子B站课程-STM32入门100步
[2] STM32官方文档手册
[3] STM32F103固件函数库用户手册(中文)
[4] 看门狗原理.pptx
[5] 独立看门狗测试程序
[6] 窗口看门狗测试程序


💬 技术讨论(请在评论区留言~)

📌 下期预告:下一期将探讨TIM定时器重点课程,欢迎持续关注!

点击查阅🔍往期【STM32专栏】文章

版权声明:本文采用[CC BY-NC-SA 4.0]协议,转载请注明来源
实测开发版:洋桃1号开发版(基于STM32F103C8T6)
更新日志

  • v1.0 初始版本(2025-04-07)

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

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

相关文章

nacos集群启动问题

根据您的描述,Nacos集群只能启动两个节点,可能的原因和解决方法如下: 1. 集群配置问题 • 原因:cluster.conf文件中可能只配置了两个节点的地址,导致第三个节点无法加入集群。 • 解决方法: • 检查每个…

【C语言】跳台阶

相信你是最棒哒!!! 一、题目描述 二、题目代码 1.斐波那契数列 2.DFS深度搜索 总结 一、题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果…

指纹浏览器技术架构解析:高并发批量注册业务的工程化实践——基于分布式指纹引擎与防关联策略的深度实现

一、技术背景与行业痛点 在跨境电商、广告投放、问卷调查等场景中,批量注册与多账号矩阵运营已成为刚需。然而,主流平台(如亚马逊、Facebook、Google)的风控系统通过浏览器指纹追踪(Canvas/WebGL/WebRTC等&#xff09…

linux基础操作

一、系统目录知识 /bin: bin 是 Binaries (二进制文件) 的缩写, 这个目录存放着最经常使用的命令。 /boot: 这里存放的是启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件。 /dev : dev 是 Device(设备) 的缩写,…

源码分析之Leaflet图层控制控件Control.Layers实现原理

概述 本文将介绍Leaflet库中最后一个组件,即图层控制组件 Control.Layers。 源码实现 export var Layers Control.extend({options: {collapsed: true,position: "topright",autoZIndex: true,hideSingleBase: false,sortLayers: false,sortFunction:…

Element 使用 textarea 内容实现高度自适应

在 ElInput 组件的 type"textarea" 模式下&#xff0c;你可以使用 autosize 属性来实现内容高度自适应。当没有内容时默认显示 3 行&#xff0c;当有内容时根据内容动态调整高度。 代码&#xff1a; <el-form-item v-if"item.type textarea" :rules&…

Java技术生态前沿洞察:虚拟线程引领并发革命,框架创新赋能云原生时代

Java技术生态正迎来新一轮变革浪潮。虚拟线程的落地成为高并发编程范式转折点&#xff0c;其极低资源开销特性在电商秒杀场景中展现出3倍吞吐量提升&#xff0c;彻底改写传统线程模型性能边界。Spring Boot 3.2原生支持虚拟线程&#xff0c;结合Observation API与HTTP客户端优化…

leetcode每日一题:替换子串得到平衡字符串

引言 今天的每日一题原题是1863. 找出所有子集的异或总和再求和&#xff0c;比较水&#xff0c;直接对于集合中的每一个元素&#xff0c;都有取或者不取2种情况&#xff0c;直接递归进去求和即可。更换成前几天遇到的更有意思的一题来写这个每日一题。 题目 有一个只含有 Q,…

node-modules-inspector 可视化node_modules

1、node_modules 每个vue的项目都有很多的依赖&#xff0c;有的是dev的&#xff0c;有的是生产的。 2、使用命令pnpx node-modules-inspector pnpx node-modules-inspector 3、node_modules可视化 4、在线体验 Node Modules Inspector 5、github地址 https://github.com/a…

【零基础入门unity游戏开发——动画篇】unity旧动画系统Animation组件的使用

考虑到每个人基础可能不一样&#xff0c;且并不是所有人都有同时做2D、3D开发的需求&#xff0c;所以我把 【零基础入门unity游戏开发】 分为成了C#篇、unity通用篇、unity3D篇、unity2D篇。 【C#篇】&#xff1a;主要讲解C#的基础语法&#xff0c;包括变量、数据类型、运算符、…

Linux网络:数据链路层以太网

目录 认识数据链路层关于以太网1. 基本概念2. 以太网帧格式3. MAC vs IP 认识数据链路层 数据链路层 位于物理层和网络层之间&#xff0c;其作用是将源自物理层来的数据可靠地传输到相邻节点的目标主机的网络层&#xff0c;主要通过物理介质(如以太网&#xff0c;Wi-Fi等)将数…

SpringMVC与SpringCloud的区别

SpringMVC与SpringCloud的核心区别 功能定位 • SpringMVC&#xff1a; 基于Spring框架的Web层开发模块&#xff0c;采用MVC&#xff08;Model-View-Controller&#xff09;模式&#xff0c;专注于处理HTTP请求、路由分发&#xff08;如DispatcherServlet&#xff09;和视图…

使用MATIO库写入MATLAB结构体(struct)数据的示例程序

使用MATIO库写入MATLAB结构体(struct)数据的示例程序 MATIO是一个用于读写MATLAB数据文件(.mat)的开源C库。下面是一个完整的示例程序&#xff0c;展示如何使用MATIO库创建一个包含结构体数据的MAT文件。 示例程序 #include <stdio.h> #include <stdlib.h> #inc…

SSE与Streamable HTTP的区别:协议与技术实现的深度对比

引言 在现代Web开发中&#xff0c;实时数据传输是许多应用的核心需求&#xff0c;从聊天应用到股票市场更新&#xff0c;从游戏服务器到AI模型通信。为了满足这一需求&#xff0c;各种技术应运而生&#xff0c;其中Server-Sent Events (SSE)和Streamable HTTP是两种重要的实时…

【Easylive】视频在线人数统计系统实现详解 WebSocket 及其在在线人数统计中的应用

【Easylive】项目常见问题解答&#xff08;自用&持续更新中…&#xff09; 汇总版 视频在线人数统计系统实现详解 1. 系统架构概述 您实现的是一个基于Redis的视频在线人数统计系统&#xff0c;主要包含以下组件&#xff1a; 心跳上报接口&#xff1a;客户端定期调用以…

Linux 高级命令与常见操作:文本处理、系统管理与网络调试

下面是一份针对已经熟悉 Linux 基础命令的用户所整理的「高级命令与常见操作」笔记&#xff0c;涵盖文本处理、系统管理、网络调试与其他常用的进阶技巧。请你审核下面笔记&#xff0c;检查是否有过时的内容&#xff0c;如有请进行替换&#xff0c;确保其符合现代化需求&#x…

使用MFC ActiveX开发KingScada控件(OCX)

最近有个需求&#xff0c;要在KingScada上面开发一个控件。 原来是用的WinCC&#xff0c;WinCC本身是支持调用.net控件&#xff0c;就是winform控件的&#xff0c;winform控件开发简单&#xff0c;相对功能也更丰富。奈何WinCC不是国产的。 话说KingScada&#xff0c;国产组态软…

QScrollArea 内部滚动条 QSS 样式失效问题及解决方案

在使用 Qt 进行 UI 开发时,我们经常希望通过 QSS(Qt Style Sheets)自定义控件的外观,比如为 QScrollArea 的内部滚动条设置特定的样式。然而,有开发者遇到了这样的问题:在 UI 设计器中预览 QSS 显示效果正常,但程序运行时却显示为系统默认样式。经过反复测试和调试,最终…

使用OpenSceneGraph生成3D数据格式文件

OpenSceneGraph (OSG) 提供了多种方式来生成和导出3D数据格式文件。以下是详细的生成方法和示例代码&#xff1a; 一、基本文件生成方法 1. 使用osgDB::writeNodeFile函数 这是最直接的生成方式&#xff0c;支持多种格式&#xff1a; #include <osgDB/WriteFile>osg:…

JMeter接口性能测试从入门到精通

前言&#xff1a; 本文主要介绍了如何利用jmter进行接口的性能测试 1.在测试计划中添加线程组 1.1.线程组界面中元素含义 如果点击循环次数为永远&#xff1a; 2.添加HTTP取样器 2.1.填写登录接口的各个参数 2.2.在线程组下面增加查看结果树 请求成功的情况&#xff1a; 请求…