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 自动刷 | - |
硬件清单
- Blue-Pill 开发板 ×1
- ST-Link V2 调试器 ×1
- 4 根母对母杜邦线
2. 安装 & 升级 ST-Link
2.1 插上 ST-Link
macOS 无需额外驱动,终端验证:
$ system_profiler SPUSBDataType | grep -i stHost Controller Driver: AppleUSBXHCIARHost Controller Driver: AppleUSBXHCISPTLPSTM32 STLink:Vendor ID: 0x0483 (STMicroelectronics)Manufacturer: STMicroelectronics
2.2 升级固件
-
打开 STLinkUpgrade(安装完 STSW-LINK007 后,在
/Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/…/STLinkUpgrade.app) -
拔掉目标板 → 按住 ST-Link 上的 RESET 按钮 → 插入 USB(进入 DFU 模式)
-
点击 Upgrade → 等待 10 秒 → 显示 Upgrade OK
-
松开按钮,重新插一次,终端再次验证:
$ st-info --probe
Found 1 stlink programmers
3. STM32CubeIDE 创建工程
3.1 新建项目
- 打开 CubeIDE → File → New → STM32 Project
- Target Selector → 搜索框输入 STM32F103C8Tx → 双击选中
- 工程名:Test,Toolchain:STM32Cube → Finish
- 第一次弹出 Initialize peripherals 时直接点 Yes(默认即可)
- CubeMX 视图出现 → 右上角 Save → 自动生成代码
3.2 目录结构确认
3.3 示例代码
#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
现象
RCC->APB2ENR |= 0x00000010;
报错:error: ‘RCC’ undeclared
4.1 原因
当前工程是 “Managed Build” 极简模板,缺少 stm32f10x.h。
4.2 解决方案
方案 A:手动拷贝 CMSIS(3 分钟)
- 下载 STM32CubeF1 → 解压
- 把下面 3 个文件 复制到工程 Inc 目录:
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 重新生成(推荐)
- File → New → STM32 Project 选中 STM32F103C8Tx
- 勾选 Initialize all peripherals with their default mode → Finish
生成的工程已自带 CMSIS,直接写寄存器即可。
5.ST-Link 烧录
- 编译:Project → Build All
- 烧录: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” → 允许 |
烧录步骤:
- Run → Run → OK
- 勾选 Reset after programming
- 观察 Console 日志:
** Programming Finished **
** Verify OK **
** Resetting target **