单片机STM32看门狗详解(嵌入式学习)

article/2025/10/23 6:38:17

单片机STM32看门狗

  • 什么是看门狗
  • 为什么需要看门狗?
  • STM32CubeMX配置和应用
  • 示例
    • 独立看门狗(IWDG)
    • 窗口看门狗(WWDG)
  • 注意事项

什么是看门狗

单片机STM32的看门狗(Watchdog)是一种硬件定时器,用于监控系统的运行状态并在出现故障或死锁时采取措施以恢复正常操作。看门狗的主要功能是定期检查系统是否正常运行,并在系统出现问题时触发复位操作。

STM32系列单片机通常配备了内置的看门狗定时器(通常称为独立看门狗,IWDG)和窗口看门狗定时器(WWDG),以提供更可靠的系统保护。
在这里插入图片描述

独立看门狗(IWDG)是STM32中常用的看门狗,它是一个独立的硬件模块,可以在系统内部独立运行。通过配置IWDG定时器的计数器和预分频器,可以设置看门狗的定时时间。当看门狗定时器计数器达到预设的值时,会产生看门狗超时事件,触发系统复位。

窗口看门狗(WWDG)是另一种类型的看门狗,它允许在特定的时间窗口内更新计数器值,以避免触发复位。WWDG可以通过设定窗口和计数器的值来进行配置,并在每次更新计数器时,确保计数器值位于设定的窗口范围内。如果计数器超出窗口范围,将触发看门狗复位。

通过使用STM32的看门狗功能,可以监测系统运行的正常性,防止系统出现死锁或意外故障导致的无响应状态。看门狗可以在系统软件编程错误、电源干扰或其他异常情况下,提供一个安全机制来恢复系统的正常运行。

为什么需要看门狗?

看门狗在嵌入式系统中起着重要的作用,以下是一些需要看门狗的原因:

  1. 防止系统死锁:在某些情况下,嵌入式系统可能会陷入无限循环或死锁状态,导致系统停止响应。看门狗能够监测系统的运行状态,如果系统在预定的时间内没有及时更新看门狗定时器,就会触发复位操作,使系统重新启动并恢复正常运行。

  2. 处理软件故障:在开发嵌入式软件时,可能会出现编程错误、内存溢出、任务优先级错误等问题,导致系统运行不正常。看门狗可以监测系统是否持续运行,并在软件故障时进行复位,以恢复系统到初始状态。

  3. 应对外部干扰:嵌入式系统可能受到外部干扰,如电源波动、电磁干扰等。这些干扰可能导致系统崩溃或运行不正常。看门狗可以检测这些异常情况,并在系统无响应时采取措施,以确保系统的稳定性和可靠性。

  4. 提高系统可靠性:通过引入看门狗,系统可以在出现故障时自动恢复,减少系统停机时间。这对于需要连续运行和高可靠性的应用非常重要,如工业控制、汽车电子、医疗设备等领域。

总之,看门狗提供了一种监测和保护机制,确保嵌入式系统的可靠性和稳定性。它可以防止系统死锁、处理软件故障、抵御外部干扰,并提高系统的可用性和可靠性。

STM32CubeMX配置和应用

在这里插入图片描述
在这里插入图片描述

在使用STM32CubeMX配置和应用看门狗时,您可以按照以下步骤进行操作:

  1. 打开STM32CubeMX软件,并创建或打开您的工程。

  2. 在"Pinout & Configuration"选项卡中,选择您的目标STM32微控制器型号。

  3. 在"Peripherals"面板中,找到并展开"System Core"选项。

  4. 选择"Independent Watchdog"(独立看门狗)或"Window Watchdog"(窗口看门狗),具体根据您的需求选择相应的看门狗类型。

  5. 配置看门狗的参数,包括计数器值、预分频器、窗口值等,根据您的应用需求进行设置。您可以在"Configuration"面板中进行配置。

  6. 在配置完成后,单击"Project"菜单,选择"Settings",然后在"Code Generator"选项中启用看门狗的代码生成。

  7. 单击"Project"菜单,选择"Generate Code",生成代码并导出到您的工程目录。

  8. 在您的代码中,可以使用相关的看门狗函数来初始化和操作看门狗。

例如,如果使用独立看门狗(IWDG),则可以使用以下函数进行初始化和操作:

  • HAL_IWDG_Init():初始化独立看门狗,设置计数器和预分频器等参数。
  • HAL_IWDG_Start():启动独立看门狗计数器。
  • HAL_IWDG_Refresh():刷新独立看门狗计数器,防止看门狗超时复位系统。
  • HAL_IWDG_GetState():获取独立看门狗的状态,判断是否发生看门狗超时。

对于窗口看门狗(WWDG),可以使用类似的函数来进行配置和操作。

请注意,以上步骤仅涵盖了基本的配置和应用看门狗的过程。具体的步骤和函数名称可能会根据您所使用的STM32系列和CubeMX版本而有所不同。建议参考官方文档和相应的参考手册以获取更详细的信息和指导。

示例

独立看门狗(IWDG)

以下是使用STM32F103C8T6单片机编写独立看门狗(IWDG)的代码示例:

#include "stm32f1xx_hal.h"IWDG_HandleTypeDef hiwdg;void SystemClock_Config(void);int main(void)
{HAL_Init();SystemClock_Config();hiwdg.Instance = IWDG;hiwdg.Init.Prescaler = IWDG_PRESCALER_4;  // 设置预分频器,产生IWDG时钟频率hiwdg.Init.Reload = 4095;  // 设置计数器重装载值,用于设定看门狗超时时间if (HAL_IWDG_Init(&hiwdg) != HAL_OK){Error_Handler();}while (1){HAL_IWDG_Refresh(&hiwdg);  // 刷新看门狗计数器,防止看门狗超时复位系统// 执行其他任务和代码}
}void SystemClock_Config(void)
{RCC_OscInitTypeDef RCC_OscInitStruct;RCC_ClkInitTypeDef RCC_ClkInitStruct;__HAL_RCC_PWR_CLK_ENABLE();__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;RCC_OscInitStruct.HSIState = RCC_HSI_ON;RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK){Error_Handler();}RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;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_0) != HAL_OK){Error_Handler();}HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq() / 1000);HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
}

以上代码示例中,主要步骤如下:

  1. 初始化HAL库和系统时钟。

  2. 定义IWDG_HandleTypeDef类型的变量hiwdg,用于配置和操作独立看门狗。

  3. main()函数中,使用HAL_IWDG_Init()函数初始化独立看门狗,设置预分频器和计数器重装载值。

  4. 在主循环中,使用HAL_IWDG_Refresh()函数刷新看门狗计数器,防止看门狗超时复位系统。您可以在此处添加其他任务和代码。

请注意,此代码示例中的时钟配置是基于HSI(内部高速时钟)和PLL(锁相环)的基本配置。

窗口看门狗(WWDG)

以下是使用STM32F103C8T6单片机编写窗口看门狗(WWDG)的代码示例:

#include "stm32f1xx_hal.h"WWDG_HandleTypeDef hwwdg;void SystemClock_Config(void);int main(void)
{HAL_Init();SystemClock_Config();hwwdg.Instance = WWDG;hwwdg.Init.Prescaler = WWDG_PRESCALER_8;  // 设置预分频器,产生WWDG时钟频率hwwdg.Init.Window = 127;  // 设置窗口值hwwdg.Init.Counter = 127;  // 设置计数器重装载值if (HAL_WWDG_Init(&hwwdg) != HAL_OK){Error_Handler();}while (1){HAL_WWDG_Refresh(&hwwdg, 127);  // 刷新看门狗计数器,并设置窗口值// 执行其他任务和代码}
}void SystemClock_Config(void)
{RCC_OscInitTypeDef RCC_OscInitStruct;RCC_ClkInitTypeDef RCC_ClkInitStruct;__HAL_RCC_PWR_CLK_ENABLE();__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;RCC_OscInitStruct.HSIState = RCC_HSI_ON;RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK){Error_Handler();}RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;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_0) != HAL_OK){Error_Handler();}HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq() / 1000);HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
}

以上代码示例中,主要步骤如下:

  1. 初始化HAL库和系统时钟。

  2. 定义WWDG_HandleTypeDef类型的变量hwwdg,用于配置和操作窗口看门狗。

  3. main()函数中,使用HAL_WWDG_Init()函数初始化窗口看门狗,设置预分频器、窗口值和计数器重装载值。

  4. 在主循环中,使用HAL_WWDG_Refresh()函数刷新看门狗计数器,并设置窗口值。您可以在此处添加其他任务和代码。

注意事项

在使用看门狗时,有几个方面需要特别注意:

  1. 看门狗定时器的配置:确保正确配置看门狗的计数器值、预分频器等参数,以满足您的应用需求和系统稳定性要求。过小的计数器值可能导致系统频繁复位,而过大的计数器值则可能导致看门狗无法及时复位系统。

  2. 定时刷新看门狗:在主循环或关键任务中,确保及时刷新看门狗,以防止看门狗超时复位系统。刷新看门狗的操作应该在预定的时间范围内完成,否则看门狗将认为系统出现故障。

  3. 看门狗的启动和停止:确保在适当的时机启动和停止看门狗。通常,在系统初始化完成后启动看门狗,并在系统关闭或出现异常情况时停止看门狗。

  4. 系统稳定性和测试:使用看门狗之前,确保系统的稳定性和可靠性。进行全面的系统测试,包括正常操作、异常情况、边界条件等,以确保看门狗能够按预期工作并保护系统免受故障影响。

  5. 注意看门狗的限制:了解您使用的具体看门狗的限制和特性。不同的单片机和看门狗模块可能具有不同的特性和限制,如最大计数器值、精度、复位时间等。确保在使用中符合相关规范和要求。

  6. 处理看门狗超时:当看门狗超时发生时,系统将被复位。如果出现看门狗超时复位,请仔细检查系统代码和硬件设计,查找潜在的问题,例如任务优先级、死循环、资源竞争等。

总之,使用看门狗需要确保正确配置和及时刷新,同时进行系统稳定性测试和故障排查,以保证系统的可靠性和稳定性。


http://chatgpt.dhexx.cn/article/pfWkkCli.shtml

相关文章

STM32配置看门狗

一、看门狗时间计算公式 时间计算(大概):Tout((4*2^prer)*rlr)/40 (ms). prer:分频数:0~7 rlr:重装载寄存器值 举例(4 * 2^4 * 625) /401000ms1s 二、如何实际使用? 放狗和喂狗总是一起使用的,程序在溢出时间内喂狗才算合理 在…

stm32看门狗定时器记录

文章目录 1、看门狗介绍2、独立看门狗3、窗口看门狗 1、看门狗介绍 STM32 有两个看门狗,一个是独立看门狗另外一个是窗口看门狗。 独立看门狗简单来说就是一个 12 位的递减计数器,当计数器的值从某个值一直减到 0 的时候,系统就会产生一个复位…

STM32看门狗(独立看门狗与窗口看门狗)

简介 STM32 有两个看门狗,一个是独立看门狗(IWDG)另外一个是窗口看门狗(WWDG),独立看门狗号称宠物狗,窗口看门狗号称警犬。 独立看门狗用通俗一点的话来解释就是一个 12 位的递减计数器&#…

STM32看门狗简述

概述 看门狗一般分为硬件看门狗和软件看门狗,主要用来解决程序CPU异常,程序跑飞挂死等问题,提高系统的可靠性。 硬件看门狗是利用一个定时器电路,其定时输出连接到电路的复位端,程序在一定时间范围内对定时器清零(俗…

STM32看门狗作用

STM32F103 独立看门狗 学习笔记 引言 STM32是一系列基于ARM Cortex-M处理器的微控制器。看门狗(Watchdog)是STM32的一个重要功能模块,它能够帮助程序员实现系统的可靠性和稳定性。 看门狗的作用 在嵌入式系统中,软件有时会因为…

STM32看门狗详解

看门狗的作用:防止单片机因未知原因死机或比我们预期的时间过长长时间不能响应,如果出现这种问题,看门狗就会把单片机复位 独立看门狗(IWDG): 时钟来源:内部低速时钟(LSI&#xff0…

STM32看门狗

STM32处理器内置了2个看门狗: 独立看门狗 IWDG (Independent Watchdog) 窗口看门狗 WWDG (Window Watchdog) 独立看门狗由LSI低速时钟提供 40kHz ,主时钟出故障也不影响,常用IWDG复位电路。 窗口看门狗由APB1分频后提供,主时…

【STM32】看门狗模块

🐱作者:一只大喵咪1201 🐱专栏:《STM32学习》 🔥格言:你只管努力,剩下的交给时间! 📃看门狗概述 什么是看门狗: 在由单片机构成的微型计算机系统中&#x…

【STM32】stm32独立看门狗(IWDG)

stm32独立看门狗(IWDG) 0x01 IWDG简介0x02 IWDG主要性能0x03 IWDG寄存器配置 0x01 IWDG简介 STM32F10xxx内置两个看门狗,(独立看门狗和窗口看门狗)可用来检测和解决由软件错误引起的故障;当计数器达到给定的超时值时,…

STM32 看门狗详解

目录 1、IWDG 1.1 独立看门狗简介 1.2 独立看门狗的特点 1.3 独立看门狗功能描述 1.4 硬件看门狗 1.5 寄存器访问保护 1.6 调试模式 2、WWDG 2.1 简介 2.2 窗口看门狗主要特点 2.3 窗口看门狗功能说明 2.4 如何设置看门狗超时 2.5 调试模式 3、区别 1、IWDG 1.1…

手把手教你开发stm32——看门狗(基于hal库)

目录: 1.独立看门狗介绍1.1.独立看门狗简介1.2.独立看门狗功能描述1.3.独立看门狗工作框图 2.独立看门狗实验2.1.cubemx配置2.2.具体代码实现 3.独立看门狗的相关寄存器3.1.键寄存器(IWDG_KR)3.2.预分频寄存器3.3.重装载寄存器(IW…

STM32—看门狗详解入门(独立看门狗、窗口看门狗)

目录 一、什么是看门狗? 二、独立看门狗IWDG 1.特点、本质及原理 2.配置 3.main.c代码 三、窗口看门狗WWDG 1.特点、本质及原理 2.配置 3.main.c代码 四、独立看门狗与窗口看门狗的比较 一、什么是看门狗? 看门狗主要是用来监测单片机运行状态…

STM32(七)------- 独立看门狗(IWDG)

独立看门狗 介绍STM32独立看门狗简介原理功能描述IWDG关键寄存器描述键寄存器(IWDG_KR)状态寄存器(IWDG_SR)预分频寄存器(IWDG_PR)重装载寄存器(IWDG_RLR)IWDG寄存器映像和复位值 使用启动 STM32 的独立看门狗应用设计功能设计程序设计 后续 介绍 STM32独立看门狗简介 STM32 …

STM32—窗口看门狗(WWDG)

STM32—窗口看门狗(WWDG) 窗口看门狗(WWDG) STM32—窗口看门狗(WWDG)窗口看门狗(WWDG)WWDG 简介WWDG 功能框图剖析窗口看门狗时钟计数器时钟计数器窗口值计算看门狗超时时间 怎么用 WWDG独立看门狗所用到的库函数窗口看门狗操作步…

初学STM32之看门狗

初学STM32之看门狗 一、看门狗概述 1.什么是看门狗 单片机在工作中常常会受到来自外界电磁场的干扰,造成程序跑飞,而陷入死循环,程序的正常运行被打断,使得系统无法正常工作,造成整个系统陷入停滞状态。所以为了对单…

matlab 工具箱 GATBX 的安装,安装Sheffield Matlab遗传算法工具箱的建议

在通常的遗传算法学习中,可以直接对目标函数进行编写,但是当我们需要使用simulink进行仿真优化需要用到遗传算法时,我这里有两种建议:①在模型中添加sfunction然后使用自己喜欢的语言进行编写;②使用Matlab遗传算法工具…

MATLAB遗传算法工具箱的函数及实例

遗传算法(GA)是一种进化算法,是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。 遗传算法把问题参数编码为染色体,利用层层迭代的方式进行选择、…

基于Matlab遗传算法工具箱解决物流中心选址

目录 1.问题 2.建模 3.Matlab编程、求解 1.问题 物流配送中6个客户的位置坐标和配数数量如表1所示,如何设置物流配数中心使得配送量最小。 2.建模 3.Matlab编程、求解 编写目标函数min 遗传算法只能求最小值 function y fun(x)site[52 42 93 62 90 70;…

谢菲尔德遗传算法工具箱函数简介

一 谢菲尔德遗传算法工具箱的主要函数如下表所示: 二 函数介绍—创建种群 1. crtbase 1.1 功能 创建一个所有染色体中最基本的染色体**对应的向量*语法: 1.2 语法 BaseVec crtbase(Lind,Base) 1.3 输入参数 1 L…

matlab遗传工具箱ga,用遗传算法工具箱(GA)识别Bouc-Wen模型微分方程参数

本帖最后由 hgrhgr520 于 2016-3-20 14:30 编辑 Bouc-Wen模型因数字处理方便简单而得到较为广泛的应用,力可以表示为: QQ截图20160320125352.jpg (3.2 KB, 下载次数: 21) 2016-3-20 12:49 上传 利用遗传算法工具箱(GA)对Bouc-Wen模型进行参数识别。 实验数据来源于对磁流变阻…