大花科技
嵌入式开发原创教程嵌入式入门 01

嵌入式开发第一课:从安装环境到串口打印和点灯

从 STM32CubeIDE 安装、工程创建、时钟和引脚配置,到下载运行、串口输出和 LED 闪烁,完整走通第一块板。

嵌入式开发第一课:从安装环境到串口打印和点灯

实验目标

完成这一篇后,你应该能独立完成:

  • 安装开发工具和调试器驱动;
  • 新建一个 STM32 工程;
  • 配置调试接口、时钟、GPIO 和串口;
  • 编译并下载程序;
  • 让 LED 周期性闪烁;
  • 在电脑串口工具中看到启动信息;
  • 在出现问题时,按固定顺序定位原因。

本文以 STM32F103C8T6 最小系统板和 STM32CubeIDE 为例。不同开发板的 LED 引脚不同,必须先从原理图确认引脚,不能照抄 PA5 或 PC13。

一、准备材料

  • STM32F103C8T6 开发板一块;
  • ST-Link 下载器一个;
  • USB-TTL 串口模块一个;
  • 杜邦线若干;
  • 电脑安装 STM32CubeIDE;
  • 串口工具可以使用 PuTTY、Mobaxterm 或 VS Code Serial Monitor。

接线前先断电。串口模块和开发板必须共地:

textcode
USB-TTL GND  -> 开发板 GND
USB-TTL RX   -> 开发板 PA2 (USART2_TX)
USB-TTL TX   -> 开发板 PA3 (USART2_RX)

如果使用其他串口,请以芯片数据手册和开发板原理图为准。

二、安装和检查调试器

  1. 安装 STM32CubeIDE;
  2. 安装 ST-Link 驱动;
  3. 连接 ST-Link 的 SWDIO、SWCLK、GND 和 3.3V;
  4. 打开设备管理器,确认调试器被识别;
  5. 先不要下载程序,确认开发板供电正常、没有明显发热。

三、新建工程

在 STM32CubeIDE 中选择 File → New → STM32 Project。

  1. 芯片型号选择 STM32F103C8Tx;
  2. 工程名填写 led_uart_demo;
  3. 工程类型选择 C;
  4. 生成工程后进入 Device Configuration Tool。

配置调试接口

在 SYS 中把 Debug 设置为 Serial Wire。只使用 SWDIO 和 SWCLK 两根信号线,下载和调试都通过它们完成。

配置时钟

如果开发板有 8MHz 外部晶振:

  1. RCC 的 HSE 选择 Crystal/Ceramic Resonator;
  2. 在 Clock Configuration 中选择 HSE;
  3. 将系统时钟配置到芯片允许的频率,例如 72MHz;
  4. 让工具自动计算分频和倍频。

如果没有外部晶振,先使用内部 HSI,保证工程能运行,再根据板卡资料调整。

配置 LED 引脚

先在原理图上找到 LED 连接的 MCU 引脚和有效电平。

本文示例使用 PC13,低电平点亮。若你的板子使用其他引脚,只需要修改下面两个宏:

ccode
#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 区域。不要把代码写进会被重新生成覆盖的区域。

ccode
/* 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 通常会点亮;如果是拉电流接法,逻辑会相反。以原理图为准。

五、编译、下载和运行

  1. 点击 Build 编译工程;
  2. 确认没有 Error;
  3. 点击 Run → Debug 或下载按钮;
  4. 下载完成后复位开发板;
  5. 打开串口工具,选择对应 COM 口,波特率 115200;
  6. 观察串口是否出现 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 是否真正初始化。

七、练习

  1. 把闪烁周期改成 100ms;
  2. 增加一个按键,按下时停止闪烁;
  3. 把串口内容改成当前运行状态;
  4. 记录一次完整接线图,下一次实验不依赖记忆。

参考资料: