嵌入式系统---看门狗

在嵌入式系统中,看门狗定时器(Watchdog Timer,WDT)是一种常用的机制,用于检测和恢复系统在异常情况下的故障。如果系统因为某种原因(如软件死循环)而变得无响应,看门狗定时器可以自动重启系统,从而防止系统长时间处于不可用状态。

看门狗定时器通常需要定期"喂狗"(即写入特定的值以重置计时器),来防止它触发系统重启。如果系统正常工作,它会在看门狗定时器超时之前喂狗;如果系统出现问题,没有及时喂狗,看门狗定时器就会超时并触发重启。

演示例子如下 :

cpp 复制代码
#include "stm32f4xx_hal.h"

void StartWatchdog(void) {
    // 启用独立看门狗
    HAL_IWDG_Start(&hiwdg);
}

void FeedWatchdog(void) {
    // 喂狗,重置看门狗的计数器
    HAL_IWDG_Refresh(&hiwdg);
}

int main(void) {
    // HAL库初始化
    HAL_Init();
    
    // 配置系统时钟
    SystemClock_Config();
    
    // 看门狗初始化配置
    IWDG_HandleTypeDef hiwdg;
    hiwdg.Instance = IWDG;
    hiwdg.Init.Prescaler = IWDG_PRESCALER_4;
    hiwdg.Init.Reload = 4095;
    HAL_IWDG_Init(&hiwdg);
    
    // 开启看门狗
    StartWatchdog();
    
    while (1) {
        // 正常工作时,定期喂狗
        FeedWatchdog();
        
        // 执行其他任务
    }
}

void SystemClock_Config(void) {
    // 系统时钟配置代码,根据具体硬件配置
}

void Error_Handler(void) {
    // 错误处理代码
    while(1) {
    }
}

在这个例子中:

1.使用HAL_IWDG_Init()函数初始化看门狗定时器,设置预分频器和重载值。

2.使用HAL_IWDG_Start()函数启动看门狗定时器。

3.使用HAL_IWDG_Refresh()函数喂狗,重置看门狗的计数器

总结:

具体问题具体分析,有些场景下可能对看门狗的配置更加复杂,需要根据硬件手册以及库函数文档进行操作配置。

要"关闭"看门狗定时器,通常意味着停止喂狗,让看门狗定时器超时并触发重启。在某些系统中,可能需要特殊的操作或权限来完全禁用看门狗定时器,这通常不推荐在正常运行的系统中进行,因为它会降低系统的可靠性和稳定性。

相关推荐
wsoz9 分钟前
Leetcode链表-day9
c++·算法·leetcode·链表
万法若空25 分钟前
ANSI转义码详解
linux·c++
wearegogog12340 分钟前
基于STM32的酒精检测仪设计
stm32·单片机·嵌入式硬件
南境十里·墨染春水1 小时前
C++笔记 STL——vector
开发语言·c++·笔记
Deitymoon1 小时前
STM32——led灯点亮
stm32·单片机·嵌入式硬件
Jack_02201 小时前
基于51单片机的双路倒车雷达测距报警系统设计_LCD1602显示+超声波
单片机·51单片机·雷达·超声波·倒车·lcd1602显示
故事和你911 小时前
洛谷-算法2-2-常见优化技巧3
开发语言·数据结构·c++·算法·深度优先·动态规划·图论
charlie1145141911 小时前
通用GUI编程技术——图形渲染实战(三十七)——D3D11初始化与SwapChain:从零搭建GPU渲染框架
开发语言·c++·3d·图形渲染
菜鸟555551 小时前
2025江西省CCPC省赛暨全国邀请赛(南昌)
数据结构·c++·算法·acm·思维·ccpc·xcpc
charlie1145141911 小时前
通用GUI编程技术——图形渲染实战(三十六)——Constant Buffer与数据传递:CPU-GPU通信通道
开发语言·c++·windows·c·图形渲染·win32