拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

STM32 HAL 库外部中断控制流水灯实验报告

STM32 HAL 库外部中断控制流水灯实验报告

一、实验目的

  1. 掌握 STM32 HAL 库中 GPIO 外设的配置与输出控制方法。
  2. 理解 STM32 外部中断 EXTI 的工作原理,掌握 HAL 库下外部中断的配置与回调函数编写方法。
  3. 实现通过按键外部中断控制流水灯的暂停与恢复,掌握中断事件与主循环任务的配合逻辑。
  4. 理解中断 “快进快出” 的设计原则,掌握标志位法在中断程序中的应用。

二、实验环境

2.1 硬件环境

  • STM32F103C8T6 最小系统核心板
  • 红 / 绿 / 蓝 LED 灯共 3 只
  • 轻触按键 1 只
  • 1kΩ 限流电阻 3 只、10kΩ 下拉电阻 1 只
  • 面包板与杜邦线若干
  • USB-TTL 下载器

2.2 软件环境

  • Keil uVision5 集成开发环境
  • STM32CubeMX 代码生成工具
  • STM32F1xx HAL 库驱动包

三、实验原理

3.1 GPIO 输出驱动 LED 原理

STM32 的 GPIO 引脚配置为推挽输出模式时,可输出高、低两种电平。引脚输出高电平时,LED 导通点亮;输出低电平时,LED 截止熄灭。本实验使用 PA0、PA5、PB1 三个 GPIO 引脚分别驱动三路 LED。

3.2 外部中断 EXTI 工作原理

STM32F1 系列共有 19 条外部中断线,每个 GPIO 引脚都可映射到对应的 EXTI 中断线,支持上升沿、下降沿、双边沿三种触发方式。

  • 本实验中 PC14 引脚对应EXTI14 中断线,属于 EXTI10~EXTI15 共用的中断通道。
  • 按键按下时引脚电平从低变高,配置为上升沿触发,按键按下时硬件自动触发中断,CPU 暂停主循环程序,跳转执行中断服务函数。

3.3 按键中断控制逻辑

定义全局暂停标志位is_paused,主循环中根据该标志位判断是否执行流水灯逻辑:

  • 标志位为 0 时,流水灯正常轮流点亮;
  • 按键按下触发中断,在中断回调函数中翻转标志位为 1,流水灯停止运行;
  • 再次按下按键,标志位翻转为 0,流水灯从当前位置恢复运行。

中断中仅做标志位翻转,不执行延时等耗时操作,符合中断处理 “快进快出” 的设计原则。

四、实验内容与步骤

4.1 硬件电路连接

  1. LED 电路:PA0、PA5、PB1 引脚分别串联 1kΩ 限流电阻,连接对应 LED 的正极;所有 LED 负极统一接 GND。
  2. 按键电路:PC14 引脚连接轻触按键的一端,按键另一端接 3.3V;PC14 引脚同时外接 10kΩ 下拉电阻至 GND,保证未按下时引脚为稳定低电平。

4.2 HAL 库工程创建与配置

  1. 打开 STM32CubeMX,选择芯片STM32F103C8T6,创建工程。
  2. 系统配置:
    • RCC:HSE 配置为外部高速时钟,系统时钟倍频至 72MHz;
    • SYS:Debug 选择 Serial Wire。
  3. GPIO 配置:
    • PA0、PA5、PB1:设置为GPIO_Output,输出默认低电平,推挽模式,无上下拉,低速;
    • PC14:设置为GPIO_EXTI14,触发方式为上升沿,无上下拉。
  4. NVIC 配置:开启EXTI line[15:10] interrupts中断通道,设置中断优先级。
  5. 生成 Keil MDK 工程。

4.3 功能代码编写

在生成的工程中,在main.c的用户代码段内编写全局标志位、中断回调函数与流水灯主逻辑。

4.4 程序编译与下载

  1. Keil 中点击编译,检查无错误后生成.hex 文件。
  2. 通过下载器将程序烧录到 STM32 最小系统板。
  3. 上电观察实验现象,测试按键暂停 / 恢复功能。
返回列表