嵌入式系统---看门狗

在嵌入式系统中,看门狗定时器(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()函数喂狗,重置看门狗的计数器

总结:

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

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

相关推荐
choumin2 小时前
创建型模式——工厂方法模式
c++·设计模式·工厂方法模式·创建型模式
云小逸2 小时前
【SVN 详细使用指南:从入门到团队协作】
c++·svn
Zevalin爱灰灰5 小时前
能源与电源管理电路——防倒灌电路
单片机·嵌入式硬件·电源管理
jianqiang.xue7 小时前
ESP-IDF保姆级入门02|Ubuntu24.04搭建EIM-GUI开发环境,打通Windows_Linux双平台统一开发
stm32·单片机·物联网
ziguo11227 小时前
深入浅出 C/C++ 数据类型:从入门到踩坑
linux·c语言·c++·windows·visual studio
无垠的广袤7 小时前
【工业树莓派 CM0 Dev Board】扩展板设计
linux·python·嵌入式硬件·pcb设计·模块化·传感器
白色冰激凌8 小时前
[SECS/GEM研究] (三)SECS-I 串口上消息怎么分块和重传
c++·secs/gem
光头闪亮亮8 小时前
Fyne ( go跨平台GUI )项目实战-项目开发必备基础知识(中)
android·c++·go
光头闪亮亮8 小时前
Fyne ( go跨平台GUI )项目实战-项目开发必备基础知识(下)
android·c++·go
嵌入式-老费8 小时前
esp32开发与应用(添加数据分区)
单片机·嵌入式硬件