STM32 独立看门狗(IWDG)详解

devtools/2024/11/19 11:02:28/

目录

一、引言

二、独立看门狗的作用

三、独立看门狗的工作原理

1.时钟源

2.计数器

3.喂狗操作

4.超时时间计算

5.复位机制

四、独立看门狗相关寄存器

1.键寄存器(IWDG_KR)

2.预分频寄存器(IWDG_PR) 

3.重载寄存器(IWDG_RLR)

五、代码实现 

六、注意事项

1.喂狗时间

2.时钟源稳定性

3.中断处理

七、总结


一、引言

        在嵌入式系统中,可靠性是至关重要的。为了防止系统因软件故障或外部干扰而出现死机或异常情况,通常会使用看门狗(Watchdog)机制。STM32 系列微控制器提供了两种看门狗:独立看门狗(IWDG)和窗口看门狗(WWDG)。本文将重点介绍 STM32 的独立看门狗。

二、独立看门狗的作用

独立看门狗主要用于在系统出现故障时,自动复位系统,以确保系统的正常运行。它独立于主系统时钟,即使主系统时钟出现故障,独立看门狗仍然可以正常工作。

当系统正常运行时,软件需要定期地 “喂狗”(即向独立看门狗写入特定的值),以防止看门狗超时。如果软件出现故障,未能及时 “喂狗”,独立看门狗将在超时后产生复位信号,使系统重新启动。

三、独立看门狗的工作原理

1.时钟源

独立看门狗使用内部低速时钟(LSI)作为时钟源。一般情况下,LSI 的频率为 32kHz 左右。这个时钟源独立于系统的主时钟(如 HSI、HSE 等),即使主时钟出现故障,独立看门狗仍然可以正常工作。

2.计数器

独立看门狗包含一个递减计数器。当计数器的值从预设的重载值开始递减,减到 0 时,独立看门狗将产生复位信号。

软件可以通过向独立看门狗的关键寄存器写入特定的值来重新加载计数器,这个操作通常被称为 “喂狗”。

3.喂狗操作

在系统正常运行时,软件必须在独立看门狗计数器递减到 0 之前进行喂狗操作,以防止系统复位。

喂狗的过程通常是向独立看门狗的键寄存器(IWDG_KR)写入特定的序列值。例如,先写入 0x5555,然后再写入 0xAAAA,以启动喂狗操作并重新加载计数器。

4.超时时间计算

独立看门狗的超时时间取决于预分频系数和重载值。计算公式为:

超时时间 = (预分频系数 × 重载值) / LSI 频率

例如,如果预分频系数设置为 4,重载值为 1000,LSI 频率为 32kHz,则超时时间为

(4×1000) / 32000 = 0.125 秒(125 毫秒)。

5.复位机制

当独立看门狗计数器减到 0 时,它会向系统发出复位信号,强制系统重新启动。

这个复位信号是独立于系统的其他复位源的,并且具有较高的优先级,确保在系统出现故障时能够及时进行复位操作。

四、独立看门狗相关寄存器

1.键寄存器(IWDG_KR)

  • 地址偏移:0x00。
  • 功能:用于启动喂狗操作、使能对寄存器的写访问以及启动独立看门狗。
  • 位描述:
    • 位 0-5:保留。
    • 位 6(RLK):寄存器锁键位,用于锁定对寄存器的写访问,防止意外写入。当写入 0x0000AAAA 时,该位清 0,表示解锁寄存器,可以进行写操作。
    • 位 7(PVU):预分频值更新位,当写入 0x00005555 时,该位清 0,允许修改预分频值和重载值。
    • 位 15(EWI):早期唤醒中断标志位,当独立看门狗计数到接近超时值时(提前一个 LSI 时钟周期),该位由硬件置 1。如果使能了早期唤醒中断(IWDG->IER 寄存器),则会产生中断。
  • 写入序列:
    • 要启动喂狗操作,先写入 0xAAAA 到 IWDG_KR。
    • 要使能对寄存器的写访问,先写入 0x5555 到 IWDG_KR。

2.预分频寄存器(IWDG_PR) 

  • 地址偏移:0x04。
  • 功能:设置独立看门狗的预分频系数。
  • 位描述:
    • 位 0-2:PR [2:0],预分频值,可设置为 4、8、16、32、64、128、256 等不同的值。
  • 例如,设置为 0x03 表示预分频系数为 64。

3.重载寄存器(IWDG_RLR)

  • 地址偏移:0x08。
  • 功能:设置独立看门狗的重载值,决定了看门狗超时的时间。
  • 位描述:
    • 位 0-11:RL [11:0],重载值,取值范围为 0-4095。
  • 例如,设置为 0xFFF 表示重载值为 4095。

五、代码实现 

#include "stm32f10x.h"// 初始化独立看门狗
void IWDG_Init(void)
{// 使能对独立看门狗寄存器的写访问(向 IWDG_KR 写入 0x5555)IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);// 设置独立看门狗的预分频系数和重载值IWDG_SetPrescaler(IWDG_Prescaler_64);   // 预分频系数为 64IWDG_SetReload(1000);                  // 重载值为 1000// 启动独立看门狗IWDG_Enable();
}// 喂狗操作
void IWDG_Feed(void)
{IWDG_ReloadCounter();
}int main(void)
{// 初始化独立看门狗IWDG_Init();while (1){// 模拟系统正常运行的一些操作// 定期喂狗,防止看门狗超时复位IWDG_Feed();}
}

在上述代码中:

  • IWDG_Init函数用于初始化独立看门狗,包括使能写访问、设置预分频系数和重载值以及启动独立看门狗。
  • IWDG_Feed函数用于进行喂狗操作,即重新加载计数器。
  • main函数中,首先初始化独立看门狗,然后在主循环中模拟系统正常运行的操作,并定期调用喂狗函数。

六、注意事项

1.喂狗时间

软件需要确保在独立看门狗超时之前进行喂狗操作。如果喂狗时间间隔过长,可能会导致独立看门狗超时,系统复位。

2.时钟源稳定性

独立看门狗使用内部低速时钟(LSI)作为时钟源。这个时钟源的稳定性可能不如主系统时钟,因此在设置超时时间时需要考虑时钟源的稳定性。

3.中断处理

在某些情况下,可能需要在中断处理程序中进行喂狗操作。需要注意的是,中断处理程序的执行时间不能过长,以免影响喂狗操作的及时性。

七、总结

        STM32 的独立看门狗是一种非常重要的可靠性机制,可以在系统出现故障时自动复位系统,确保系统的正常运行。在使用独立看门狗时,需要注意喂狗时间、时钟源稳定性和中断处理等问题,以确保独立看门狗能够正常工作。希望本文对大家理解和使用 STM32 的独立看门狗有所帮助。

 

 

 


http://www.ppmy.cn/devtools/135186.html

相关文章

基于RK3588的移动充电机器人应用解决方案

伴随着国内新能源汽车保有量的持续增长,充电难题愈发凸显,配套充电设施的建设需求进一步扩大。然而,传统固定式充电桩的建设难以避免充电排队、油车占位等现象,“一车位一桩”的模式实际运营效率不高,导致充电基础设施…

Docker构建禅道项目管理系统

禅道是一款优秀的开源项目管理软件,广泛应用于软件开发和项目管理领域。本文将详细介绍如何使用Docker构建禅道镜像,并支持灵活配置外部MySQL数据库,同时确保数据的持久化和安全性。 © ivwdcwso (ID: u012172506) Dockerfile 首先,让我们来看看Dockerfile的内容: …

Spring Boot汽车资讯:科技与速度的新纪元

摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了汽车资讯网站的开发全过程。通过分析汽车资讯网站管理的不足,创建了一个计算机管理汽车资讯网站的方案。文章介绍了汽车资讯网站的系统分析部分&…

Docker Compose部署Kafka(非Zookeeper​)

整个工具的代码都在Gitee或者Github地址内 gitee:solomon-parent: 这个项目主要是总结了工作上遇到的问题以及学习一些框架用于整合例如:rabbitMq、reids、Mqtt、S3协议的文件服务器、mongodb github:GitHub - ZeroNing/solomon-parent: 这个项目主要是…

深入理解 MySQL 大小写敏感性:配置、问题与实践指南20241115

深入理解 MySQL 大小写敏感性:配置、问题与实践指南 在开发和部署 MySQL 数据库时,表名的大小写敏感性问题常常被忽略,却可能在跨平台迁移、团队协作或工具兼容性方面引发复杂的故障。本文将结合实际案例,深入探讨 MySQL 的 lowe…

07 - Clickhouse之ReplacingMergeTree和SummingMergeTree引擎

目录 一、ReplacingMergeTree引擎 1、简介 2、去重的时机 3、去重范围 4、案例 二、SummingMergeTree引擎 1、简介 2、案例 3、结论 一、ReplacingMergeTree引擎 1、简介 ReplacingMergeTree 是 MergeTree 的一个变种,它存储特性完全继承 MergeTree&#…

【大语言模型】ACL2024论文-12 大型语言模型的能力如何受到监督式微调数据组成影响

【大语言模型】ACL2024论文-12 大型语言模型的能力如何受到监督式微调数据组成影响 论文:https://arxiv.org/pdf/2310.05492 目录 文章目录 【大语言模型】ACL2024论文-12 大型语言模型的能力如何受到监督式微调数据组成影响论文:https://arxiv.org/p…

ffmpeg自动手动编译安装

1.下载linux ndk并配置profile文件 本例以android-ndk-r10e为例 vi /etc/profile export NDK_HOME/root/ffmpeg/android-ndk-r10e export PATH P A T H : PATH: PATH:NDK_HOME source /etc/profile 2.下载x264并生成 git clone https://code.videolan.org/videolan/x264.g…