STM32 入门实录:macOS 下从 0 到点亮 LED

1. 环境准备

软件清单

软件 版本 下载地址 校验
STM32CubeIDE 1.15.0 SST 官网 DMG 打开后 About 显示 1.15.0-19437
SST-Link Utility 3.16.9 STSW-LINK007 -
ST-Link Firmware V2J45S7 通过 STLinkUpgrade 自动刷 -

硬件清单

  1. Blue-Pill 开发板 ×1
  2. ST-Link V2 调试器 ×1
  3. 4 根母对母杜邦线

macOS 无需额外驱动,终端验证:

bash 复制代码
$ system_profiler SPUSBDataType | grep -i st
      Host Controller Driver: AppleUSBXHCIAR
      Host Controller Driver: AppleUSBXHCISPTLP
            STM32 STLink:
              Vendor ID: 0x0483  (STMicroelectronics)
              Manufacturer: STMicroelectronics

2.2 升级固件

  1. 打开 STLinkUpgrade(安装完 STSW-LINK007 后,在

    /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/.../STLinkUpgrade.app)

  2. 拔掉目标板 → 按住 ST-Link 上的 RESET 按钮 → 插入 USB(进入 DFU 模式)

  3. 点击 Upgrade → 等待 10 秒 → 显示 Upgrade OK

  4. 松开按钮,重新插一次,终端再次验证:

bash 复制代码
$ st-info --probe
Found 1 stlink programmers

3. STM32CubeIDE 创建工程

3.1 新建项目

  1. 打开 CubeIDE → File → New → STM32 Project
  2. Target Selector → 搜索框输入 STM32F103C8Tx → 双击选中
  3. 工程名:Test,Toolchain:STM32Cube → Finish
  4. 第一次弹出 Initialize peripherals 时直接点 Yes(默认即可)
  5. CubeMX 视图出现 → 右上角 Save → 自动生成代码

3.2 目录结构确认

3.3 示例代码

c 复制代码
#include <stdint.h>
#include "stm32f10x.h"

#if !defined(__SOFT_FP__) && defined(__ARM_FP)
  #warning "FPU is not initialized, but the project is compiling for an FPU. Please initialize the FPU before use."
#endif

/* 简易毫秒延时(基于 72 MHz 内核时钟) */
static void delay_ms(volatile uint32_t ms)
{
    /* 粗略值:72 MHz / 4 ≈ 18 M 次循环 ≈ 1 ms */
    while (ms--)
        for (volatile uint32_t i = 0; i < 18000; i++);
}

int main(void)
{
	/* 打开 GPIOC 时钟 */
	RCC->APB2ENR |= RCC_APB2ENR_IOPCEN;

	/* PC13 推挽输出 50 MHz */
	GPIOC->CRH &= ~(GPIO_CRH_MODE13 | GPIO_CRH_CNF13);   /* 清掉旧配置 */
	GPIOC->CRH |=  (GPIO_CRH_MODE13_1 | GPIO_CRH_MODE13_0); /* 11: Output 50 MHz */

	while (1)
	{
		GPIOC->ODR ^= (1u << 13);   /* 翻转 PC13 */
		delay_ms(10);              /* 延时 500 ms */
	}
}

4. 编译错误:RCC 未定义 → 手动补 CMSIS

现象

c 复制代码
RCC->APB2ENR |= 0x00000010;

报错:error: 'RCC' undeclared

4.1 原因

当前工程是 "Managed Build" 极简模板,缺少 stm32f10x.h。

4.2 解决方案

方案 A:手动拷贝 CMSIS(3 分钟)

  1. 下载 STM32CubeF1 → 解压
  2. 把下面 3 个文件 复制到工程 Inc 目录:
bash 复制代码
Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f10x.h
Drivers/CMSIS/Core/Include/core_cm3.h
Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f10x.h

方案 B:用 CubeIDE 重新生成(推荐)

  1. File → New → STM32 Project 选中 STM32F103C8Tx
  2. 勾选 Initialize all peripherals with their default mode → Finish
    生成的工程已自带 CMSIS,直接写寄存器即可。
  1. 编译:Project → Build All
  2. 烧录:Run → Run → LED 闪烁

6.问题 FAQ

现象 解决
OpenOCD: no device found 确认 ST-Link 已升级,USB 线支持数据
Not Target 目标板未供电;SWD 线序错;按住 Reset 下载
Not ST-Link detected 固件未升级 → 2.2 节流程
macOS 无权限 首次弹窗 "Allow accessory" → 允许

烧录步骤:

  1. Run → Run → OK
  2. 勾选 Reset after programming
  3. 观察 Console 日志:
bash 复制代码
** Programming Finished **
** Verify OK **
** Resetting target **