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,防止系统死锁。其核心特点包括:
- 采用 40kHz 低速 RC 振荡器,不受主时钟影响。
- 可配置预分频系数和重装载值,以调整超时时间。
- 通过写入
0xAAAA
重新加载计数器,防止复位。 - 一旦启动,无法关闭。
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. 操作步骤
- 配置 STM32CubeMX 生成 HAL 库工程,启用 IWDG。
- 编写
main.c
,添加 IWDG 初始化和喂狗代码。 - 使用 ST-Link V2 下载代码至 STM32F103C8T6。
- 观察 PC13 LED 闪烁,去掉
HAL_IWDG_Refresh
,等待 MCU 复位。
5. 结论
本文介绍了 STM32F103C8T6 使用 HAL 库驱动 IWDG 的实现方法。通过本实验,可以掌握 IWDG 预分频配置、喂狗操作以及其在防止系统异常中的应用。