Skip to content

概述

本章在软件安装(Windows)已完成的环境上,使用 VSCode 直接编译官方基础工程,完成第一次编译并用 ST-Link 烧录到开发板。


🎯本页目标编译基础工程生成 `9Mod_MCPBorad.bin` 固件,并用 ST-Link 下载到开发板。
🧰前置条件① 已完成 [软件安装(Windows)](./software-setup-win)(VSCode、工具链均就绪)② 已完成 [STM32 工程创建(Windows)](./cmake-project-win)。
🔗相关章节工程配置完成后,进入 [emMCP 移植(Windows)](./emmcp-porting-win) 接入 AI 通信框架。
第一次编译

在基础工程目录 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"
)

CMakeLists.txt 末尾追加 POST_BUILD

保存即可,之后的每次编译都会自动生成 9Mod_MCPBorad.bin

在基础工程目录 DOCS_TEST1 下,有两种编译方式:

方法一:VSCode CMake 插件图形化编译(推荐)

  1. 点击 VSCode 左侧活动栏的 CMake 图标(CMake Tools 插件)。

    CMake 插件图标

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

    CMake 构建预设 Debug

  3. 点击 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.elf9Mod_MCPBorad.bin9Mod_MCPBorad.hex 三个文件(.bin/.hex 由 POST_BUILD 自动生成)。

产物名来自 CMakeLists.txtset(CMAKE_PROJECT_NAME 9Mod_MCPBorad),本教程所有命令均按此产物名编写。

下载程序到开发板(烧录)

接线:ST-Link 与开发板通过 SWD 连接,对应关系如下:

ST-Link 开发板 说明
SWDIO PA13 数据线
SWCLK PA14 时钟线
GND GND 共地
3.3V 3.3V(可不接) 板子自身供电时可不接

ST-Link 接线图

确认 ST-Link 被 Windows 识别(Windows 直连,无需映射)

Windows 下 ST-Link 插上即被系统识别(OpenOCD 直接访问,不需要任何映射):

  1. 把 ST-Link 的 USB 插到电脑(开发板按接线表连好)。
  2. 打开设备管理器(Win+X → 设备管理器),应能看到 STLink dongle 设备。
  3. 若显示黄色感叹号,说明驱动没装好:安装 STM32 ST-LINK Utility 或从 ST 官网装 ST-Link 驱动。

烧录(VSCode Cortex-Debug 图形化,已装插件)

  1. 在工程根目录创建 .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"
            }
        ]
    }
    

    F5 烧录调试

  2. 在 VSCode 底部栏(状态栏)点击 “烧录并调试 STM32F103 (OpenOCD)” 按钮 → 自动启动 OpenOCD、连接 ST-Link、把固件烧入芯片。

    VSCode 底部栏烧录按钮

  3. 烧录完成后程序停在 main(),点击调试控制栏的 继续 按钮运行程序;也可以先在代码里打断点再启动,进行在线调试。

烧录完成后,板子会运行固件:OLED 显示欢迎页、灯带渐变动画(后续章节逐步加入功能)。

烧录完成板子运行效果

验证下载成功
  1. 看屏幕:OLED 应显示 “欢迎使用”“九章开发板” 两行文字(官方基础工程的欢迎页)。

    OLED 欢迎页

  2. 看串口日志:用串口助手(SSCOM/XCOM,软件安装步骤⑦已装)连接 USB 线对应的 COM 口(USART1 调试口),波特率 1500000,应看到每秒刷新一次的温湿度日志:

    [INFO] sht3x_read_task:234: sht30: 29 C,52 %
    

    温度湿度数值随环境变化。出现该日志说明固件运行正常、SHT30 传感器通信正常。

    串口温湿度日志

  3. 串口中还可看到初始化日志:[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 ninjaNinja 未安装或不在 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 设备正常显示。

下一步

← 上一步STM32 工程创建(Windows)
📄 当前:编译和下载工程(Windows 环境)
下一步 →emMCP 移植(Windows)

Released under the MIT License. Build Time 2026-08-07 22:59:19