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

STM32单片机独立看门狗IWDG使用CubeMX配置方法

一、IWDG 的概述

在嵌入式系统设计中,看门狗是一个可靠性保障机制,它能够在系统因软件故障等原因陷入异常状态时,自动触发复位操作,使系统恢复到正常工作状态。STM32的IWDG 是一个独立的看门狗,它的时钟源是 STM32 内部的低速 RC 振荡器(LSI),频率通常为 40 kHz 左右;

IWDG 的主要特点有:

  1. 独立时钟源 :由于使用独立的时钟源,即使主时钟出现故障,IWDG 依然能够正常工作,有效地提高了系统的可靠性;
  2. 超时时间可配置 :通过设置预分频器和重装载值,可以灵活地调整看门狗的超时时间,以满足不同应用场景的需求;
  3. 硬件复位 :当 IWDG 计数器减至 0 时,会触发硬件复位,确保系统能够重新启动并恢复到初始状态;
    本文以STM32F103C8T6为例,使用STM32CubeMX进行配置,自动生成代码,介绍IWDG的配置及使用方法;

二、STM32CubeMX配置方法

1.超时时间计算

手册中关于IWDG的寄存器设置及超时时间的主要介绍如下图中的表格所示:
在这里插入图片描述在这里插入图片描述例如IWDG时钟源频率为40kHz、分频系数为64时,每计数一次的时间为64/(40k)s,假设我们需要超时时间为1s,则需要计数625次,即
64 × 625 40000 s = 1 s \frac{\text{64} \times\text{625}}{{\text{40000}}}s= 1s 4000064×625s=1s
可用以下公式计算:
T timeout = 预分频系数 × ( 重装载值 + 1 ) f LSI T_{\text{timeout}} = \frac{\text{预分频系数} \times (\text{重装载值} + 1)}{f_{\text{LSI}}} Ttimeout=fLSI预分频系数×(重装载值+1)

2. STM32CubeMX配置

在STM32CubeMX的Clock Configuration中,查看IWDG的时钟源和频率,STM32F103C8T6的IWDG模块的时钟频率是40KHz,如下图:
在这里插入图片描述
在System Core -> IWDG中,使能IWDG即选中Activated,在下方Parameter Settings中填入预分频值和重载值,此处以超时时间为1s为例,按照上一节的计算,填入相应的值,如下图所示:
在这里插入图片描述配置完成后,生成代码;

三、主要代码

STM32CubeMx生成的代码中,IWDG初始化的函数为

MX_IWDG_Init();

该函数位于iwdg.c文件中,函数的全部内容:

/* IWDG init function */
void MX_IWDG_Init(void)
{/* USER CODE BEGIN IWDG_Init 0 *//* USER CODE END IWDG_Init 0 *//* USER CODE BEGIN IWDG_Init 1 *//* USER CODE END IWDG_Init 1 */hiwdg.Instance = IWDG;hiwdg.Init.Prescaler = IWDG_PRESCALER_64;hiwdg.Init.Reload = 625 - 1;if (HAL_IWDG_Init(&hiwdg) != HAL_OK){Error_Handler();}/* USER CODE BEGIN IWDG_Init 2 *//* USER CODE END IWDG_Init 2 */}

可看出,分频系数和重载值,与我们设置的一致;STM32CubeMX自动生成的代码,在main()函数中会自动调用该函数,我们需要在while(1)循环或者其他地方,在超时时间之内,调用喂狗函数,使IWDG重置,该函数为

HAL_StatusTypeDef HAL_IWDG_Refresh(IWDG_HandleTypeDef *hiwdg)
{/* Reload IWDG counter with value defined in the reload register */__HAL_IWDG_RELOAD_COUNTER(hiwdg);/* Return function status */return HAL_OK;
}

它在stm32f1xx_hal_iwdg.c文件中,调用喂狗函数需要包含相应的头文件,调用形式为

HAL_IWDG_Refresh(&hiwdg);
http://www.xdnf.cn/news/982747.html

相关文章:

  • 认识RNN-循环神经网络
  • Java中读取YAML文件配置信息
  • vxetable框架在前端开发大数据量界面展示是很友好的
  • 室内腔体耦合器
  • 馈线与馈线连接器详解
  • 几个常见远程工作平台
  • vue项目 报错 error ‘xxx‘ is assigned a value but never used
  • Context7 Mcp Quickstart
  • 《Qt安卓编程:开启跨平台移动开发新时代》
  • arm服务器运行Jmeter报错问题UseG1GC
  • 微服务架构中的 Kafka:异步通信与服务解耦(二)
  • 探索偏微分方程数值解法的领域-AI云计算
  • 复习日!!
  • 2025年Typescript最新高频面试题及核心解析
  • AI应用开发---全套技术+落地方向
  • 论文笔记 - 《Implementing block-sparse matrix multiplication kernels using Triton》
  • C++ 通过AES-NI指令集高级硬件加速实现AES-128-CFB算法。
  • c++ std::invoke
  • influxdb3常用查询命令
  • 小型综合实验拓扑图(eNSP)
  • [学习] Costas环详解:从原理到实战
  • MCGS和1200plc变量表格式编辑
  • [docker]--解析 Docker 镜像拉取日志:状态与分层拉取逻辑
  • Cohen–Grossberg神经网络
  • python 实现决策树规则
  • 变压吸附制氮设备的工艺特点
  • OAuth 2.0中/oauth/authorize接口的核心作用解析
  • 【数据分析】RNA-seq 数据分析:差异表达、火山图与功能富集分析
  • 「日立涡旋压缩机」携手企企通,打造AI数智供应链协同新范式
  • 嵌入式开发学习日志(数据库II 网页制作)Day38