嵌入式系统---看门狗

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

总结:

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

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

相关推荐
晓蛋1 天前
c语言指的是什么意思
c语言·编译器·编程开发·集成开发环境·程序实例
倒头就睡的小比特1 天前
算法竞赛C++常用的STL
c++·算法
不悔哥1 天前
开源OV-Watch:怎么做一个智能手表
单片机·开源·嵌入式
weilx12341 天前
C++笔记-文件IO-<fcntl.h>
c++
傲世仙尊1 天前
目录即文件-Ext文件系统收尾篇
linux·c语言
XiHongShi20161 天前
STM32F407 RTC定时器例程,建议保存
stm32·单片机·学习
调试优选官1 天前
IoT物联网系统定制落地实践:从设备接入、协议网关、平台分层到业务应用,如何做技术选型、交付验收、责任边界与长期运维成本评估及迁移安排
物联网·iot·成本分析
牵猫散步的鱼儿1 天前
重载、重写(覆盖)、重定义区别
c语言
phltxy1 天前
C 语言指针:从内存地址到灵活的数据访问
c语言
Smileyqp沛沛1 天前
前端?C++ ?较大差异基础罗列
c++·基础·前端转c++