嵌入式系统---看门狗

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

总结:

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

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

相关推荐
脏脏a1 小时前
C++ STL list 模拟实现:从底层链表到容器封装
开发语言·c++·stl·双链表
周周记笔记9 小时前
ESP32 初识:WiFi MCU 新时代与国产芯片生态(一)
单片机·嵌入式硬件
你怎么知道我是队长9 小时前
C语言---typedef
c语言·c++·算法
带土19 小时前
5. enum(枚举)关键字在C/C++中的作用
c语言·c++
驴友花雕10 小时前
【花雕学编程】Arduino BLDC 之群体机器人协同探索
c++·单片机·嵌入式硬件·arduino bldc·群体机器人协同探索
驴友花雕10 小时前
【花雕学编程】Arduino BLDC 之仿人机器人膝关节稳定系统
c++·单片机·嵌入式硬件·arduino bldc·仿人机器人膝关节稳定系统
Qhumaing10 小时前
C++学习:【PTA】数据结构 7-1 实验7-1(最小生成树-Prim算法)
c++·学习·算法
Z1Jxxx12 小时前
01序列01序列
开发语言·c++·算法
坚定学代码12 小时前
基于观察者模式的ISO C++信号槽实现
开发语言·c++·观察者模式·ai
ha204289419413 小时前
Linux操作系统学习记录之---TcpSocket
linux·网络·c++·学习