STM32F103 独立看门狗

STM32F103C8T6 最小系统开发板使用 HAL 固件库实现独立看门狗(IWDG)

1. 硬件设计

1.1 开发板简介

STM32F103C8T6 是一款基于 ARM Cortex-M3 内核的 32 位微控制器,具备丰富的外设资源,适用于嵌入式系统开发。本次实验使用最小系统开发板,并通过 ST-Link V2 下载程序。

1.2 硬件连接

独立看门狗(IWDG)由 STM32 的片上 RC 振荡器驱动,无需外部硬件支持。此实验使用 PC13 引脚上的 LED 指示看门狗复位。

2. 独立看门狗(IWDG)原理

IWDG 主要用于检测系统异常,并在超时时复位 MCU,防止系统死锁。其核心特点包括:

  1. 采用 40kHz 低速 RC 振荡器,不受主时钟影响。
  2. 可配置预分频系数和重装载值,以调整超时时间。
  3. 通过写入 0xAAAA 重新加载计数器,防止复位。
  4. 一旦启动,无法关闭。

3. 软件设计

3.1 HAL 库配置

使用 STM32 HAL 库操作 IWDG,初始化代码如下:

#include "stm32f1xx_hal.h"

IWDG_HandleTypeDef hiwdg;

void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_IWDG_Init(void);

int main(void)
{
    HAL_Init();
    SystemClock_Config();
    MX_GPIO_Init();
    MX_IWDG_Init();

    while (1)
    {
        HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);
        HAL_Delay(500);  // 模拟系统任务
        HAL_IWDG_Refresh(&hiwdg); // 喂狗,防止复位
    }
}

void MX_IWDG_Init(void)
{
    hiwdg.Instance = IWDG;
    hiwdg.Init.Prescaler = IWDG_PRESCALER_64;
    hiwdg.Init.Reload = 625; // 超时时间约 1 秒
    if (HAL_IWDG_Init(&hiwdg) != HAL_OK)
    {
        Error_Handler();
    }
}

3.2 代码详解

  • MX_IWDG_Init:配置 IWDG 预分频和重装载值。
  • HAL_IWDG_Refresh:定期喂狗,防止复位。
  • HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13):LED 翻转,观察系统是否在运行。

4. 操作步骤

stlink

  1. 配置 STM32CubeMX 生成 HAL 库工程,启用 IWDG。
  2. 编写 main.c,添加 IWDG 初始化和喂狗代码。
  3. 使用 ST-Link V2 下载代码至 STM32F103C8T6。
  4. 观察 PC13 LED 闪烁,去掉 HAL_IWDG_Refresh,等待 MCU 复位。

5. 结论

本文介绍了 STM32F103C8T6 使用 HAL 库驱动 IWDG 的实现方法。通过本实验,可以掌握 IWDG 预分频配置、喂狗操作以及其在防止系统异常中的应用。

posted @ 2025-02-07 16:19  jeikerxiao  阅读(194)  评论(0)    收藏  举报