当前位置: 首页 > news >正文

STM32F407单片机编程入门(十) IWDG独立看门狗详解及实战含源码

文章目录

    • 一.概要
    • 二.独立看门狗介绍
      • 1.独立看门狗基本介绍
      • 2.独立看门狗功能描述
      • 3.独立看门狗复位时间
    • 三.CubeMX配置一个独立看门狗IWDG例程
    • 四.CubeMX工程源代码下载
    • 五.小结

一.概要

什么是单片机看门狗
看门狗(WDT)是一个定时器,开启看门狗定时器之后(比如定时500ms),在单片机程序中每隔一定的时间(小于500ms)要“喂狗”一次,即将看门狗定时器清零。这样做的用处是,一旦单片机程序跑飞,没有在定时的时间之内去喂狗,那么定时达到500ms时,看门狗自动将单片机复位。

看门狗作用
看门狗的作用就是对单片机运行状态进行实时监测,监测单片机程序运行状态,防止程序跑飞,进入死循环。

看门狗原理
在系统运行以后,启动了看门狗的计数器,看门狗就开始自动计数; MCU正常工
作时,每隔一段时间输出一个信号到喂狗端,将WDT清零; 一旦单片机由于干扰造成程序跑飞后,而进入死循环状态时,在超过规定的时间内“喂狗”程序不能被执行,看门狗计数器就会溢出,从而引起看门狗中断,就会输出一个复位信号到MCU,造成系统复位。
在使用看门狗时,要注意适时喂狗。

看门狗分类

单片机的看门狗分为独立看门狗和窗口看门狗
独立看门狗(IWDG),顾名思义,就是独立的一个看门狗,由其专用低速时钟 (LSI) 驱动,因此,即便在主时钟发生故障时仍然保持工作状态。IWDG 最适合应用于那些需要看门狗作为一个在主程序之外,能够完全独立工作,并且对时间精度要求较低的场合。

窗口看门狗(WWDG),之所以称为窗口,是因为其喂狗时间是一个有上下限的范围内,你可以通过设定相关寄存器,设定其上限时间和下限时间:喂狗的时间不能过早也不能过晚。

二.独立看门狗介绍

1.独立看门狗基本介绍

独立看门狗(IWDG)由专用的低速时钟(LSI)驱动,即使主时钟发生故障它也仍然有效,一旦启动独立看门狗,就不能停止(LSI也不能被禁止)。看门狗被激活后,则在计数器计数至0x000时产生复位,在电源稳定期间,即使系统进入STOP和STANDBY模式,独立看门狗复位能将系统从STANDBY模式唤醒。
我们平时用的比较多的就是IWDG。

2.独立看门狗功能描述

在寄存器(IWDG_KR)中写入0xCCCC,开始启用独立看门狗;此时计数器开始从其复位值0xFFF递减计数。当计数器计数到末尾0x000时,会产生一个复位信号(IWDG_RESET)。
无论何时,只要在寄存器IWDG_KR中写入0xAAAA, IWDG_RLR中的值就会被重新加载到计数器,从而避免产生看门狗复位 。
在这里插入图片描述

3.独立看门狗复位时间

根据IWDG_PR和IWDG_RLR寄存器,可以配置看门狗产生复位的时间,复位时间见下图:
在这里插入图片描述

通过以上所知,通过配置IWDG_PR和IWDG_RLR两个寄存器,就能管理看门狗的复位时间。比如我们是预分频系数是32,IWDG_RLR寄存器是1000,复位时间大约就是1000ms,在这个时间内不向寄存器IWDG_KR中写入0xAAAA,单片机就会复位。

三.CubeMX配置一个独立看门狗IWDG例程

硬件准备:

STLINK接STM32F407VET6开发板,STLINK接电脑USB口。
在这里插入图片描述

打开STM32CubeMX软件,新建工程
在这里插入图片描述
Part Number处输入STM32F407VE,再双击就创建新的工程
在这里插入图片描述

配置下载口引脚
在这里插入图片描述

配置外部晶振引脚
在这里插入图片描述

可以查看STM32F407VET6开发板原理图,PB4连接LED灯,所以配置PB4为GPIO输出

在这里插入图片描述
配置独立看门狗
在这里插入图片描述

配置系统主频168Mhz,使用外部晶振
在这里插入图片描述

配置工程文件名,保存路径,KEIL5工程输出方式
在这里插入图片描述

生成工程
在这里插入图片描述

用Keil5打开工程
在这里插入图片描述

添加代码
在这里插入图片描述

主要代码

uint32_t Timecouter;//定义时间计数
/* USER CODE END PFP *//* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 *//* USER CODE END 0 *//*** @brief  The application entry point.* @retval int*/
int main(void)
{/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();//8M外部主频,系统主频168M/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();HAL_Delay(5000);//等待5000msMX_IWDG_Init();//配置独立看门狗,1000ms复位周期/* USER CODE BEGIN 2 *//* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_4);//PB4翻转输出HAL_Delay(100);//等待100msif(Timecouter<100)//判断计数是否小于100{if(HAL_IWDG_Refresh(&hiwdg) != HAL_OK)//喂狗{}}Timecouter++;}/* USER CODE END 3 */
}
void MX_IWDG_Init(void)
{hiwdg.Instance = IWDG;hiwdg.Init.Prescaler = IWDG_PRESCALER_32;hiwdg.Init.Reload = 1000;if (HAL_IWDG_Init(&hiwdg) != HAL_OK){Error_Handler();}}

实验效果

在这里插入图片描述

可以看到单片机是在大概运行11000ms时间单片机复位,根据代码,单片机是在运行10000ms之后就不喂狗,根据参数的配置,预分频系数是32,IWDG_RLR寄存器是1000,理论看门狗复位时间大约就是1s,程序从不喂狗开始计时,我们大概计数到1s时间单片机复位,复位时间与理论计算基本吻合。

四.CubeMX工程源代码下载

通过网盘分享的文件:11.IWDG独立看门狗实验.rar
链接: https://pan.baidu.com/s/1VD0PFjYVfdIGa4uSJy9IkQ 提取码: ywdf
如果链接失效,可以联系博主给最新链接
程序下载下来之后解压就行

五.小结

IWDG特别适用于需要高可靠性的应用,‌如工业控制、‌医疗设备等,‌在这些应用中,‌系统的稳定性和可靠性至关重要。‌

相关文章:

STM32F407单片机编程入门(十) IWDG独立看门狗详解及实战含源码

文章目录 一.概要二.独立看门狗介绍1.独立看门狗基本介绍2.独立看门狗功能描述3.独立看门狗复位时间 三.CubeMX配置一个独立看门狗IWDG例程四.CubeMX工程源代码下载五.小结 一.概要 什么是单片机看门狗 看门狗&#xff08;WDT&#xff09;是一个定时器&#xff0c;开启看门狗定…...

solana项目counter,测试过程中执行报错记录分享

跟随HackQuest部署counter项目&#xff0c;使用 Solana 官方提供的 playgroud 。这个平台让我们的部署和测试过程变得更加简便高效。 合约代码 lib.rs中复制以下代码 use anchor_lang::prelude::*; use std::ops::DerefMut;declare_id!("CVQCRMyzWNr8MbNhzjbfPu9YVvr97…...

[Unity Demo]重启项目之从零开始制作空洞骑士Hollow Knight第一集:导入素材以及建立并远程连接git仓库

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、导入素材二、使用步骤 1.建立并远程连接git2.github和仓库连接总结 前言 好久没来CSDN看看&#xff0c;突然看到前两年自己写的文章从零开始制作空洞骑士只…...

单链表(c语言简单实现)

单链表是一种常见的数据结构 一、结构特点 1. 由一系列节点组成&#xff0c;每个节点包含数据域和指向下一个节点的指针域。 2. 最后一个节点的指针域为 null&#xff0c;表示链表的结尾。 二、主要操作 1. 插入节点&#xff1a;可以在链表的头部、尾部或特定位置插入新节点。…...

三菱变频器Modbus-RTU 通讯规格

能够从变频器的 RS-485 端子使用 Modbus-RTU 通讯协议&#xff0c;进行通讯运行和参数设定。 NOTE: 1、使用 Modbus-RTU 通讯协议时&#xff0c;请设定Pr.549 协议选择 “1” 2、从主机按地址0(站号0)进行hodbus-RTU通讯时&#xff0c;为广播通讯&#xff0c;变频器不向主机发…...

PyQt5库学习之QFileDialog.getOpenFileName函数

PyQt5库学习之QFileDialog.getOpenFileName函数 一、简介 QFileDialog.getOpenFileName 是 PyQt5 中的一个函数&#xff0c;它提供了一个标准的文件选择对话框&#xff0c;允许用户选择一个文件。这个函数是 QFileDialog 类的一部分&#xff0c;通常用于打开文件时让用户选择文…...

如何理解变量提升和函数提升

在 JavaScript 中&#xff0c;变量提升和函数提升是指在代码执行之前&#xff0c;变量和函数声明会被提升到其所在作用域的顶部。这意味着你可以在声明之前使用它们&#xff0c;但它们的行为有所不同。 变量提升 变量提升是指变量声明&#xff08;使用 var&#xff09;会被提…...

monorepo基础搭建教程(从0到1 pnpm+monorepo+vue)

monorepo 前言1、搭建空项目并配置pnpm-workspace.yamlpnpm initpnpm-workspace.yaml 2.配置packages测试文件配置相关内容 3.引入packages内容至公共package.json4.创建测试项目&#xff0c;并引入公共包结语 前言 有个项目要引入一个第三方库&#xff0c;但是第三方库下载下…...

使用Docker Compose一键部署

文章目录 使用Docker Compose一键部署一、引言二、环境准备1、安装Docker和Docker Compose1.1、安装Docker1.2、安装Docker Compose 2、验证安装 三、编写Docker Compose文件1、创建目录结构2、编写Dockerfile3、编写docker-compose.yml 四、部署项目1、构建镜像2、启动服务3、…...

【GVINS】

【GVINS】 1. GVINS的系统特点2. GVINS的融合导航存在问题3. GVINS的信号的组成4. GVINS的信号的组成 原理推导知乎 1. GVINS的系统特点 概述了一种名为GVINS的系统&#xff0c;它旨在解决视觉-惯性里程计&#xff08;VIO&#xff09;在长时间运行时出现的漂移问题。GVINS通过…...

Linux 给 vmlinux 添加符号

文章目录 前言一、centos7 给 vmlinux 添加符号二、ubuntu22.04 给 vmlinux 添加符号 前言 使用内核源码下的script文件&#xff1a;scripts/extract-vmlinux 可以从/boot/vmlinuz 提取出来 内核镜像文件vmlinux&#xff1a; # ./extract-vmlinux vmlinuz-3.10.0-693.el7.x86…...

【mac】MacOS无法打开XXX文件,因为无法验证开发者的问题解决

博主介绍&#xff1a; 大家好&#xff0c;我是想成为Super的Yuperman&#xff0c;互联网宇宙厂经验&#xff0c;17年医疗健康行业的码拉松奔跑者&#xff0c;曾担任技术专家、架构师、研发总监负责和主导多个应用架构。 技术范围&#xff1a; 目前专注java体系&#xff0c;以及…...

Docker 无法拉取雷池 WAF 的解决方法

引言&#xff1a; 近日&#xff0c;许多用户反映在使用 Docker 命令拉取雷池 WAF 镜像时遇到了困难&#xff0c;主要表现为连接超时错误。本文将为大家提供解决此问题的有效方法。 问题描述&#xff1a; 当尝试通过 Docker 命令拉取雷池 WAF 镜像时&#xff0c;部分用户遇到…...

进制转换,原码,反码,补码,二进制位运算及应用

进制转换 2B&#xff08;0--1)&#xff0c;8O(0--7)&#xff0c;10D&#xff0c;16H&#xff08;0——9,A——F&#xff09; 8位二进制数&#xff0c;左边高位&#xff0c;右边低位 2&#xff0c;8&#xff0c;16 -> 10进制整数&#xff0c;小数 整数&#xff1a;从后往…...

node.js居家养老服务系统—计算机毕业设计源码35247

目 录 摘要 1 绪论 1.1选题的背景 1.2研究的意义 1.3国内外居家养老信息化管理现状分析 1.4 express框架介绍 1.5node.js功能模块 1.6论文结构与章节安排 2 居家养老服务系统系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1数据增加流程 2.2.2数据修改流程 2.2.…...

OpenHarmony(鸿蒙南向开发)——小型系统芯片移植指南(二)

往期知识点记录&#xff1a; 鸿蒙&#xff08;HarmonyOS&#xff09;应用层开发&#xff08;北向&#xff09;知识点汇总 鸿蒙&#xff08;OpenHarmony&#xff09;南向开发保姆级知识点汇总~ OpenHarmony&#xff08;鸿蒙南向开发&#xff09;——轻量系统芯片移植指南(一) Op…...

Live800:从心出发,以情动人:构建深度客户服务文化

在当今这个竞争激烈的市场环境中&#xff0c;企业之间的较量已不仅仅局限于产品质量的比拼&#xff0c;更在于谁能提供更优质、更贴心的客户服务。在这个背景下&#xff0c;“从心出发&#xff0c;以情动人”成为了构建深度客户服务文化的核心理念&#xff0c;它要求企业不仅要…...

分布式事务一致性:本地消息表设计与实践

概念 本地消息表是一种常见的解决分布式事务问题的方法。其核心思想是将分布式事务拆分成本地事务来处理&#xff0c;通过消息队列来保证各个本地事务的最终一致性。 实现步骤 创建本地消息表&#xff1a;在数据库中创建一个本地消息表&#xff0c;用于存储待发送的消息以及消…...

深入浅出Docker

1. Docker引擎 Docker引擎是用来运行和管理容器的核心软件。通常人们会简单的将其指代为Docker或Docker平台。 基于开放容器计划&#xff08;OCI&#xff09;相关的标准要求&#xff0c;Docker引擎采用了模块化的设计原则&#xff0c;其组件是可替换的。 Docker引擎由如下主…...

Flink 与 Kubernetes (K8s)、YARN 和 Mesos集成对比

Flink 与 Kubernetes (K8s)、YARN 和 Mesos 的紧密集成&#xff0c;是 Flink 能够在不同分布式环境中高效运行的关键特性。 Flink 提供了与这些资源管理系统的深度集成&#xff0c;以便在多种集群管理环境下提交、运行和管理 Flink 作业。Flink 与 K8s、YARN 和 Mesos 集成的详…...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络&#xff0c;将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具&#xff0c;支持 Chrome、Firefox、Safari 等主流浏览器&#xff0c;提供多语言 API&#xff08;Python、JavaScript、Java、.NET&#xff09;。它的特点包括&a…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​&#xff1a; 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​&#xff1a; File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

基于SpringBoot在线拍卖系统的设计和实现

摘 要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统&#xff0c;主要的模块包括管理员&#xff1b;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目&#xff08;非 SpringBoot&#xff09;集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

Python 实现 Web 静态服务器(HTTP 协议)

目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1&#xff09;下载安装包2&#xff09;配置环境变量3&#xff09;安装镜像4&#xff09;node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1&#xff09;使用 http-server2&#xff09;详解 …...

Spring Security 认证流程——补充

一、认证流程概述 Spring Security 的认证流程基于 过滤器链&#xff08;Filter Chain&#xff09;&#xff0c;核心组件包括 UsernamePasswordAuthenticationFilter、AuthenticationManager、UserDetailsService 等。整个流程可分为以下步骤&#xff1a; 用户提交登录请求拦…...

git: early EOF

macOS报错&#xff1a; Initialized empty Git repository in /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/.git/ remote: Enumerating objects: 2691797, done. remote: Counting objects: 100% (1760/1760), done. remote: Compressing objects: 100% (636/636…...