当前位置: 首页 > 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);

相关文章:

  • [docker]--解析 Docker 镜像拉取日志:状态与分层拉取逻辑
  • 【LangChain】3 模型链
  • 阿里1688 普通 231滑块 x82 分析
  • 【Python3教程】Python3基础篇之面向对象
  • 【Docker基础】Docker核心概念:镜像(Image)详解
  • 知名开源项目被收购,用户发现项目被“投毒”
  • 西安java面试总结1
  • Oracle日志体系和遇到问题后日志排查路径
  • 中位数聚合与联邦平均的原理,作用,使用到联邦学习的哪个地方,与联邦学习数据隐私的联系
  • 安卓上架华为应用市场、应用宝、iosAppStore上架流程,保姆级记录(1)
  • 把下载的ippicv.tgz放入<opencv_build_dir>/3rdparty/ippicv/download/中cmake依然无法识别
  • java超大文件上传
  • 微服务架构下大型商城系统的事务一致性攻坚:Saga、TCC与本地消息表的实战解析
  • Java 8 Stream 流详细教程 - 全面指南
  • uni-app离线打包配置Android打包(使用Android studio打包)
  • 联邦学习中常用的聚合方式
  • 初识 Redis:从入门到应用的全面指南
  • React Context 性能问题及解决方案深度解析
  • 物联网基础概述【一】
  • 开疆智能ModbusTCP转Canopen网关连接汇川AM403PLC与编码器配置案例
  • 企业网站手机端跳转设置/湖南正规seo公司
  • 网站一般做几页/站长工具综合查询ip
  • 网站小图片素材/网站建设的技术支持
  • 网站开发规划书/学生个人网页制作
  • 马可波罗网站如何做产品推广/最近新闻头条
  • 山西太原小店区疫情/seo是什么专业的课程