<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>HangChen.com</title><description>Having received gentleness, I wish to pass it on.</description><link>https://hangchen.pages.dev/</link><language>en</language><item><title>Windows 下 VSCode + MSYS2 + GCC ARM + Ozone 通用 STM32 开发环境搭建</title><link>https://hangchen.pages.dev/posts/stm32-dev-env-setup/</link><guid isPermaLink="true">https://hangchen.pages.dev/posts/stm32-dev-env-setup/</guid><description>基于香港科技大学 ENTERPRIZE 战队方案，用 VSCode + MSYS2 + GCC ARM + Ozone 搭建通用 STM32 裸机开发环境，适用于所有 Cortex-M 系列</description><pubDate>Tue, 08 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;前言&lt;/h2&gt;
&lt;p&gt;本文基于香港科技大学ENTERPRIZE战队的电控开发环境《Environment Setup WinOS》。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;MSYS2&lt;/strong&gt;：Windows 平台下的类 Unix 环境，提供 &lt;code&gt;make&lt;/code&gt; 与 Shell 终端&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GCC ARM-None-Eabi&lt;/strong&gt;：ARM 官方交叉编译器，编译裸机固件&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SEGGER Ozone + J-Link&lt;/strong&gt;：烧录与在线调试工具&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;整套方案适用于所有 &lt;strong&gt;ARM Cortex-M 内核的 STM32 项目&lt;/strong&gt;（F0/F1/F3/F4/F7/H7/L 等全系列），尤其适合 Makefile 构建的工程，支持高度定制化编译与调试。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;一、工具链总览&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;组件&lt;/th&gt;
&lt;th&gt;作用&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Visual Studio Code&lt;/td&gt;
&lt;td&gt;代码编辑、终端集成、插件扩展&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MSYS2&lt;/td&gt;
&lt;td&gt;提供 Bash 终端、&lt;code&gt;make&lt;/code&gt; 构建工具、包管理器&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;mingw-w64-arm-none-eabi-toolchain&lt;/td&gt;
&lt;td&gt;ARM 裸机交叉编译器，将 C/C++ 编译为 STM32 可执行固件&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;J-Link Driver&lt;/td&gt;
&lt;td&gt;J-Link 调试器 Windows 驱动&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ozone&lt;/td&gt;
&lt;td&gt;SEGGER 官方调试软件，负责固件烧录、断点调试、寄存器查看&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;STM32CubeMX（可选）&lt;/td&gt;
&lt;td&gt;STM32 引脚与外设图形化配置，生成初始化代码&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr /&gt;
&lt;h2&gt;二、基础环境安装&lt;/h2&gt;
&lt;h3&gt;1. 安装 VS Code&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;前往 &lt;a href=&quot;https://code.visualstudio.com/&quot;&gt;VS Code 官网&lt;/a&gt; 下载安装包并安装；&lt;/li&gt;
&lt;li&gt;可选：在插件市场搜索 &lt;strong&gt;Chinese (Simplified)&lt;/strong&gt; 安装中文语言包；&lt;/li&gt;
&lt;li&gt;推荐安装插件：C/C++ Extension Pack、Material Icon Theme。&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;已安装则跳过，确保能正常打开工程目录即可。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;2. 安装 MSYS2 与 ARM 编译工具链&lt;/h3&gt;
&lt;p&gt;MSYS2 是 Windows 下的类 Linux 环境，我们通过它安装 &lt;code&gt;make&lt;/code&gt; 和 ARM 交叉编译器。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;前往 &lt;a href=&quot;https://www.msys2.org/&quot;&gt;MSYS2 官网&lt;/a&gt; 下载安装包&lt;/li&gt;
&lt;li&gt;打开 &lt;strong&gt;MSYS2 MSYS&lt;/strong&gt; 终端，先更新包管理器：&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;pacman -Suy
&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;安装构建工具与 ARM 裸机编译工具链：&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;pacman -S make mingw-w64-x86_64-toolchain mingw-w64-x86_64-arm-none-eabi-toolchain
&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;安装过程中提示选择包时，直接回车默认全部安装即可。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;3. 配置系统环境变量&lt;/h3&gt;
&lt;p&gt;将 MSYS2 的可执行文件路径加入系统 Path，让 Windows 全局可识别 &lt;code&gt;make&lt;/code&gt;、&lt;code&gt;arm-none-eabi-gcc&lt;/code&gt; 等命令。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Windows 搜索「&lt;strong&gt;编辑系统环境变量&lt;/strong&gt;」并打开；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;点击「环境变量」，在&lt;strong&gt;系统变量&lt;/strong&gt;中找到 &lt;code&gt;Path&lt;/code&gt;，点击「编辑」；&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;image-20260523091750962.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;新建两条路径（根据你的 MSYS2 实际安装目录修改）：&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;C:\msys64\mingw64\bin
C:\msys64\usr\bin
&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;全部确定保存，重启终端生效。&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;验证：打开 cmd 输入 &lt;code&gt;make -v&lt;/code&gt; 和 &lt;code&gt;arm-none-eabi-gcc -v&lt;/code&gt;，输出版本信息即配置成功。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;三、调试烧录工具安装&lt;/h2&gt;
&lt;h3&gt;1. 安装 J-Link 驱动&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;前往 &lt;a href=&quot;https://www.segger.com/downloads/jlink/&quot;&gt;SEGGER 官网&lt;/a&gt; 下载 J-Link Software and Documentation Pack；&lt;/li&gt;
&lt;li&gt;安装完成后，将 J-Link 连接电脑，打开「设备管理器」；&lt;/li&gt;
&lt;li&gt;正常情况下会出现 &lt;code&gt;SEGGER J-Link&lt;/code&gt; 设备，若显示黄色感叹号或未知设备，需重新安装驱动。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;2. 安装 Ozone 调试软件&lt;/h3&gt;
&lt;p&gt;Ozone 是 SEGGER 推出的专门用于嵌入式调试的软件，界面简洁、调试功能强大，完美支持 J-Link。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;同样在 SEGGER 官网下载 Ozone 安装包并安装；&lt;/li&gt;
&lt;li&gt;首次打开可选择界面主题，后续新建工程即可使用。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;3. STM32CubeMX（可选）&lt;/h3&gt;
&lt;p&gt;用于图形化配置 STM32 引脚、时钟、外设，生成 HAL 库初始化代码。可直接从 ST 官网下载，本文不赘述安装步骤。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;四、VS Code 集成 MSYS2 终端&lt;/h2&gt;
&lt;p&gt;默认 VS Code 终端是 PowerShell/cmd，我们需要把 MSYS2 Bash 终端集成进来，直接在 VS Code 里编译工程。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在 VS Code 中按 &lt;code&gt;Ctrl + Shift + P&lt;/code&gt;，输入并选择：&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;Preferences: Open Settings (JSON)
&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;在配置中加入以下终端配置（&lt;strong&gt;注意 &lt;code&gt;path&lt;/code&gt; 路径替换为你本机 MSYS2 的 bash.exe 实际路径&lt;/strong&gt;）：&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;{
    &quot;terminal.integrated.profiles.windows&quot;: {
        &quot;MSYS2 MINGW64&quot;: {
            &quot;path&quot;: &quot;C:/msys64/usr/bin/bash.exe&quot;,
            &quot;args&quot;: [
                &quot;-login&quot;
            ],
            &quot;env&quot;: {
                &quot;MSYSTEM&quot;: &quot;MINGW64&quot;,
                &quot;CHERE_INVOKING&quot;: &quot;1&quot;,
                &quot;MSYS2_PATH_TYPE&quot;: &quot;inherit&quot;
            },
            &quot;icon&quot;: &quot;terminal-bash&quot;
        }
    },
    &quot;terminal.integrated.defaultProfile.windows&quot;: &quot;MSYS2 MINGW64&quot;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;保存后，按 &lt;code&gt;Ctrl + Shift + P&lt;/code&gt; 执行 &lt;code&gt;Developer: Reload Window&lt;/code&gt; 重启 VS Code；&lt;/li&gt;
&lt;li&gt;按下 &lt;code&gt;Ctrl + \`` 打开终端，下拉列表中出现 &lt;/code&gt;MSYS2 MINGW64` 即配置成功。&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;h2&gt;五、Makefile 工程编译配置（核心）&lt;/h2&gt;
&lt;p&gt;STM32 属于&lt;strong&gt;无操作系统的裸机环境&lt;/strong&gt;，直接使用标准 C++ 库会报错（&lt;code&gt;freestanding mode&lt;/code&gt; 错误），需要在 Makefile 中配置裸机编译参数。&lt;/p&gt;
&lt;h3&gt;关键编译参数说明&lt;/h3&gt;
&lt;p&gt;在你的 Makefile 中，找到 &lt;code&gt;CPPFLAGS&lt;/code&gt;（C++ 编译选项）部分，&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;image-20260523092951850.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;添加或修改为以下内容：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# C++ 编译选项（裸机环境配置）
CPPFLAGS = $(C_DEFS) $(C_INCLUDES) $(CPPSTD) $(COMPILERFLAGS)
CPPFLAGS += -fno-exceptions             # 禁用 C++ 异常（裸机无操作系统支持）
CPPFLAGS += -fno-rtti                    # 禁用运行时类型信息（减少固件体积）
CPPFLAGS += -fno-threadsafe-statics     # 禁用线程安全静态变量初始化
CPPFLAGS += -nostdinc++                  # 不包含 C++ 标准库头文件
CPPFLAGS += -nostdlib++                  # 不链接 C++ 标准库
CPPFLAGS += -D_GLIBCXX_HOSTED            # GCC 13+ 兼容：允许 freestanding 模式使用部分头文件
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;为什么要这么配置？&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;嵌入式裸机没有操作系统，&lt;strong&gt;无法支持完整 C++ 标准库&lt;/strong&gt;（依赖系统调用）；&lt;/li&gt;
&lt;li&gt;异常、RTTI 会大幅增加固件体积和运行开销，嵌入式开发通常禁用；&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-nostdinc++&lt;/code&gt; + &lt;code&gt;-D_GLIBCXX_HOSTED&lt;/code&gt; 组合是 GCC 高版本解决 &lt;code&gt;freestanding mode&lt;/code&gt; 头文件报错的标准方案。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2&gt;六、工程编译与构建&lt;/h2&gt;
&lt;h3&gt;1. 打开工程&lt;/h3&gt;
&lt;p&gt;在 VS Code 中打开你的 STM32 工程根目录（Makefile 所在目录）。&lt;/p&gt;
&lt;h3&gt;2. 切换终端目录&lt;/h3&gt;
&lt;p&gt;打开 MSYS2 终端，使用 &lt;code&gt;cd&lt;/code&gt; 命令进入 Makefile 所在目录，例如：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cd /c/Projects/STM32_Project
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3. 执行编译&lt;/h3&gt;
&lt;p&gt;直接输入 &lt;code&gt;make&lt;/code&gt; 开始编译：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;make
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;若工程需要传入自定义宏（如硬件版本、型号选择），可通过参数传入：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;make -j HARDWARE_VERSION=V102
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-j&lt;/code&gt;：开启多线程编译，提升速度&lt;/li&gt;
&lt;li&gt;&lt;code&gt;HARDWARE_VERSION=V102&lt;/code&gt;：向代码传入自定义宏，根据你的项目需求修改&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;4. 编译产物&lt;/h3&gt;
&lt;p&gt;编译成功后，会在工程 &lt;code&gt;build&lt;/code&gt; 目录下生成 &lt;code&gt;.elf&lt;/code&gt;、&lt;code&gt;.hex&lt;/code&gt;、&lt;code&gt;.bin&lt;/code&gt; 固件文件，其中 &lt;code&gt;.elf&lt;/code&gt; 用于后续 Ozone 调试烧录。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;七、Ozone 烧录与在线调试&lt;/h2&gt;
&lt;h3&gt;1. 硬件连接&lt;/h3&gt;
&lt;p&gt;用 J-Link 调试器连接 STM32 板卡的 SWD/JTAG 调试接口，接通板卡电源。&lt;/p&gt;
&lt;h3&gt;2. 新建 Ozone 工程&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;打开 Ozone，点击「New Project」；&lt;/li&gt;
&lt;li&gt;选择你的 STM32 芯片型号（如 STM32F334C8、STM32F407IG 等）；&lt;/li&gt;
&lt;li&gt;下载对应芯片的 &lt;code&gt;.svd&lt;/code&gt; 外设描述文件（可从 ST 官网获取，Ozone 也会自动匹配下载）；&lt;/li&gt;
&lt;li&gt;在「Peripherals」选项中加载 &lt;code&gt;.svd&lt;/code&gt; 文件，用于调试时查看外设寄存器。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;3. 加载固件&lt;/h3&gt;
&lt;p&gt;在工程设置中，选择编译生成的 &lt;code&gt;.elf&lt;/code&gt; 文件路径：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;工程目录/build/目标文件名.elf
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;4. 烧录与调试&lt;/h3&gt;
&lt;p&gt;点击 Ozone 左上角绿色下载按钮，即可将固件烧录到 STM32 中；烧录完成后可设置断点、单步运行、查看寄存器与变量，调试体验与商业 IDE 一致。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;八、常见问题排错&lt;/h2&gt;
&lt;h3&gt;1. VS Code 不显示 MSYS2 终端&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;检查 &lt;code&gt;settings.json&lt;/code&gt; 中 &lt;code&gt;path&lt;/code&gt; 路径是否正确，注意使用正斜杠 &lt;code&gt;/&lt;/code&gt;；&lt;/li&gt;
&lt;li&gt;执行 &lt;code&gt;Developer: Reload Window&lt;/code&gt; 重启 VS Code；&lt;/li&gt;
&lt;li&gt;确认 MSYS2 安装目录下存在 &lt;code&gt;usr/bin/bash.exe&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;2. 编译报错：&lt;code&gt;This header is not available in freestanding mode&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;原因：裸机环境引用了 C++ 标准库头文件；&lt;/li&gt;
&lt;li&gt;解决：确保 Makefile 中添加了 &lt;code&gt;-nostdinc++&lt;/code&gt; 和 &lt;code&gt;-D_GLIBCXX_HOSTED&lt;/code&gt; 参数。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;3. &lt;code&gt;make&lt;/code&gt; 命令不是内部或外部命令&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;原因：系统环境变量 Path 配置错误；&lt;/li&gt;
&lt;li&gt;解决：检查 &lt;code&gt;C:\msys64\usr\bin&lt;/code&gt; 是否已加入系统 Path，配置后重启终端。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;4. J-Link 设备管理器显示黄色感叹号&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;重新安装 J-Link 驱动；&lt;/li&gt;
&lt;li&gt;更换 USB 接口，优先使用 USB 3.0 以下接口；&lt;/li&gt;
&lt;li&gt;检查 J-Link 固件是否需要更新。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;5. Ozone 无法识别芯片&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;检查硬件连接、板卡是否上电；&lt;/li&gt;
&lt;li&gt;确认芯片型号选择正确；&lt;/li&gt;
&lt;li&gt;降低 JTAG/SWD 通信速率。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2&gt;写在最后&lt;/h2&gt;
&lt;p&gt;感谢香港科技大学ENTERPRIZE战队在开源社区做出的贡献！&lt;/p&gt;
&lt;p&gt;参考：
[1] 《Environment Setup WinOS》&lt;/p&gt;
&lt;p&gt;如果文章对你有帮助，欢迎在评论区交流讨论。&lt;/p&gt;
</content:encoded></item></channel></rss>