概述
本章在软件安装(Windows)已完成的环境上,使用 VSCode 直接编译官方基础工程,完成第一次编译并用 ST-Link 烧录到开发板。
在基础工程目录 DOCS_TEST1 下,先做一步配置,再编译(两种方式任选)。
💡 提示(必做,只需一次):官方基础工程默认只生成
9Mod_MCPBorad.elf,烧录需要.bin。在工程根目录的顶层文件C:\Users\你的名字\DOCS_TEST1\CMakeLists.txt(与9Mod_MCPBorad.ioc同目录)末尾追加以下内容(CubeMX 不会重新生成此文件,可放心修改):
# Generate .bin and .hex files after build
add_custom_command(TARGET ${CMAKE_PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_OBJCOPY} -O binary $<TARGET_FILE:${CMAKE_PROJECT_NAME}> ${CMAKE_PROJECT_NAME}.bin
COMMAND ${CMAKE_OBJCOPY} -O ihex $<TARGET_FILE:${CMAKE_PROJECT_NAME}> ${CMAKE_PROJECT_NAME}.hex
COMMENT "Generating .bin and .hex files"
)

保存即可,之后的每次编译都会自动生成 9Mod_MCPBorad.bin。
在基础工程目录 DOCS_TEST1 下,有两种编译方式:
方法一:VSCode CMake 插件图形化编译(推荐)
-
点击 VSCode 左侧活动栏的 CMake 图标(CMake Tools 插件)。

-
在侧边栏 CMake 面板中,将构建预设(Build Preset)选择为 Debug(也可点击底部状态栏的 CMake 区域切换)。

-
点击 Build(编译)按钮,等待编译完成,输出面板显示成功。

方法二:命令行编译(在 PowerShell 中执行,命令与 Linux 版一致)
# 1. 配置:读取 CMakePresets.json,生成 Ninja 构建脚本
cmake --preset Debug
# 2. 构建:编译链接几百个源文件为最终固件
cmake --build build/Debug
编译成功输出示例(行数因环境而异):
[xx/xx] Linking C executable 9Mod_MCPBorad.elf
Memory region Used Size Region Size %age Used
RAM: 16xxx B 20 KB xx%
FLASH: 98xxx B 128 KB xx%
确认产物:
dir build\Debug

确认产物:
build/Debug/下应有9Mod_MCPBorad.elf、9Mod_MCPBorad.bin、9Mod_MCPBorad.hex三个文件(.bin/.hex 由 POST_BUILD 自动生成)。
产物名来自
CMakeLists.txt的set(CMAKE_PROJECT_NAME 9Mod_MCPBorad),本教程所有命令均按此产物名编写。
接线:ST-Link 与开发板通过 SWD 连接,对应关系如下:
| ST-Link | 开发板 | 说明 |
|---|---|---|
| SWDIO | PA13 | 数据线 |
| SWCLK | PA14 | 时钟线 |
| GND | GND | 共地 |
| 3.3V | 3.3V(可不接) | 板子自身供电时可不接 |

确认 ST-Link 被 Windows 识别(Windows 直连,无需映射)
Windows 下 ST-Link 插上即被系统识别(OpenOCD 直接访问,不需要任何映射):
- 把 ST-Link 的 USB 插到电脑(开发板按接线表连好)。
- 打开设备管理器(
Win+X→ 设备管理器),应能看到 STLink dongle 设备。 - 若显示黄色感叹号,说明驱动没装好:安装 STM32 ST-LINK Utility 或从 ST 官网装 ST-Link 驱动。
烧录(VSCode Cortex-Debug 图形化,已装插件)
-
在工程根目录创建
.vscode/launch.json(内容如下):{ "version": "0.2.0", "configurations": [ { "name": "烧录并调试 STM32F103 (OpenOCD)", "cwd": "${workspaceFolder}", "executable": "${workspaceFolder}/build/Debug/9Mod_MCPBorad.elf", "request": "launch", "type": "cortex-debug", "servertype": "openocd", "configFiles": ["interface/stlink.cfg", "target/stm32f1x.cfg"], "device": "STM32F103CB", "gdbPath": "arm-none-eabi-gdb", "toolchainPrefix": "arm-none-eabi", "runToEntryPoint": "main" } ] }
-
在 VSCode 底部栏(状态栏)点击 “烧录并调试 STM32F103 (OpenOCD)” 按钮 → 自动启动 OpenOCD、连接 ST-Link、把固件烧入芯片。

-
烧录完成后程序停在
main(),点击调试控制栏的 继续 按钮运行程序;也可以先在代码里打断点再启动,进行在线调试。
烧录完成后,板子会运行固件:OLED 显示欢迎页、灯带渐变动画(后续章节逐步加入功能)。

-
看屏幕:OLED 应显示 “欢迎使用” 与 “九章开发板” 两行文字(官方基础工程的欢迎页)。

-
看串口日志:用串口助手(SSCOM/XCOM,软件安装步骤⑦已装)连接 USB 线对应的 COM 口(USART1 调试口),波特率 1500000,应看到每秒刷新一次的温湿度日志:
[INFO] sht3x_read_task:234: sht30: 29 C,52 %温度湿度数值随环境变化。出现该日志说明固件运行正常、SHT30 传感器通信正常。

-
串口中还可看到初始化日志:
[INFO] emMCP init done、[INFO] sht3x init OK!、[INFO] ch224 init OK!等。
以上均正常,说明下载成功,开发板已在运行基础固件。
编译报错排查
| 报错 | 原因 | 解决办法 |
|---|---|---|
arm-none-eabi-gcc: not found | 交叉编译器未安装或不在 PATH | 重跑 xpack 的 install.bat(管理员)或重装 ARM 官方 .exe,重开 PowerShell |
CMake Error: Could not find ninja | Ninja 未安装或不在 PATH | 下载 ninja-win.zip 解压后把目录加进系统 PATH(见软件安装步骤③) |
No CMAKE_C_COMPILER could be found | 工具链文件未生效 | 确认在项目根目录执行 cmake,CMakePresets.json 存在 |
cannot find -lc 等链接错误 | newlib 链接问题 | 确认 newlib_lock_glue.c 在项目根目录 |
| 疑难编译缓存问题 | 缓存损坏 | Remove-Item -Recurse build 后重新 cmake --preset Debug && cmake --build build/Debug |
常见问题与踩坑提示
🔧 cmake --preset Debug 提示不是内部或外部命令
原因:CMake 没进 PATH
解决:安装时勾选 "Add CMake to the system PATH";装完重开 PowerShell
🔧 arm-none-eabi-gcc --version 命令找不到
原因:编译器没进 PATH
解决:重跑 xpack 的 install.bat(管理员);或装 ARM 官方 .exe 时勾选 "Add path";重开 PowerShell
🔧 ninja --version 命令找不到
原因:Ninja 没加进 PATH
解决:把 ninja.exe 所在目录加进系统环境变量 Path(见软件安装步骤③)
🔧 克隆官方仓库很慢 / 失败
原因:网络波动
解决:重试;或 git clone --depth 1 https://github.com/Ai-Thinker-Open/emMCP.git(只拉最新版本)
🔧 在非项目目录执行 cmake --preset Debug 报错
原因:预设文件在工程根目录
解决:先 cd C:\Users\你的名字\DOCS_TEST1 再执行
🔧 编译报错 No CMAKE_C_COMPILER
原因:交叉编译器没装或不在 PATH
解决:重装/重跑 xpack 编译器 install.bat,重开 PowerShell
🔧 第一次编译很久
原因:全量编译几百个文件
解决:正常现象;之后增量编译只需几秒
🔧 改代码后想重新编译
原因:—
解决:cmake --build build/Debug 即可(无需重新 configure)
🔧 产物名不是自己的项目名
原因:CMAKE_PROJECT_NAME 与预期不一致
解决:基础工程产物名为 9Mod_MCPBorad.bin;如需改名,修改 CMakeLists.txt 的 set(CMAKE_PROJECT_NAME ...) 后重新 cmake --preset Debug
🔧 杀毒软件误删编译产物
原因:Windows Defender 误报
解决:把项目目录加入 Windows Defender 白名单
🔧 串口助手连不上 COM 口
原因:① 没插 USB 线 ② CH340 驱动没装 ③ 端口被占用
解决:① 插上 USB 线 ② 设备管理器确认 CH340 已识别 ③ 关闭占用该端口的软件,重新打开串口
Windows 下烧录小贴士
Windows 下 ST-Link 插上即可用(OpenOCD 直接访问 USB),不需要任何映射。烧录前先在设备管理器确认 STLink 设备正常显示。

