STM32 看门狗
目录
背景
独立看门狗(IWDG)
寄存器访问保护
窗口看门狗(WWDG)
程序
独立看门狗
设置独立看门狗程序
第一步、使能对独立看门狗寄存器的写操作
第二步、设置预分频和重装载值
第三步、喂狗
第四步、使能独立看门狗
喂狗程序编辑编辑
应用实例
窗口看门狗
设置窗口看门狗程序
第一步、使能PCLK1的外设时钟
第二步、设置预分频和窗口值
第三步、使能WWDG
第四步、中断配置(清除中断标识、配置中断优先级、开启中断)
第五步、中断优先级配置
第六步、中断处理函数
第七步、窗口看门狗喂狗
应用实例
背景
看门狗在单片机系统中非常重要,主要用于防止系统死锁、处理软件故障、应对外部干扰和提高系统可靠性。由于单片机系统容易受到外界干扰导致程序跑飞或陷入死循环,看门狗机制能够在程序异常时及时重启系统,避免系统崩溃或数据丢失等严重后果,通过本篇文章介绍STM32的看门狗种类,以及如何使用这两种看门狗。
STM32看门狗主要有两种类型:独立看门狗(IWDG)和窗口看门狗(WWDG)。


独立看门狗(IWDG)
独立看门狗(IWDG)是STM32系列中常见的看门狗类型之一。它使用一个独立的40kHz低速时钟(LSI),这个时钟源是独立于主系统时钟的(所以不需要像USART等外设一样,使用前使能外设时钟),因此即使在主时钟发生故障时,IWDG仍能正常工作。IWDG通过一个12位的递减计数器工作,当计数器的值减到0时,系统会产生复位信号,重启MCU。用户需要在预定的时间内“喂狗”(即向看门狗寄存器写入一个特定的值),以重置计数器,防止系统复位


寄存器访问保护
窗口看门狗(WWDG)
窗口看门狗(WWDG)通过APB1时钟分频后得到的时钟驱动。它与IWDG不同,WWDG有一个可配置的时间窗口,用于检测应用程序的运行状态。如果应用程序在这个时间窗口内正常运行,则不会产生复位信号;如果应用程序超出这个时间窗口,则会触发复位信号,重启系统




程序
独立看门狗
设置独立看门狗程序
//看门狗定时时间计算公式:Tout=(预分频值*重装载值)/40 (单位:ms)
//当前pre为64,rlr为625,计算得到Tout时间为1秒(大概值)。#define pre IWDG_Prescaler_64 //分频值范围:4,8,16,32,64,128,256
#define rlr 625 //重装载值范围:0~0xFFF(4095)void IWDG_Init(void){ //初始化独立看门狗IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); //使能对寄存器IWDG_PR和IWDG_RLR的写操作IWDG_SetPrescaler(pre); //设置IWDG预分频值IWDG_SetReload(rlr); //设置IWDG重装载值IWDG_ReloadCounter(); //按照IWDG重装载寄存器的值重装载IWDG计数器IWDG_Enable(); //使能IWDG
}
独立看门狗时间
Tout=(预分频值*重装载值)/40 (单位:ms)推导过程:独立看门狗独立于stm32主时钟系统(SYSCLK)
是使用40Khz的LSI经过预分频后的频率位 40/预分频值
所以看门狗定时器的看门狗的时间为:(40/(预分频值*重装载值))的倒数!//当前pre为64,rlr为625,计算得到Tout时间为1秒(大概值)
第一步、使能对独立看门狗寄存器的写操作
![]()

看函数的定义为:
第二步、设置预分频和重装载值

第三步、喂狗
![]()

第四步、使能独立看门狗
![]()
喂狗程序


void IWDG_Feed(void){ //喂狗程序IWDG_ReloadCounter();//固件库的喂狗函数
}
应用实例

窗口看门狗
设置窗口看门狗程序
void WWDG_Init(void){ //初始化窗口看门狗RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE); // WWDG 时钟使能WWDG_SetPrescaler(fprer); //设置 WWDG 预分频值WWDG_SetWindowValue(wr); //设置窗口值WWDG_Enable(WWDG_CNT); //使能看门狗,设置 counterWWDG_ClearFlag(); //清除提前唤醒中断标志位WWDG_NVIC_Init(); //初始化窗口看门狗 NVICWWDG_EnableIT(); //开启窗口看门狗中断
}void WWDG_NVIC_Init(void){ //窗口看门狗中断服务程序(被WWDG_Init调用)NVIC_InitTypeDef NVIC_InitStructure;NVIC_InitStructure.NVIC_IRQChannel = WWDG_IRQn; //WWDG 中断NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //抢占 2 子优先级 3 组 2NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //抢占 2,子优先级 3,组 2NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;NVIC_Init(&NVIC_InitStructure); //NVIC 初始化
}void WWDG_Feed(void){ //窗口喂狗程序WWDG_SetCounter(WWDG_CNT); //固件库的喂狗函数
}void WWDG_IRQHandler(void){ //窗口看门狗中断处理程序WWDG_ClearFlag(); //清除提前唤醒中断标志位//此处加入在复位前需要处理的工作或保存数据
} 第一步、使能PCLK1的外设时钟
![]()

第二步、设置预分频和窗口值
//窗口看门狗定时时间计算公式:
//上窗口超时时间(单位us) = 4096*预分频值*(计数器初始值-窗口值)/APB1时钟频率(单位MHz)
//下窗口超时时间(单位us) = 4096*预分频值*(计数器初始值-0x40)/APB1时钟频率(单位MHz)#define WWDG_CNT 0x7F //计数器初始值,范围:0x40~0x7F
#define wr 0x50 //窗口值,范围:0x40~0x7F
#define fprer WWDG_Prescaler_8 //预分频值,取值:1,2,4,8个人认为在计算超时时间时候:
计数器初始值-窗口上界值 + 1
计数器初始值-窗口下界值 + 1

第三步、使能WWDG
第四步、中断配置(清除中断标识、配置中断优先级、开启中断)
第五步、中断优先级配置
void WWDG_NVIC_Init(void){ //窗口看门狗中断服务程序(被WWDG_Init调用)NVIC_InitTypeDef NVIC_InitStructure;NVIC_InitStructure.NVIC_IRQChannel = WWDG_IRQn; //WWDG 中断NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //抢占 2 子优先级 3 组 2NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //抢占 2,子优先级 3,组 2NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;NVIC_Init(&NVIC_InitStructure); //NVIC 初始化
} 第六步、中断处理函数
void WWDG_IRQHandler(void){ //窗口看门狗中断处理程序WWDG_ClearFlag(); //清除提前唤醒中断标志位//此处加入在复位前需要处理的工作或保存数据
} 第七步、窗口看门狗喂狗
void WWDG_Feed(void){ //窗口喂狗程序WWDG_SetCounter(WWDG_CNT); //固件库的喂狗函数
}
应用实例

相关文章:
STM32 看门狗
目录 背景 独立看门狗(IWDG) 寄存器访问保护 窗口看门狗(WWDG) 程序 独立看门狗 设置独立看门狗程序 第一步、使能对独立看门狗寄存器的写操作 第二步、设置预分频和重装载值 第三步、喂狗 第四步、使能独立看门狗 喂狗…...
飞书API
extend目录下,API <?php // ---------------------------------------------------------------------- // | 飞书API // ---------------------------------------------------------------------- // | COPYRIGHT (C) 2021 http://www.jeoshi.com All rights reserved. …...
深入解析 Hydra 库:灵活强大的 Python 配置管理框架
深入解析 Hydra 库:灵活强大的 Python 配置管理框架 在机器学习、深度学习和复杂软件开发项目中,管理和维护大量的配置参数是一项具有挑战性的任务。传统的 argparse、json 或 yaml 方式虽然能管理部分配置,但随着项目规模的增长,…...
【开源免费】基于Vue和SpringBoot的失物招领平台(附论文)
本文项目编号 T 243 ,文末自助获取源码 \color{red}{T243,文末自助获取源码} T243,文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…...
科普:你的笔记本电脑中有三个IP:127.0.0.1、无线网 IP 和局域网 IP;两个域名:localhost和host.docker.internal
三个IP 你的笔记本电脑中有三个IP:127.0.0.1、无线网 IP 和局域网 IP。 在不同的场景下,需要选用不同的 IP 地址,如下为各自的特点及适用场景: 127.0.0.1(回环地址) 特点 127.0.0.1 是一个特殊的 IP 地…...
测试WSS服务器
必须有域名,证书也是强制关联这个域名,阿里云、腾讯云、百度云都可以申请免费的证书,外网对应的主机要备案到域名 备案:是针域名下的主机备案,不备案的话,会强制断网 这个网站可以测试本地WSS连接 …...
unity学习49:寻路网格链接 offMeshLinks, 以及传送门效果
目录 1 网格链接 offMeshLinks 功能入口 1.1 unity 2022之前 1.2 unity 2022之后 2 网格链接 offMeshLinks 功能设置 3 点击 offMeshLinks 功能里的bake 3.1 unity 2022之前 3.2 unity 2022之后 3.3 实测link 3.4 跳跃距离增大,可以实现轻功类的效果 4 …...
Web 开发中的 5 大跨域标签解析:如何安全地进行跨域请求与加载外部资源
在 Web 开发中,跨域(Cross-Origin)是指从一个源(协议、域名、端口)访问另一个源的资源。以下是5个常见的用于跨域操作的 HTML 标签,它们主要用于跨域请求或加载外部资源:1. <script> 标签 用途:最常用于进行跨域请求的标签,特别是在 JSONP 技术中。浏览器允许通…...
UMLS数据下载及访问
UMLS数据申请 这个直接在官网上申请即可,记得把地址填全,基本都会拿到lisence。 UMLS数据访问 UMLS的数据访问分为网页访问,API访问以及数据下载后的本地访问,网页访问,API访问按照官网的指示即可,这里主…...
23种设计模式 - 空对象模式
模式定义 空对象模式(Null Object Pattern)是一种行为型设计模式,通过用无操作的空对象替代null值,消除客户端对空值的检查,避免空指针异常。其核心是让空对象与真实对象实现相同接口,但空对象不执行实际逻…...
Redis三剑客解决方案
文章目录 缓存穿透缓存穿透的概念两种解决方案: 缓存雪崩缓存击穿 缓存穿透 缓存穿透的概念 每一次查询的 key 都不在 redis 中,数据库中也没有。 一般都是属于非法的请求,比如 id<0,比如可以在 API 入口做一些参数校验。 大量访问不存…...
大学本科教务系统设计方案,涵盖需求分析、架构设计、核心模块和技术实现要点
以下是大学本科教务系统的设计方案,涵盖需求分析、架构设计、核心模块和技术实现要点: 大学本科教务系统设计方案 一、需求分析 1. 核心用户角色 角色功能需求学生选课/退课、成绩查询、课表查看、学分统计、考试报名、学业预警教师成绩录入、课程大纲上传、教学进度管理、…...
Docker Mysql 数据迁移
查看启动命令目录映射 查看容器名称 docker ps查看容器的启动命令 docker inspect mysql8.0 |grep CreateCommand -A 20如下图所示:我这边是把/var/lib/mysql 目录映射到我宿主机的/mnt/mysql/data目录下,而且我的数量比较大使用方法1的话时间比较久,所以我采用方法2 如果没…...
ubuntu22.04离线安装K8S
1. 准备离线安装包 参考教程离线包准备教程 2. 准备环境 2.1. 准备主机 主机名ip系统k8s-master192.168.38.128ubuntu22.04k8s-node192.168.38.131ubuntu22.04 2.2. 设置host 修改 /etc/hosts 文件,添加master和node节点,需要和主机名保持一致 2…...
微信小程序中将图片截图为正方形(自动居中)
没啥可说的,直接看代码吧(邪恶的微信小程序和浏览器的还不一样) //将用户图片自动剪切成正方形 const cutImgToSquare (imgPath: string) > {//ts-ignorewx.createSelectorQuery().select(#canvas).fields({ node: true, size: true }).…...
传统的自动化行业的触摸屏和上位机,PLC是否会被取代?
传统的自动化行业的触摸屏和上位机是否会被取代? 在工业自动化领域,触摸屏和上位机长期扮演着核心角色,尤其在污水处理、化工生产等场景中,它们通过实时数据采集、逻辑控制、报警联动等功能,保障了生产设备的稳定运行…...
【论文精读】VLM-AD:通过视觉-语言模型监督实现端到端自动驾驶
论文地址: VLM-AD: End-to-End Autonomous Driving through Vision-Language Model Supervision 摘要 人类驾驶员依赖常识推理来应对复杂多变的真实世界驾驶场景。现有的端到端(E2E)自动驾驶(AD)模型通常被优化以模仿…...
2024年数字政府服务能力优秀创新案例汇编(附下载)
12月19日,由中国电子信息产业发展研究院指导、中国软件评测中心主办的“2024数字政府评估大会”在北京召开,大会主题是:为公众带来更好服务体验。 会上,中国软件评测中心副主任吴志刚发布了2024年数字政府服务能力评估结果&#…...
Ollama Docker 镜像部署
文章来源:Docker 部署文档 -- Ollama 中文文档|Ollama官方文档 仅 CPU docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama英伟达 GPU 安装 NVIDIA Container Toolkit。 使用 Apt 安装 配置存储库 curl -fsSL https://nvidia.g…...
[深度学习][python]yolov12+bytetrack+pyqt5实现目标追踪
【算法介绍】 实时目标检测因其低延迟特性而持续受到广泛关注,具有重要的实际应用价值[4, 17, 24, 28]。其中,YOLO系列[3, 24, 28, 29, 32, 45-47, 53, 57, 58]通过有效平衡延迟与精度,在该领域占据主导地位。尽管YOLO的改进多集中在损失函数…...
OpCore-Simplify:5分钟完成黑苹果OpenCore自动化配置终极指南
OpCore-Simplify:5分钟完成黑苹果OpenCore自动化配置终极指南 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify OpCore-Simplify是一款专为简…...
UCIe 1.0 实战笔记:当PCIe 6.0 Flit遇上Chiplet,这10个字节的改动意味着什么?
UCIe 1.0 技术解析:PCIe 6.0 Flit与Chiplet互连的10字节优化设计 在芯片设计领域,UCIe(Universal Chiplet Interconnect Express)标准的出现为异构集成提供了全新的互连解决方案。作为PCIe 6.0的扩展,UCIe 1.0特别针对…...
舆情监测系统实战:从热搜翻车到智能预警,我总结了这些经验
前几天某汽车品牌因为一段车主维权视频直接冲上热搜,评论区炸了锅。等公关团队反应过来,话题阅读量已经破了两个亿。说实话,这种剧本我见过太多次了——凌晨三点出事,早上九点上班才发现,黄金处置期就这么白白浪费掉。…...
视频大模型幻觉问题解析与Dr.V框架解决方案
1. 视频大模型幻觉问题的现状与挑战在当今多模态大语言模型(MLLMs)快速发展的背景下,视频理解能力已成为衡量模型智能水平的重要指标。然而,一个长期困扰研究者和实践者的核心问题是:为什么这些看似强大的模型会在视频…...
别再只调参了!用Python手把手实现蝴蝶优化算法(BOA),解决你的工程优化难题
蝴蝶优化算法实战:用Python解决复杂工程优化问题 在工程实践中,我们常常会遇到各种复杂的优化问题——从机器学习模型的超参数调优到天线阵列设计,从资源分配到路径规划。这些问题往往具有多峰值、非线性、高维度等特点,传统的梯度…...
Save Image as Type:解决网页图片格式兼容性问题的Chrome扩展
Save Image as Type:解决网页图片格式兼容性问题的Chrome扩展 【免费下载链接】Save-Image-as-Type Save Image as Type is an chrome extension which add Save as PNG / JPG / WebP to the context menu of image. 项目地址: https://gitcode.com/gh_mirrors/sa…...
基于Simulink的无线充电系统EMI噪声建模与抑制
目录 手把手教你学Simulink——基于Simulink的无线充电系统EMI噪声建模与抑制 摘要 一、背景与挑战 1.1 为什么无线充电板一开机,频谱仪就“爆表”? 1.2 核心痛点与设计目标 二、系统架构与核心控制推导 2.1 整体架构:从“噪声源头”到“频谱整形” 2.…...
CentOS 7下Qt 5.14.2保姆级安装教程:从.run包到菜单栏图标(含libGL报错解决)
CentOS 7下Qt 5.14.2图形化安装全流程实战指南 在Linux环境下进行Qt开发,CentOS 7依然是许多企业和开发者的首选系统。不同于源码编译的复杂过程,使用官方.run安装包能够快速搭建稳定的开发环境。本文将手把手带你完成从安装包准备到菜单集成的完整流程&…...
告别复杂命令!在OpenWRT管理界面里一键安装配置cpolar,实现N1软路由远程访问
零命令行操作:OpenWRT图形界面全流程配置cpolar内网穿透 手里那台斐讯N1刷了OpenWRT后,你是不是也遇到过这样的困扰?想在外网访问家里的软路由管理页面,却被SSH命令行劝退。其实从软件包安装到隧道配置,整个过程都能在…...
JCSprout字符串优化终极指南:StringBuilder与StringBuffer性能对比
JCSprout字符串优化终极指南:StringBuilder与StringBuffer性能对比 【免费下载链接】JCSprout 👨🎓 Java Core Sprout : basic, concurrent, algorithm 项目地址: https://gitcode.com/gh_mirrors/jc/JCSprout 在Java开发中&#x…...


