首页 常识文章正文

STM32看门狗详解,从原理到实战

常识 2024年09月11日 10:31 337 洁利

在嵌入式系统开发过程中,稳定性无疑是至关重要的,一旦设备出现异常而无法自我恢复,不仅影响用户体验,还可能带来严重的后果,为此,许多微控制器(MCU)内置了看门狗(Watchdog Timer,简称WDT)机制,用以提高系统的可靠性,本文将深入探讨STM32系列微控制器中的看门狗功能,包括其工作原理、配置方法以及如何利用它来增强应用程序的健壮性。

什么是看门狗?

看门狗是一种硬件或软件机制,用于检测和处理系统故障,其基本思想是通过定时器来监控程序执行过程,如果程序运行正常,则会定期重置该定时器;若程序发生异常导致未能及时重置定时器,定时器溢出后就会触发中断或复位系统,从而使系统恢复正常工作状态。

STM32中的看门狗类型

STM32提供了两种类型的看门狗:

STM32看门狗详解,从原理到实战

独立看门狗(Independent Watchdog, IWDG):主要针对系统挂起等问题提供解决方案,独立看门狗直接由电源电压供电,并使用低速外部晶振作为时钟源,因此即使主电源失效或时钟丢失的情况下也能继续工作。

窗口型看门狗(Window Watchdog, WWDG):适用于更复杂的场景,可以设置一个窗口范围,在这个范围内重置看门狗有效,超出此范围则会导致复位,从而增强了对程序运行状况的控制能力。

独立看门狗(IWDG)配置实例

下面以STM32F103C8T6为例介绍如何配置独立看门狗:

STM32看门狗详解,从原理到实战

#include "stm32f1xx_hal.h"
void InitIWDG(void)
{
    // 启用IWDG时钟
    __HAL_RCC_IWDG_CLK_ENABLE();
    // 配置IWDG分频系数为32,即1秒喂一次狗
    HAL_IWDG_Init(&hiwdg, IWDG_PRESCALER_256, 4095);
    // 开启IWDG
    HAL_IWDG_Start(&hiwdg);
}
int main(void)
{
    HAL_Init();
    
    // 初始化IWDG
    InitIWDG();
    while (1)
    {
        // 在这里编写你的程序代码
        // 每隔一定时间调用HAL_IWDG_Refresh()函数喂狗
        HAL_IWDG_Refresh(&hiwdg);
        // 其他逻辑...
    }
}

窗口型看门狗(WWDG)配置示例

#include "stm32f1xx_hal.h"
void InitWWDG(void)
{
    // 启用WWDG时钟
    __HAL_RCC_WWDG_CLK_ENABLE();
    // 配置WWDG
    wwdg.Init.Prescaler = WWDG_PRESCALER_8;
    wwdg.Init.Window = 0x7F;   // 设置窗口值
    wwdg.Init.Counter = 0x7F;  // 设置计数器初值
    HAL_WWDG_Init(&wwdg);
}
int main(void)
{
    HAL_Init();
    // 初始化WWDG
    InitWWDG();
    while (1)
    {
        // 在这里编写你的程序代码
        // 每次喂狗前先检查是否需要更新窗口值
        if (HAL_WWDG_IsCounterReachedIT(&wwdg) != HAL_OK)
        {
            HAL_WWDG_ReloadCounter(&wwdg);
        }
        // 其他逻辑...
    }
}

注意事项

1、时钟选择:对于IWDG而言,它通常由LSE或LSI提供时钟信号,具体取决于芯片型号;而对于WWDG来说,则是直接由APB1总线供给。

2、复位机制:当看门狗超时后,系统会被强制复位,此时所有寄存器将恢复到初始状态,在设计时应考虑到这种情况下数据保存及恢复的问题。

3、中断处理:尽管看门狗本身不产生中断请求,但可通过配置RTC唤醒功能结合使用,实现更灵活的定时任务调度。

STM32看门狗详解,从原理到实战

通过上述介绍,相信读者已经对STM32中看门狗的使用有了初步了解,合理运用这一特性,可以大大提高嵌入式应用的稳定性和可靠性,实际开发中还需要根据具体需求调整参数设置,确保既能有效防止死机又能避免不必要的频繁重启。

中盟盛世科技网 网站地图 免责声明:本网站部分内容由用户自行上传,若侵犯了您的权益,请联系我们处理,联系QQ:2760375052 版权所有:中盟盛世科技网:沪ICP备2023024865号-1