使用 Arduino 和 PlatformIO 点亮 STM32F103C8 (Blue Pill) 上的 LED

2025-04-19#STM32#Arduino#单片机

STM32F103 是意法半导体推出的一款基于 ARM Cortex-M3 内核的中端32位微控制器,主打高性能和丰富外设。STM32F103C8T6 是该系列中的一款经典型号,被称为 Blue Pill。STM32F103系列是STM32中最畅销的系列之一,而它凭借其低价和易用性成为 DIY、学生项目和中小规模商业产品的首选。本文通过简单的 Blink LED (闪烁 LED 灯)示例,介绍在 Ubuntu Linux 上搭建开发环境的实战经验。

物料 🔗

这是一个极其简单的示例,只需要最少物料即可:

  • STM32F103C8T6 开发版。焊接好的开发版,目前价格在 13 元左右。
  • USB转TTL 串口模块。用于烧录程序,比如 CP1202 驱动的USB转TTL串口模块。注意这种模块有 MiniUSB、MicroUSB 和 Type-C 接口的,购买时注意选择。
  • 杜邦线若干。

需要注意的是,烧录 STM32F103 有多种方式,比如 ST-LINK V2下载器、USB转TTL模块等。我购买了 ST-LINK V2 下载器,但在我的电脑上,无论如何无法烧录成功;最终还是使用了 CP1202 驱动的USB转TTL串口模块烧录成功。不知道是开发版的问题,ST-LINK V2 下载器的问题,还是电脑系统的问题。另外,我的电脑似乎一直无法使用 CH240x 驱动的USB转TTL串口模块。

在 STM32F103C8T6 上的 PC13 引脚接了一个板载 LED(可在 LED旁边看到 PC13 字样)。当 PC13 输出低电平时,LED 亮;当输出高电平时或者浮空时,LED 灭。因此,可用于验证烧录是否成功。

开发工具 🔗

PlatformIO 🔗

PlatformIO 是一个跨平台的嵌入式开发工具,支持多种微控制器(如STM32、ESP32、Arduino)和框架(如Arduino、HAL、FreeRTOS),集成了构建、调试和库管理功能。它基于VS Code或CLI运行,简化了嵌入式开发流程,适合专业和开源项目。可在 VS Code 中安装 PlatformIO 插件进行使用。

代码开发 🔗

新建项目 🔗

在 VS Code 的边栏打开 PlatformIO 后,点击 Create New Project 创建新项目。在 Board 选择框中输入 stm32f103c8,选择 STM32F103C8 (20K RAM, 64 Flash)(Generic),在 Framework 中选择 Arduino,然后填入其他字段后点击 Finish 创建项目。

修改配置 🔗

项目的配置位于 platformio.ini 文件中。由于使用串口烧录,因此需要设置烧录的端口。对于 Linux 系统,可在终端输入 ls /dev/tty*,查找类似 /dev/ttyUSB0 或者 /dev/ttyACM0 的设备。

在我的电脑上,ls /dev/tty* 的唯一结果是 /dev/ttyUSB0。最终 platformio.ini 的内容如下:

[env:genericSTM32F103C8]
platform = ststm32
board = genericSTM32F103C8
framework = arduino
upload_protocol = serial
upload_port = /dev/ttyUSB0
monitor_speed = 115200

更新代码 🔗

打开 main.cpp 文件,更新内容如下:

#include <Arduino.h>

void setup() {
    pinMode(PC13, OUTPUT);
}

void loop() {
    digitalWrite(PC13, HIGH);
    delay(500);
    digitalWrite(PC13, LOW); // PC13 输出低电平,点亮 LED
    delay(500);
}

烧录 🔗

硬件接线 🔗

使用杜邦线,通过如下方式连接引脚:

USB-TTLSTM32F103
TXPA10
RXPA9
GNDGND
3.3V3.3V

进入烧录模式 🔗

STM32 需要通过 BOOT 引脚选择启动模式:

  • BOOT0 接高电平(1)
  • BOOT1 接高电平(0)

这两个引脚在开发版上有标识,并且可使用跳线帽短接,实现接高电平(1)还是低电平(0)。

烧录完成后,就会看到 LED 在闪烁了。

运行 🔗

烧录完成后,可拔掉开发板上的杜邦线了。但如果通过USB供电,发现LED又不闪烁了。这是因为开发板处于开发模式。为此,可通过硬件复位,可退出烧录模式:

  • 将 BOOT0 引脚拉低(接 GND,即短接 0)

然后通过 USB 线供电,又可看到 LED 灯在闪烁了。


加载中...