1. 流水灯项目概述
第一次看到流水灯效果是在大学电子设计实验室里,一排LED灯像水流一样依次点亮熄灭,那种动态美感让我瞬间着迷。后来才知道,这个看似简单的效果背后蕴含着嵌入式开发的基础逻辑和硬件控制的核心原理。
流水灯本质上是通过程序控制多个LED灯按特定顺序轮流点亮和熄灭,形成视觉上的流动效果。这种案例在嵌入式开发领域堪称"Hello World"级别的经典项目,但它比单纯的LED闪烁要复杂得多,涉及GPIO控制、时序管理、循环结构等多个基础知识点。
2. 硬件准备与电路设计
2.1 元器件选型要点
制作流水灯最基础的硬件需求其实很简单:
- 开发板(推荐STM32F103C8T6最小系统板,性价比高)
- 8个LED灯(建议不同颜色混合使用效果更佳)
- 220Ω电阻8个(限流保护LED)
- 杜邦线若干
- 面包板(方便搭建临时电路)
注意:LED工作电流通常为10-20mA,使用3.3V供电时,限流电阻计算为(3.3V-2V)/0.01A=130Ω,选用220Ω是留有安全余量。
2.2 电路连接示意图
最稳妥的连接方式是共阳极接法:
- 将LED正极通过220Ω电阻连接到3.3V电源
- LED负极分别连接到开发板的GPIO引脚
- 开发板GND与电源GND相连
这种接法下,当GPIO输出低电平时LED点亮,高电平时熄灭,符合常规逻辑思维。我建议使用PB0-PB7这8个连续引脚,方便程序编写。
3. 软件开发环境搭建
3.1 工具链配置
我习惯使用Keil MDK开发STM32项目,配置步骤如下:
- 安装Keil MDK-ARM(建议5.23以上版本)
- 安装STM32F1系列器件支持包
- 新建工程时选择STM32F103C8器件
- 配置调试器为ST-Link(其他调试器需安装对应驱动)
3.2 基础工程设置
创建工程后需要完成几个关键配置:
- 系统时钟设置为72MHz(在system_stm32f10x.c中修改)
- 启用GPIOB时钟(RCC_APB2PeriphClockCmd)
- 配置PB0-PB7为推挽输出模式(GPIO_Init)
4. 核心代码实现解析
4.1 基本流水灯实现
最直接的实现方式是使用顺序控制:
