登录/注册

HAL库看门狗配置

更多

HAL库看门狗配置指南(基于STM32)

在STM32开发中,使用HAL库配置看门狗(Watchdog)是提高系统可靠性的重要手段。下面我将详细介绍两种看门狗的配置方法:独立看门狗(IWDG)和窗口看门狗(WWDG)。

1. 独立看门狗(IWDG)配置

独立看门狗基于专用低速时钟(LSI),即使主时钟失效也能工作。

#include "stm32f4xx_hal.h"

IWDG_HandleTypeDef hiwdg;

void MX_IWDG_Init(void)
{
    hiwdg.Instance = IWDG;                     // 使用IWDG外设
    hiwdg.Init.Prescaler = IWDG_PRESCALER_64;  // 预分频系数
    hiwdg.Init.Reload = 0xFFF;                // 重装载值 (最大0xFFF)

    // 初始化IWDG
    if (HAL_IWDG_Init(&hiwdg) != HAL_OK)
    {
        // 处理初始化错误
        Error_Handler();
    }
}

// 在主循环中定期调用喂狗
void feed_IWDG(void)
{
    HAL_IWDG_Refresh(&hiwdg);  // 喂狗操作
}

超时时间计算:

/*
 * LSI频率 ≈ 32 kHz
 * 超时时间(秒) = (Reload + 1) * Prescaler / LSI频率
 * 示例:
 *   分频 = IWDG_PRESCALER_64 => Prescaler=64
 *   Reload = 0xFFF = 4095
 *   超时时间 ≈ (4095 + 1) * 64 / 32000 = 8.192秒
 */

2. 窗口看门狗(WWDG)配置

窗口看门狗需要在指定时间窗口内喂狗。

#include "stm32f4xx_hal.h"

WWDG_HandleTypeDef hwwdg;

void MX_WWDG_Init(void)
{
    hwwdg.Instance = WWDG;                      // 使用WWDG外设
    hwwdg.Init.Prescaler = WWDG_PRESCALER_8;    // 预分频系数
    hwwdg.Init.Window = 0x5F;                   // 窗口值 (0x40-0x7F)
    hwwdg.Init.Counter = 0x7F;                  // 计数器初始值 (0x40-0x7F)
    hwwdg.Init.EWIMode = WWDG_EWI_ENABLE;       // 启用提前唤醒中断

    // 初始化WWDG
    if (HAL_WWDG_Init(&hwwdg) != HAL_OK)
    {
        // 处理初始化错误
        Error_Handler();
    }

    // 设置NVIC中断优先级
    HAL_NVIC_SetPriority(WWDG_IRQn, 0, 0);
    HAL_NVIC_EnableIRQ(WWDG_IRQn);
}

// WWDG中断处理函数
void WWDG_IRQHandler(void)
{
    HAL_WWDG_IRQHandler(&hwwdg);
}

// 提前唤醒回调函数(在此处喂狗)
void HAL_WWDG_EarlyWakeupCallback(WWDG_HandleTypeDef *hwwdg)
{
    HAL_WWDG_Refresh(hwwdg);  // 喂狗操作
}

超时时间计算:

/*
 * PCLK1频率假设为45 MHz
 * WWDG时钟 = PCLK1 / 4096
 * WWDG计数器周期 = 1 / (WWDG时钟 / 预分频)
 * 超时时间(秒) = (Counter - 0x40) * WWDG计数器周期
 * 示例:
 *   Prescaler = WWDG_PRESCALER_8 => 8分频
 *   Counter = 0x7F = 127
 *   WWDG时钟周期 = 1 / (45e6 / 4096 / 8) ≈ 0.728 ms
 *   超时时间 ≈ (127 - 0x40=64) * 0.728ms ≈ 45.8 ms
 */

3. 使用说明

  1. 初始化位置

    • main()函数中的SystemClock_Config()之后调用看门狗初始化函数
    • 在需要喂狗的位置调用HAL_IWDG_Refresh()HAL_WWDG_Refresh()
  2. 重装载值设置

    • IWDG:取值0x000-0xFFF(12位)
    • WWDG:取值0x40-0x7F(7位)
  3. 喂狗策略

    • IWDG:在超时前任何时间都可以喂狗
    • WWDG:必须在计数器值小于窗口值且大于0x3F时喂狗(避免过早或过晚喂狗)
  4. 中断使用

    • 窗口看门狗建议使用提前唤醒中断(WWDG_EWI)进行喂狗
    • 在中断回调函数中执行喂狗操作

4. 重要注意事项

  1. 看门狗一旦启用,只能通过复位系统禁用
  2. 在调试期间可以暂时禁用看门狗
  3. 低功耗模式下需考虑看门狗的行为(部分STM32支持冻结看门狗)
  4. 窗口看门狗的预分频系数可能有限制(如某些型号仅支持1/2/4/8分频)
  5. 避免在中断中调用喂狗函数,除非是专门的中断回调

5. 调试技巧

  1. 在调试时可以通过修改分频或重装载值缩短超时时间
  2. 在超时处理中添加调试信息输出
  3. 可以使用调试器查看看门狗状态寄存器
  4. 在进入低功耗前确保看门狗已冻结或能继续运行

这些配置适用于大多数STM32系列(F0/F1/F3/F4/F7等),具体使用时请参考对应芯片的参考手册确认寄存器的具体细节。

STM32单片机看门狗配置方法

SATM32单片机的看门狗有独立看门狗和窗口看门狗之分,这两者的工作原理却完全不同,今天来看一下他们的具体区别和

2023-06-22 09:07:00

什么是看门狗,工业路由器看门狗技术的功能优势

工业路由器大多都会配备看门狗技术,它是保证工业路由器传输过程中连续24小时不宕机的重要保护技术,那么,什么是看门狗呢?▍看门狗功能

2023-03-27 10:16:19

STM32中的独立看门狗和窗口看门狗是什么

在早期的MCU中是没有看门狗这种东西的,所以产品就很容易出现死机,跑飞的情况。为了避免这种情况的出现,后期的MCU都集成了看门狗的功能。但是目前看门狗

2023-02-20 17:47:07

STM32:独立看门狗、窗口看门狗配置

STM32单片机的看门狗有独立看门狗和窗口看门狗之分,这两者的工作原理却完全不同。

资料下载 旧念 2022-02-08 16:15:35

STM32L051使用HAL操作实例(6)-(IWDG)独立看门狗实验

一、看门狗介绍STM32的看门狗分为独立看门狗和窗口看门狗两种,两者的使

资料下载 刘艳 2021-12-09 16:51:18

STM32CubeMX配置ADC模拟看门狗实现掉电保存——基于(STM32G070+STM32CubeMX+HAL+ADC模拟看门狗

实验目的:通过STM32CubeMX进行简单配置生成HAL库实现ADC模拟看门狗

资料下载 佚名 2021-12-03 09:36:09

STM32L4单片机配置STOP模式下停止看门狗计数

读写芯片内部的OptionBytes,STM32L4的HAL库提供了操作选项字节的方法。以下代码配置了两个功能:(1)、

资料下载 佚名 2021-11-19 10:51:04

对于MCU看门狗IIWDG WWDG喂狗时间的配置参考

对于MCU看门狗IIWDG WWDG喂狗时间的配置参考可以参考MCU的datasheet;在每个MCU的datasheet中都有这样的表格:6.3.25 Timer

资料下载 李明 2021-10-28 12:06:02

STM32中的独立看门狗和窗口看门狗

在早期的MCU中是没有看门狗这种东西的,所以产品就很容易出现死机,跑飞的情况。为了避免这种情况的出现,后期的MCU都集成了看门狗的功能。但是目前看门狗

2023-01-30 14:38:17

详解独立看门狗的实现原理

这里以大家熟悉的STM32为例给大家讲解一下独立看门狗的配置以及工作过程。STM32F10xxx内置两个看门狗:独立

2022-12-22 17:01:43

STM32中的独立看门狗和窗口看门狗

一、前言 在早期的MCU中是没有看门狗这种东西的,所以产品就很容易出现死机,跑飞的情况。为了避免这种情况的出现,后期的MCU都集成了看门狗的功能。但是目前看门

2022-12-22 16:58:20

如何去使用基于HAL的STM32独立看门狗(IWDG)呢

窗口看门狗与独立开门狗有何区别?如何去使用基于HAL库的STM32独立

2021-11-08 09:20:08

HAL是如何实现ADC从而去模拟看门狗

怎样通过STM32CubeMX进行简单配置生成HAL库?HAL

2021-08-20 07:22:01

看门狗配置与函数

前言: 今天我们来学习看门狗的配置与函数,看门狗可以有效解决程序的跑飞,在使用过程中比较常见,是防止芯片故障的有效外设,我们一起来学习下

2021-07-30 06:13:09

如何去配置一种基于HAL的STM32f429独立看门狗

如何去配置一种基于HAL库的STM32f429独立看门狗?其

2021-07-29 06:26:09
7天热门专题 换一换
相关标签