嵌入式开发第一课:从安装环境到串口打印和点灯
从 STM32CubeIDE 安装、工程创建、时钟和引脚配置,到下载运行、串口输出和 LED 闪烁,完整走通第一块板。

实验目标
完成这一篇后,你应该能独立完成:
- 安装开发工具和调试器驱动;
- 新建一个 STM32 工程;
- 配置调试接口、时钟、GPIO 和串口;
- 编译并下载程序;
- 让 LED 周期性闪烁;
- 在电脑串口工具中看到启动信息;
- 在出现问题时,按固定顺序定位原因。
本文以 STM32F103C8T6 最小系统板和 STM32CubeIDE 为例。不同开发板的 LED 引脚不同,必须先从原理图确认引脚,不能照抄 PA5 或 PC13。
一、准备材料
- STM32F103C8T6 开发板一块;
- ST-Link 下载器一个;
- USB-TTL 串口模块一个;
- 杜邦线若干;
- 电脑安装 STM32CubeIDE;
- 串口工具可以使用 PuTTY、Mobaxterm 或 VS Code Serial Monitor。
接线前先断电。串口模块和开发板必须共地:
USB-TTL GND -> 开发板 GND
USB-TTL RX -> 开发板 PA2 (USART2_TX)
USB-TTL TX -> 开发板 PA3 (USART2_RX)如果使用其他串口,请以芯片数据手册和开发板原理图为准。
二、安装和检查调试器
- 安装 STM32CubeIDE;
- 安装 ST-Link 驱动;
- 连接 ST-Link 的 SWDIO、SWCLK、GND 和 3.3V;
- 打开设备管理器,确认调试器被识别;
- 先不要下载程序,确认开发板供电正常、没有明显发热。
三、新建工程
在 STM32CubeIDE 中选择 File → New → STM32 Project。
- 芯片型号选择 STM32F103C8Tx;
- 工程名填写 led_uart_demo;
- 工程类型选择 C;
- 生成工程后进入 Device Configuration Tool。
配置调试接口
在 SYS 中把 Debug 设置为 Serial Wire。只使用 SWDIO 和 SWCLK 两根信号线,下载和调试都通过它们完成。
配置时钟
如果开发板有 8MHz 外部晶振:
- RCC 的 HSE 选择 Crystal/Ceramic Resonator;
- 在 Clock Configuration 中选择 HSE;
- 将系统时钟配置到芯片允许的频率,例如 72MHz;
- 让工具自动计算分频和倍频。
如果没有外部晶振,先使用内部 HSI,保证工程能运行,再根据板卡资料调整。
配置 LED 引脚
先在原理图上找到 LED 连接的 MCU 引脚和有效电平。
本文示例使用 PC13,低电平点亮。若你的板子使用其他引脚,只需要修改下面两个宏:
#define LED_GPIO_Port GPIOC
#define LED_Pin GPIO_PIN_13在 CubeMX 中把该引脚设置为 GPIO_Output,输出模式选择 Push Pull,速度选择 Low。
配置串口
打开 USART2:
- Mode:Asynchronous;
- Baud Rate:115200;
- Word Length:8 Bits;
- Parity:None;
- Stop Bits:1;
- 引脚使用 PA2 / PA3。
然后点击 Generate Code。
四、加入点灯和串口代码
在生成的 main.c 中找到 USER CODE 区域。不要把代码写进会被重新生成覆盖的区域。
/* USER CODE BEGIN Includes */
#include <string.h>
/* USER CODE END Includes */
/* USER CODE BEGIN PV */
static void uart_send(const char *text)
{
HAL_UART_Transmit(&huart2,
(uint8_t *)text,
(uint16_t)strlen(text),
1000);
}
/* USER CODE END PV */
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_USART2_UART_Init();
uart_send("boot ok\r\n");
HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET);
while (1)
{
HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET);
uart_send("led on\r\n");
HAL_Delay(500);
HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET);
uart_send("led off\r\n");
HAL_Delay(500);
}
}如果 LED 是灌电流接法,写 RESET 通常会点亮;如果是拉电流接法,逻辑会相反。以原理图为准。
五、编译、下载和运行
- 点击 Build 编译工程;
- 确认没有 Error;
- 点击 Run → Debug 或下载按钮;
- 下载完成后复位开发板;
- 打开串口工具,选择对应 COM 口,波特率 115200;
- 观察串口是否出现 boot ok、led on、led off。
正常情况下,LED 以约 1 秒为周期闪烁,串口每 500 毫秒输出一次状态。
六、按顺序排错
编译失败
先看第一条 Error,不要只看最后一行。常见原因是工程路径含特殊字符、缺少生成文件或代码写错区域。
下载失败
检查 ST-Link 的 SWDIO、SWCLK、GND、3.3V,确认 Debug 选择了 Serial Wire,确认芯片型号正确。
下载成功但 LED 不亮
- 确认 LED 引脚;
- 确认有效电平;
- 确认 LED 是否串联限流电阻;
- 用万用表测量引脚电压变化;
- 检查程序是否停在启动文件或异常处理。
串口没有输出
- 确认 TX/RX 是否交叉连接;
- 确认共地;
- 确认串口工具选择的 COM 口;
- 确认波特率 115200;
- 确认 USART2 是否真正初始化。
七、练习
- 把闪烁周期改成 100ms;
- 增加一个按键,按下时停止闪烁;
- 把串口内容改成当前运行状态;
- 记录一次完整接线图,下一次实验不依赖记忆。
参考资料:


