news 2026/9/30 12:45:42

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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. 上电观察实验现象,测试按键暂停 / 恢复功能。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/30 12:45:26

AI推理成本优化:Token需求管理实战指南

1. 项目概述:这不是一篇“AI投资指南”,而是一份对技术经济拐点的实操型拆解 最近在多个专业社群里,Rohan Paul解读高盛那份《AI进入规模经济》报告的摘要被反复转发,标题里那句“token需求增速需跑赢价格下滑”像一根细针&#x…

作者头像 李华
网站建设 2026/9/30 12:44:32

Spring Boot 配置文件密码加密实战:Druid 与 Jasypt 集成方案

一辆写着password: 123456的 Spring Boot 服务,在发布到生产环境的那一刻,就已经把半个数据库的钥匙挂在了墙上。先别急着做性能优化,也别一头扎进微服务改造,把配置文件里的数据库密码、Redis 密码、接口密钥这类东西加密一遍&am…

作者头像 李华
网站建设 2026/9/30 12:44:31

Flask 可视化数据看板实战:模板渲染、ECharts 自动刷新与部署

1. 先想清楚一件事:Flask 做可视化界面到底适合谁 如果你手上有一堆 Python 脚本跑出来的数据,想尽快给人看,而不是花两周去啃前端工程化那套东西,那 Flask 配一个图表库就是性价比很高的路子。它不像 React 或 Vue 那样需要先搭一…

作者头像 李华
网站建设 2026/9/30 12:42:33

Qwen Image 2.1在ComfyUI中的语义解构与多图融合实战

1. 这不是“又一个Qwen模型测评”,而是实打实的ComfyUI工作流重构实战最近在几个AI绘画社群里,几乎每天都有人问:“Qwen Image 2.1到底能不能用?秋叶包里没自带,手动装完跑不动,提示词反推结果像乱码&#…

作者头像 李华
网站建设 2026/9/30 12:42:08

SpringBoot+Vue+MySQL考研互助平台前后端分离项目实战解析

考研互助交流平台这类项目,我见过太多人一上来就埋头写代码,结果后端写了一堆接口,前端却不知道怎么对接;或者前端页面做得漂亮,后端接口却一塌糊涂。要么就是项目写完了,自己本地能跑,换台电脑…

作者头像 李华
网站建设 2026/9/30 12:42:07

用Python打造分子几何优化自动化流水线:从输入到可视化全解析

做分子几何优化,最烦的不是优化本身,而是那些琐碎的手工操作。输入文件要手动改坐标,算完要手动看能量是不是收敛,轨迹要导出来拖进专业软件才能看,折腾一个分子还好,要是手里有几十个分子要批量处理&#…

作者头像 李华