1. 点亮LED
任务说明
本案例目标为最小系统验证:在一块可用的MCU最小系统板上,通过GPIO输出控制点亮一颗LED。完成本案例即证明MCU的电源、时钟、复位、调试接口及GPIO外设均工作正常,是后续所有硬件调试的基础。
硬件连接
以STM32F103C8T6蓝色药丸板为例,板载LED(PC13)已连接至GPIO PC13,低电平点亮。若使用自定义板,请按下表连接:
| MCU引脚 | LED阳极 | LED阴极 | 限流电阻 |
|---|---|---|---|
| PC13 | 通过电阻接PC13 | GND | 330Ω~1kΩ |
验证观测点:LED点亮/熄灭状态、电源指示灯、调试器连接状态。
SVG:最小系统验证拓扑
软件实现
使用STM32标准外设库,直接操作GPIO寄存器实现最小代码量。核心逻辑:使能GPIOC时钟→配置PC13为推挽输出→循环翻转PC13电平。
/* main.c — 最小系统验证:点亮LED (PC13) */
#include "stm32f10x.h"
void delay(void) {
volatile uint32_t i;
for (i = 0; i < 500000; i++); /* 软件延时 */
}
int main(void) {
/* 1. 使能 GPIOC 时钟 (APB2) */
RCC->APB2ENR |= RCC_APB2ENR_IOPCEN;
/* 2. 配置 PC13 为推挽输出,最大速度 2MHz */
GPIOC->CRH &= ~(GPIO_CRH_MODE13 | GPIO_CRH_CNF13);
GPIOC->CRH |= GPIO_CRH_MODE13_1; /* 输出模式,2MHz */
/* CNF13 = 00 → 通用推挽输出 */
while (1) {
GPIOC->BSRR = GPIO_BSRR_BR13; /* 置低电平 → LED 亮 */
delay();
GPIOC->BSRR = GPIO_BSRR_BS13; /* 置高电平 → LED 灭 */
delay();
}
}
工程配置与烧录
依赖:STM32F10x标准外设库(仅需启动文件与系统时钟初始化)。若使用Keil MDK,创建工程时选择芯片型号STM32F103C8,添加上述main.c及启动文件startup_stm32f10x_md.s。
/* 编译烧录命令(使用STM32CubeProgrammer或ST-Link工具) */
# 使用 ST-Link 烧录生成的 .hex 文件
STM32_Programmer_CLI -c port=SWD mode=UR -w build/led.hex -v
验证方法与判定标准
- 硬件检查:上电后板载电源指示灯亮,3.3V电压正常。
- 烧录验证:烧录过程无错误,提示“Download verified successfully”。
- 功能判定:观察LED以约1Hz频率闪烁(亮灭各约0.5秒)。若LED常亮或常灭,检查PC13连接极性及GPIO配置是否正确。
- 调试接口验证:使用ST-Link连接后,在Keil中点击“Download”能识别芯片ID(0x410),说明SWD通信正常。
判定标准:LED按预期频率闪烁即表示最小系统(电源、时钟、复位、GPIO)全部工作正常,本案例通过。