STM32 CubeMx HAL库 独立看门狗IWDG配置使用
看门狗这里我就不多介绍了,能搜到这篇文章说明你了解
总之就是一个单片机重启程序,设定好超时时间,在超时时间内没有喂狗,单片机就会复位
主要应用在单片机异常重启方面,比如程序跑飞(注意程序跑飞时你就没有喂狗,然后就会重启单片机,注意看门狗独立于程序之外,看门狗不会随着程序跑飞)
1,cubeMX配置
1.打开看门狗,配置看门狗相关参数

我设置的超时时间为10s
超时时间=(预分频值*重载值)/时钟频率
10s=(256*1250)/32000
至于为什么是这样计算
IWDG时钟32000经过分频后为32000/256=125 也就是每秒计数125次
重载值reload value1250表示计数1250次内不喂狗就重启
所以超时时间=1250/125=10s
至于那个window value (有些芯片是没有这个值的)大家可以去了解了解WWDG窗口看门狗,也就是只能在窗口期喂狗
窗口期=window value/reload value *超时时间~超时时间
在上面例子 窗口期=600/1250*10~10s
也就是4.8s~10s才能喂狗
不喂狗或者在4.8s之前喂狗都会复位单片机
(我用的是stm32l471rgt6芯片)看门狗时钟频率32kHz

2,打开串口1(可选)
为了调试方便

3.生成代码(基本配置默认你们都会)
勾选生成.c .h文件

我用的是clion开发,所以生成是STM32CubeIDE 用keil的就MDK就行

2.代码编写
就写喂狗函数就好了,初始化cubemx已经写好了
HAL_IWDG_Init(&hiwdg)//初始化
HAL_IWDG_Refresh(&hiwdg);//喂狗
main.c代码
/* USER CODE BEGIN Header */
/********************************************************************************* @file : main.c* @brief : Main program body******************************************************************************* @attention** Copyright (c) 2024 STMicroelectronics.* All rights reserved.** This software is licensed under terms that can be found in the LICENSE file* in the root directory of this software component.* If no LICENSE file comes with this software, it is provided AS-IS.********************************************************************************/
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "can.h"
#include "iwdg.h"
#include "usart.h"
#include "gpio.h"/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes *//* USER CODE END Includes *//* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD *//* USER CODE END PTD *//* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD *//* USER CODE END PD *//* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM *//* USER CODE END PM *//* Private variables ---------------------------------------------------------*//* USER CODE BEGIN PV */
/* USER CODE END PV *//* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
/* USER CODE BEGIN PFP *//* 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();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_CAN1_Init();MX_USART1_UART_Init();MX_USART2_UART_Init();MX_IWDG_Init();/* USER CODE BEGIN 2 */uint8_t rrr[6]="program begin";HAL_UART_Transmit(&huart1, rrr, 13, 1000);uint32_t time =HAL_GetTick();/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 *///每7秒喂狗 10s内不喂狗会重启if(HAL_GetTick()-time>7000){HAL_UART_Transmit(&huart1, "feed dog\r\n", 10, 1000);HAL_IWDG_Refresh(&hiwdg);time=HAL_GetTick();}HAL_UART_Transmit(&huart1, "loop\r\n", 6, 1000);HAL_Delay(1000);}/* USER CODE END 3 */
}/*** @brief System Clock Configuration* @retval None*/
void SystemClock_Config(void)
{RCC_OscInitTypeDef RCC_OscInitStruct = {0};RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};/** Configure the main internal regulator output voltage*/if (HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1) != HAL_OK){Error_Handler();}/** Initializes the RCC Oscillators according to the specified parameters* in the RCC_OscInitTypeDef structure.*/RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI|RCC_OSCILLATORTYPE_HSE;RCC_OscInitStruct.HSEState = RCC_HSE_ON;RCC_OscInitStruct.LSIState = RCC_LSI_ON;RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;RCC_OscInitStruct.PLL.PLLM = 1;RCC_OscInitStruct.PLL.PLLN = 20;RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV7;RCC_OscInitStruct.PLL.PLLQ = RCC_PLLQ_DIV2;RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV2;if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK){Error_Handler();}/** Initializes the CPU, AHB and APB buses clocks*/RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4) != HAL_OK){Error_Handler();}
}/* USER CODE BEGIN 4 */
/* USER CODE END 4 *//*** @brief This function is executed in case of error occurrence.* @retval None*/
void Error_Handler(void)
{/* USER CODE BEGIN Error_Handler_Debug *//* User can add his own implementation to report the HAL error return state */__disable_irq();while (1){}/* USER CODE END Error_Handler_Debug */
}#ifdef USE_FULL_ASSERT
/*** @brief Reports the name of the source file and the source line number* where the assert_param error has occurred.* @param file: pointer to the source file name* @param line: assert_param error line source number* @retval None*/
void assert_failed(uint8_t *file, uint32_t line)
{/* USER CODE BEGIN 6 *//* User can add his own implementation to report the file name and line number,ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) *//* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT */
效果如下

相关文章:
STM32 CubeMx HAL库 独立看门狗IWDG配置使用
看门狗这里我就不多介绍了,能搜到这篇文章说明你了解 总之就是一个单片机重启程序,设定好超时时间,在超时时间内没有喂狗,单片机就会复位 主要应用在单片机异常重启方面,比如程序跑飞(注意程序跑飞时你就…...
网络安全渗透测试概论
渗透测试,也称为渗透攻击测试是一种通过模拟恶意攻击者的手段来评估计算机系统、网络或应用程序安全性的方法。 目的 旨在主动发现系统中可能存在的安全漏洞、脆弱点以及潜在风险,以便在被真正的恶意攻击者利用之前,及时进行修复和加固&…...
【大数据技术基础】【记录Ubuntu 16.04升级到18.04】Ubuntu的一个版本升级到另一个版本
在 Ubuntu 操作系统中进行软件更新和系统升级 Ubuntu Kylin 16.04 LTS 系统进行系统升级到 Ubuntu 18.04.6 LTS 版本 升级提示:系统弹出提示框,告知用户有新版本的 Ubuntu 可用,询问用户是否想要升级。 认证窗口:显示了一个认证…...
知识库系统,集成neo4j,集成activiti工作流,集成es全文检索,知识图谱血缘关系,nlp知识库
一、项目介绍 一款全源码,可二开,可基于云部署、私有部署的企业级知识库云平台,一款让企业知识变为实打实的数字财富的系统,应用在需要进行文档整理、分类、归集、检索、分析的场景。 为什么建立知识库平台? 助力企业…...
批量合并多个Excel到一个文件
工作中,我们经常需要将多个Excel的数据进行合并,很多插件都可以做这个功能。但是今天我们将介绍一个完全免费的独立软件【非插件】,来更加方便的实现这个功能。 准备Excel 这里我们准备了两张待合并的Excel文件 的卢易表 打开的卢易表软件…...
CNCF云原生生态版图-项目和产品综合分析
CNCF云原生生态版图-项目和产品综合分析 CNCF云原生生态版图-项目和产品综合分析整体统计分析中国研发人员贡献项目和产品其中,纳入 CNCF 管理的开源项目 链接 CNCF云原生生态版图-项目和产品综合分析 整体统计分析 在对云原生技术选型时,优先选择经过 …...
MySQL生产环境备份脚本
全量备份脚本,其中BakDir,ZlbakDir,LogFile需要自己创建 #!/bin/bash export LANGen_US.UTF-8# 指定备份目录 BakDir/root/beifen/data/mysqlbak/data/allbak # 指定增量备份目录 ZlbakDir/root/beifen/data/mysqlbak/data/zlbak # 备份日志…...
leetcode 3224. 使差值相等的最少数组改动次数
题目链接:3224. 使差值相等的最少数组改动次数 题目: 给你一个长度为 n 的整数数组 nums ,n 是偶数 ,同时给你一个整数 k 。 你可以对数组进行一些操作。每次操作中,你可以将数组中任一元素替换为 0 到 k 之间的任一…...
多线程动态库里面调用静态库分配内存函数导致的崩溃cltp汇编指令导致
1、概述 有这样的一个场景,我有一个动态库myso.so里面有函数start_crash(),用到静态库的内存分配函数,其实静态库里面的static.a 里面就封装了一个函数叫system_malloc(),函数返回的是分配的内存地址,然后发现,我在测试demo里面创…...
力扣刷题TOP101: 31.BM38 在二叉树中找到两个节点的最近公共祖先
目录: 目的 思路 复杂度 记忆秘诀 python代码 目的: 给定一棵二叉树(保证非空)以及这棵树上的两个节点对应的val值 o1 和 o2,请找o1 和 o2 的最近公共祖先节点。 思路 这个任务目和上一题在二叉搜索树中找到两个节点的最近公共祖先有点类…...
前端项目打包部署
打包和部署前端项目是将开发环境中的代码转化为生产环境可直接运行的静态文件,并将其部署到服务器上的过程。 # 项目打包 pnpm run build# 上传文件至远程服务器 将本地打包生成的 dist 目录下的所有文件拷贝至服务器的 /usr/share/nginx/html 目录。# nginx.cofig…...
《CSS 知识点》大屏卡片布局思路:弹性布局 flex-grow
思路 大屏左右两侧高宽一致,内部卡片可按比例设置! 使用弹性布局和属性 flex-grow 设置比例;间隔使用 margin-bottom 设置,最后一个卡片不设置; 效果如图 代码说明 CSS代码 26 - 30,左右两侧设置弹性布…...
nVisual 登录页页面配置说明
一、概述 nVisual登录页面可根据具体客户需要通过public\config\access.js文件进行自定义配置。页面可以大致分为4个部分,头部、底部、可移动区域以及页面中间的信息填写区域。其中头部和底部又包含头部左侧、头部中间、头部右侧、底部左侧、底部中间、底部右侧六个…...
后端接受前端传递数组进行批量删除
问题描述:当我们需要做批量删除功能的时候,我们循环单次删除的接口也能进行批量删除,但要删除100条数据就要调用100次接口,或者执行100次sql,这样系统开销是比较大的,那么我们直接采用接收的数组格式数据sq…...
拍频实例 - 一组恒力矩电流采样数据
这是一组功率电机的感应电流波形。加载了重载恒力矩设备。你能看到什么? 首先,时间轴的坐标是对的,9.9~10.0秒,单位是秒,100ms有5个波形,所以是20ms一个波形。这是50Hz的信号。频差就体现为幅度的周期起伏…...
Jvm之NativeMemoryTracking 使用
开启 Native Memory Tracking 通过 -XX:NativeMemoryTracking 开启: -XX:NativeMemoryTrackingoff:这是默认值,即关闭 Native Memory Tracking -XX:NativeMemoryTrackingsummary: 开启 Native Memory Tracking,但是仅仅按照各个 JVM 子系统…...
PKCS#7、Bit padding(位填充)、Byte padding(字节填充)、Zero padding(零填充)
PKCS#7、Bit padding(位填充)、Byte padding(字节填充)、Zero padding(零填充)是密码学常见的填充方式。 Bit padding(位填充): 位填充可以应用于任意长度的消息。在消息…...
R语言学习笔记-1
1. 基础操作和函数 清空环境:rm(list ls()) 用于清空当前的R环境。 打印输出:print("Hello, world") 用于输出文本到控制台。 查看已安装包和加载包: search():查看当前加载的包。install.packages("package_na…...
我在广州学 Mysql 系列之 数据“表”的基本操作
ℹ️大家好,我是😆练小杰,今天主要讲得是Mysql数据表的基本操作内容~~ 昨天讲了“Mysql 数据“库“的基本操作”~~ 想要了解更多🈶️MYSQL 数据库的命令行总结!!! “真相永远只有一个”——工藤…...
auto-gptq安装以及不适配软硬件环境可能出现的问题及解决方式
目录 1、auto-gptq是什么?2、auto-gptq安装3、auto-gptq不正确安装可能会出现的问题(1)爆出:CUDA extension not installed.(2)没有报错但是推理速度超级慢 1、auto-gptq是什么? Auto-GPTQ 是一…...
投资于人如何落地?红海云数字化重构国有企业人才价值链
2025年底,中央经济工作会议以“五个必须”概括了新形势下经济工作的规律性认识。其中,“必须坚持投资于物和投资于人紧密结合”这一论断,首次将“投资于人”提升到与“投资于物”同等重要的战略高度。这不仅是对传统增长模式的深刻反思&#…...
Linux网络驱动实验
直接参考【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.81 本文仅作为个人笔记使用,方便进一步记录自己的实践总结。 网络驱动是 linux 里面驱动三巨头之一,linux 下的网络功能非常强大,嵌入式 linux 中也常常用到网络功能。前面我们已经讲过…...
如何用Synonyms实现智能问答系统:面向初学者的完整指南
如何用Synonyms实现智能问答系统:面向初学者的完整指南 【免费下载链接】Synonyms :herb: 中文近义词:聊天机器人,智能问答工具包 项目地址: https://gitcode.com/gh_mirrors/sy/Synonyms Synonyms是一个强大的中文近义词工具包&#…...
04月07日AI每日参考:Anthropic签下史上最大算力协议,国内AI每日Token用量突破140万亿
今日概览今天AI圈有两条主线值得重点关注。海外方面,Anthropic与Google、Broadcom签署了迄今最大规模的算力协议,年化收入同步披露超300亿美元,算力军备竞赛进入新阶段。国内方面,中国国家安全部发出AI Token安全预警,…...
链表(两数相加)(1)
一.题目 2. 两数相加 - 力扣(LeetCode) 二.思路讲解 2.1 审题 题目给出两个非空链表,每个链表表示一个非负整数,并且数字是逆序存储的,即链表的头节点对应数字的最低位。例如,链表 2->4->3 表示数字…...
CSS如何通过Sass循环生成辅助类_批量创建颜色或间距样式
用each遍历颜色映射生成辅助类最高效,需确保颜色值为真实类型而非字符串;for生成间距应从1开始并保证$i为数值;动态算色时避免对rgba()直接调用lighten/darken,推荐mix或分离alpha处理。怎么用 each 生成颜色辅助类直接遍历颜色映…...
嵌入式裸机开发中的轻量级上下文切换方案
1. 嵌入式编程中的上下文切换挑战在裸机嵌入式开发中,中断服务程序(ISR)的设计一直是个棘手的问题。传统教科书告诉我们:中断处理必须快进快出,绝对不能执行耗时操作。但在实际项目中,我们经常遇到这样的困境——某个传感器触发中…...
开关电源噪声处理与PCB布局优化实战
1. 开关电源噪声的产生机制与危害作为一名在汽车电子领域摸爬滚打多年的硬件工程师,我深知EMC问题对车载电子产品的致命影响。最近因为全球芯片短缺,我们不得不对大量元器件进行替代选型,从MCU到电源管理芯片,每个替代方案都要经过…...
嵌入式开发中的串口打印调试与printf重定向
1. 为什么需要串口打印调试?在嵌入式开发中,调试手段的选择往往决定了问题排查的效率。使用仿真器(如J-Link、ST-Link)进行单步调试确实是最直观的方式,但在实际项目中经常会遇到以下限制:硬件限制…...
手把手教你用Burp Suite搞定PortSwigger Labs的CSRF靶场(附12个Lab实战POC)
Burp Suite实战指南:12种CSRF漏洞攻防演练 在Web安全领域,CSRF(跨站请求伪造)始终是排名前五的高危漏洞类型。PortSwigger Labs作为全球知名的Web安全实战平台,其CSRF靶场设计了12个由浅入深的实验场景。本文将带你使用…...
