新闻详情

新闻详情

首页 / 资讯中心 / 详情

VS Code + STM32 嵌入式开发环境搭建:从 Keil 迁移到 AI 编程

发布时间:2026/9/14 16:43:16来源:尧图网络
VS Code + STM32 嵌入式开发环境搭建:从 Keil 迁移到 AI 编程
我从 Keil 转到 VS Code 折腾嵌入式开发算起来也有几年了。期间踩过不少坑也积累了一些经验。最近不少朋友在问“如何利用 AI 开发嵌入式软件”问的最多的就是环境怎么搭。这篇就专门聊聊 VS Code 与 STM32 扩展工具的安装配置把那些文档里不写、但实测很关键的细节都摊开说。无论你是刚入门的新手还是想从 Keil 迁移的老手看完这篇都能把环境跑起来为后面用 AI 辅助写代码打好基础。1. 为什么是 VS Code从 Keil 迁移到现代编辑器的理由1.1 嵌入式开发环境的“代差”问题很多嵌入式开发者一直用 Keil MDK 或 IAR用久了会觉得 VS Code 是个“花架子”。但实际对比下来两者在开发效率上的差距是实打实的。Keil 作为一个老牌 IDE强项在编译器和调试器的整合度但它的代码编辑体验还停留在十年前——补全慢、跳转笨、主题丑更别提对 AI 编程工具的支持。而 VS Code 本身是一款编辑器通过扩展机制变成 IDE在代码阅读、搜索、重构方面明显更顺手。我做了一个简单的对比表大家可以直观感受一下维度Keil MDKSTM32CubeIDEVS Code代码跳转与补全一般量大时会卡中等流畅配合 Clangd 效果极佳扩展生态极少少海量覆盖编译、调试、AI 编程AI 插件支持基本没有有限GitHub Copilot、通义灵码、Kimi 等均可接入工程文件兼容Keil 工程uvprojx自家工程通过 CMake 或扩展兼容各工具链界面自定义基本不能有限高度可定制这里不是要全盘否定 Keil它在某些传统企业项目中依然是主力。但如果你做的是新项目、个人项目或者想尝试 AI 编程来提升效率VS Code 是最平滑的入口。1.2 这套组合对 AI 编程意味着什么标题里有个关键词是“AI 编程”这跟 VS Code 的组合是分不开的。现在主流的 AI 编程插件比如 GitHub Copilot、通义灵码、Codex 等几乎都以 VS Code 为首选宿主。嵌入式开发虽然有硬件门槛但用 AI 辅助生成初始化代码、外设驱动、处理寄存器配置等场景确实能省掉不少体力活。不过嵌入式 AI 编程有个特点AI 生成的代码通常不能直接用它需要结合芯片手册、固件库版本、工具链特性来修正。所以你的开发环境首先要干净、可控、可复现——VS Code 加 STM32 扩展正好能提供这样的基础。装好环境之后后面讲 AI 提示词、skill、agent 的内容才有落地的土壤。2. VS Code 本体安装版本选择与关键选项2.1 下载版本怎么选User Installer 还是 System InstallerVS Code 官方下载页面提供两种 Windows 安装包User Installer 和 System Installer。很多人直接点第一个下载其实这里有个讲究。User Installer 安装到当前用户目录不需要管理员权限适合公司电脑或权限受限的环境System Installer 装到 Program Files所有用户都能用适合个人主力机。我建议个人电脑无脑选 System Installer因为后续装 STM32 工具链、配置系统 PATH 时会少一些权限问题。官方下载地址是 code.visualstudio.com打开后页面会自动识别系统。需要留意的是系统架构——现在大多数电脑是 x64但如果你用的是 ARM 版的 Windows比如一些平板或新款轻薄本要手动选 ARM64 版本。选错架构的后果是扩展市场里部分插件装不上甚至整个编辑器运行异常这个坑我帮不少朋友排查过。2.2 安装向导里三个不能忽略的勾选项VS Code 的安装过程本身很简单一路 Next 就能装完但有几个选项建议按下面的方式勾选“添加到 PATH”这个必须勾。它会帮你创建 code 命令的软链接后面在终端里输 code 就能直接打开项目目录配合 Git Bash 或 PowerShell 经常用到。“通过 Code 打开”操作建议勾上两个文件和目录。这样在文件管理器里右键就能直接打开项目省掉先开 VS Code 再找文件夹的环节。“将 Code 注册为受支持的文件编辑器”看个人习惯。我用 VS Code 打开了太多类型的文件这个注册反而会让某些默认关联变乱所以不勾。安装完成后首次启动会进入欢迎页。这时候建议先按CtrlShiftP打开命令面板输入 “install” 找到 “Install code command in PATH”再确认一下环境变量是否生效。有时候勾了选项但 PATH 没刷新重启终端或重新登录就能解决。2.3 装完第一件事界面语言与基础设置VS Code 默认界面是英文的对部分朋友不友好。装中文语言包很简单扩展市场搜索 “Chinese Language Pack”安装后右下角会提示重启重启后就变成中文界面。不过我个人建议是保留英文界面配合中文输入法使用因为很多嵌入式报错信息、官方文档都是英文早适应对搜索问题有帮助。还有一个值得提前改的设置files.autoGuessEncoding自动猜测文件编码。嵌入式项目里老工程师的代码常是 GBK/GB2312 编码VS Code 默认按 UTF-8 打开会乱码。在设置里搜 “encoding”勾选 “Auto Guess Encoding” 之后打开陌生文件基本不会再看到乱码。这个细节对打开老项目特别实用。3. STM32 扩展工具链三件套的关系与安装3.1 官方扩展 STM32 VS Code Extension 到底管什么在 VS Code 扩展市场搜索 “STM32”会看到名字带 “STM32 VS Code Extension” 的官方扩展发布者是 STMicroelectronics。这个扩展不是简单的高亮支持它把 STM32 的整个开发闭环——芯片选择、代码生成、编译、烧录、调试——都整合到了 VS Code 里。很多新手有个误区以为装了官方扩展就万事大吉。其实这个扩展是一个“壳”背后依赖两样东西STM32CubeMX 和 STM32CubeCLT。打个比方CubeMX 是画图纸的设计师负责帮你配置引脚、时钟、外设并生成初始化代码CubeCLT 是施工队负责把代码编译成可烧录的 bin/hex并执行烧录和调试。VS Code 扩展则是项目经理把你和这两者连接起来。# 安装官方扩展后依赖关系大致如下 STM32 VS Code Extension ├── 依赖 STM32CubeMX用于创建和配置工程 ├── 依赖 STM32CubeCLT用于编译、烧录、调试 └── 可选依赖 C/C 扩展用于代码智能提示与调试适配3.2 在扩展市场里一次装齐的清单在 VS Code 扩展市场里除了官方 STM32 扩展还有几个建议一并装上的插件。我自己常用的是这套组合扩展名发布者作用STM32 VS Code ExtensionSTMicroelectronicsSTM32 工程管理、编译、烧录、调试入口C/CMicrosoft提供 IntelliSense、调试、代码浏览CMake ToolsMicrosoftCMake 工程配置与构建许多 STM32 模板工程都基于 CMakeArm Assemblydan-c-underwoodARM 汇编语法高亮Cortex-Debugmarus25更细粒度的 ARM 调试视图进阶可用Serial MonitorMicrosoft串口监视调试 printf 输出必备GitHub Copilot 或通义灵码各厂商AI 编程插件后续文章的主角这些插件都在扩展市场的“搜索栏”里一键安装不需要手动下载 VSIX。唯一要留意的是C/C 扩展安装后第一次打开工程会弹窗让你选择“IntelliSense 模式”建议选择linux-gcc-arm或windows-gcc-arm取决于你的使用环境这样寄存器定义、固件库头文件的补全才会准确。3.3 STM32CubeCLT 的安装细节与版本匹配STM32CubeCLTCommand Line Toolset是 ST 官方提供的命令行工具集包含编译器、OpenOCD、STM32CubeProgrammer 的 CLI 版本等。它的安装路径建议保持默认。安装完成后需要把它加进系统 PATH 环境变量否则 VS Code 扩展找不到工具链。一个容易踩的坑是版本匹配问题。如果你发现扩展提示 “CubeCLT version not supported” 之类的错误先别急着换工具集版本去扩展主页确认一下它要求的 CubeCLT 版本范围。官方扩展更新频率不算快它的兼容矩阵通常滞后于 CubeCLT 的新版本发布沿用较早的稳定版本反而更省心。CubeMX 的安装相对简单从 ST 官网下载安装包即可。装完最好手动打开一次确认能正常加载芯片支持包。如果你的网络环境下载固件包很慢可以在 CubeMX 的 “Manage embedded software packages” 里单独勾选需要的系列比如 STM32F1、STM32F4不用全量下载省时间也省硬盘。4. 从零搭一个 STM32 工程并编译完整实操记录4.1 用扩展初始化一个 STM32 工程这里我用一块非常常见的 STM32F103C8T6 最小系统板来做演示也就是大家常说的“蓝板”。先确保 ST-Link 或 USB-TTL 驱动已装好然后打开 VS Code按CtrlShiftP调出命令面板搜索 “STM32”选择 “STM32: Create Project” 或类似命令这会唤起 STM32CubeMX 的处理流程。在弹出的 CubeMX 窗口中先选芯片型号。我输入 STM32F103C8 搜索选中实际对应的 LQFP48 封装芯片。接着配置时钟树在 RCC 选项卡将 HSE 设为 Crystal/Ceramic Resonator在 Clock Configuration 里把 HCLK 拉高到 72MHzF103 的最高频率系统会自动计算各个总线的分频系数。如果这里不知道该怎么配直接保持默认也行后面用代码改也来得及。外设配置要看你的需求。我这里只开了 USART1PA9/PA10作为调试串口速率 115200然后配了一个 LED 输出引脚PC13蓝板上常见的板载 LED。第二步在左侧 Project Manager 页面里把“Toolchain / IDE”选成 “CMake”这个步骤很重要VS Code 扩展依赖 CMake 工程结构。4.2 第一次编译会卡在哪依赖下载与固件包点击生成代码后CubeMX 会在指定目录生成工程文件。回到 VS Code用“打开文件夹”的方式打开这个工程目录。扩展会识别到 CMakeLists.txt 并提示配置工程。点击右下角出现的“配置”按钮或无脑接受默认设置就好。这里最耽误时间的环节是首次编译——扩展可能需要联网下载 CMake、Ninja 等构建工具链以及 STM32 的固件支持包。编译入口有三个状态栏的“生成”按钮、命令面板里的 “STM32: Build”或者直接按CtrlShiftB。集成终端里能看到编译日志最后出现 Built target xxx 就说明编译成功。我实测在这个步骤里遇到最多的报错是找不到固件包比如STM32F1xx HAL driver not found解决办法是回到 CubeMX 的软件包管理页面把 F1 系列的支持包补装上然后重新生成代码。编译成功后工程目录下应该多了 build 文件夹里面能找到编译产物.elf和.bin文件。4.3 烧录和调试launch.json 的配置思路烧录有很多种方式。最简单的是用扩展自带的烧录功能在 STM32 扩展的视图面板里找到 “Flash” 或 “Download” 按钮前提是 ST-Link 已连接且扩展能找到 OpenOCD。跑起来之后如果 LED 闪烁、串口输出正常就说明整个环境已经通了。调试配置属于进阶操作我建议首次先摸清烧录再研究调试。调试需要新建一个.vscode/launch.json文件我这里给一个可用的基础配置示例{ version: 0.2.0, configurations: [ { name: STM32 Debug, type: cortex-debug, request: launch, servertype: openocd, cwd: ${workspaceRoot}, executable: ${workspaceFolder}/build/xxx.elf, device: STM32F103C8, configFiles: [ interface/stlink.cfg, target/stm32f1x.cfg ], svdFile: ${workspaceFolder}/xxx.svd } ] }这里几个参数需要注意executable路径要和实际编译产物匹配configFiles里的 openocd 配置文件是否写对直接决定调试器能不能找到芯片svdFile是外设寄存器描述文件写好之后调试时能看到寄存器位的实时数值非常实用。SVD 文件可以在 ST 官方固件包或 GitHub 上找到也可以从 CubeMX 生成的 DebugConfig 里复制。4.4 用命令行和脚本验证整个工具链有时候图形界面出问题了反而命令行是最顺手的排查方式。装好 STM32CubeCLT 后可以直接在终端里验证工具链是否工作正常。我通常在 PowerShell 或 Git Bash 里执行这么几条命令# 检查编译器和调试器版本 arm-none-eabi-gcc --version # 检查 OpenOCD 是否可调用 openocd --version # 直接用命令行烧录以 STM32F103C8 为例 STM32_Programmer_CLI -c portSWD modeUR -w build/xxx.bin 0x08000000 -v如果 arm-none-eabi-gcc 提示找不到命令那就是 PATH 没配置对回到系统环境变量里检查 CubeCLT 的 bin 目录是否已加进去。STM32_Programmer_CLI 烧录时0x08000000是 STM32 内部 Flash 的起始地址这是后续脚本化编译烧录的基础信息。5. 常见问题与排查技巧实录5.1 扩展反复提示找不到工具链怎么办这个问题在我帮别人排查时出现频率最高。现象是扩展面板里 Toolchain 路径一直显示红色编译按钮置灰。排查顺序建议是这样确认 STM32CubeCLT 真的装好了在终端里敲arm-none-eabi-gcc --version。确认环境变量 PATH 里有 CubeCLT 的 bin 目录。重启 VS Code注意是完全退出再打开有时重载窗口不够。在扩展设置里手动浏览并指定 CubeCLT 路径。如果以上都不行大概率是权限问题。System Installer 安装在 Program Files 下时VS Code 以非管理员身份运行可能会访问受限。这种情况可以给 VS Code 的快捷方式勾选“以管理员身份运行”或者干脆把 CubeCLT 卸载后改用 User 模式重装到你自己的用户目录下面。5.2 代码补全飘红与 IntelliSense 失灵的真相VS Code 里打开工程后如果头文件狂飘红线比如 stdint.h、stm32f1xx_hal.h 找不到这通常不是文件真丢了而是 IntelliSense 的头文件搜索路径没配置好。解决办法是修改.vscode/c_cpp_properties.json文件把固件库的 Include 路径加进去。下面是实测可用的一段配置{ configurations: [ { name: STM32, includePath: [ ${workspaceFolder}/**, ${workspaceFolder}/Core/Inc, ${workspaceFolder}/Drivers/STM32F1xx_HAL_Driver/Inc, ${workspaceFolder}/Drivers/CMSIS/Device/ST/STM32F1xx/Include, ${workspaceFolder}/Drivers/CMSIS/Include ], defines: [ USE_HAL_DRIVER, STM32F103xB ], compilerPath: arm-none-eabi-gcc, cStandard: c11, cppStandard: c17 } ], version: 4 }这个配置里最容易写错的是defines。STM32F103C8 对应的是STM32F103xB不是STM32F103xE写错后部分条件编译的代码段会直接消失或报错。另外如果用了 CMake Tools 扩展也可以在 CMake 配置正确后让扩展自动生成 c_cpp_properties.json基本能避免手写路径时的一系列问题。5.3 串口乱码和烧录失败这类硬件坑软件环境搭好之后最磨人的其实是硬件相关的小毛病。串口输出乱码是新手最常遇到的现象是 printf 打印的中文变成乱码或者英文字符都在但格式错乱。排查时先确认串口助手的波特率和代码里的一致常见 115200 或 460800其次检查代码里是否开启了 “Use MicroLIB”。如果用的是 GCC 工具链MicroLIB 不适用需要在代码中用__io_putchar重定向_write函数否则 printf 根本没输出。烧录失败的问题也常见。现象是 OpenOCD 报 “target not found” 或 “can’t connect to target”可以依次排查ST-Link 的驱动是否装好用STM32_Programmer_CLI -c portSWD先测试连接、芯片的 BOOT0 引脚是否拉低拉高会进入 ISP 模式导致 SWD 连不上、板子供电是否稳定、调试线是否需要缩短。这里我个人体会是遇到奇怪问题时先用 CubeProgrammer 的图形界面连一次它给出的错误信息更直观能帮你快速区分是驱动问题、接线问题还是芯片锁定问题。5.4 AI 辅助编程在嵌入式场景的“水土不服”最后聊一个和标题里“AI 编程”直接相关的经验。AI 插件装好后很多人会发现它在嵌入式场景下并没有纯软件领域那么“神”。原因主要有三个第一嵌入式工程里大量代码来自 CubeMX 自动生成AI 很难基于整个工程上下文正确理解这些代码之间的依赖关系经常给出与 HAL 库版本不匹配的 API 调用。第二AI 生成的代码往往按照桌面端开发习惯来写比如直接 malloc 大块内存、无限阻塞延时在 MCU 上极易踩坑。第三代码里涉及的寄存器地址、中断向量、链接脚本AI 模型训练数据里不一定覆盖完整生成结果偶尔会有看似正确实则错误的情况。我的建议是把 AI 定位成“高级代码助手”而不是“自动编程机器”。让它帮你生成初始化函数、处理重复性外设驱动的框架、编写注释、做代码审查这几类任务的可靠性很高。涉及底层时序、中断优先级的逻辑建议自己把关。用 AI 之前最好把工程背景、芯片型号、HAL 版本等关键信息明确地写在提示词里这个习惯能让输出准确率提高一截。6. 安装完成后的第一份配置清单环境搭完不是终点顺手把这些配置做了后面开发会顺畅很多。我把值得保存的配置整理成一份清单方便大家对照检查配置项推荐值作用编码检测Auto Guess Encoding避免老工程打开乱码C/C IntelliSense 模式linux-gcc-arm 或 windows-gcc-arm确保寄存器与 HAL 补全准确格式化工具使用 clang-format可在 CubeMX 代码里启用统一代码风格AI 生成代码后一键格式化串口监视波特率与工程代码一致调试信息真实可读CMake 构建目录build与调试配置、gitignore 保持一致Git 初始化工程目录下 git init版本管理AI 改动可回滚还有一个小技巧在工程根目录建一个.vscode/settings.json把排除构建目录写进去避免搜索和跳转时被 build 文件夹里的生成文件干扰。配置内容是files.exclude: { build/: true }和search.exclude: { build/: true }虽然只是小事但对日常效率的提升非常明显。这套环境我用了很长时间整体稳定度是够的。日常开发中我仍然留着 Keil 作为应急备份但主力已经切到 VS Code。个人项目、学习验证、写外设驱动这套环境都是首选。AI 插件的加持也让重复性的模板代码写得飞快而 STM32 扩展又保证了从配置到烧录的完整闭环。工具永远是工具关键在于你什么时候用、怎么用。希望这篇能帮大家把第一步迈稳后面我会继续写 AI 编程提示词、skill、agent 在嵌入式开发里的实战内容。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

easy-vibe 计算机基础:数据表示原理全解 —— 从字符编码、存储层次到可靠传输的完整链路 2026/9/14 17:28:21

easy-vibe 计算机基础:数据表示原理全解 —— 从字符编码、存储层次到可靠传输的完整链路

easy-vibe 计算机基础:数据表示原理全解 —— 从字符编码、存储层次到可靠传输的完整链路 【免费下载链接】easy-vibe 💻 vibe coding 101|The first course for AI-native product builders. 项目地址: https://gitcode.com/GitHub_Trendi…

阅读更多 →
Garnet 分布式缓存:微软为什么用 .NET 从零重写整个缓存存储栈 2026/9/14 17:28:21

Garnet 分布式缓存:微软为什么用 .NET 从零重写整个缓存存储栈

Garnet 分布式缓存:微软为什么用 .NET 从零重写整个缓存存储栈 【免费下载链接】garnet Garnet is a remote cache-store from Microsoft Research that offers strong performance (throughput and latency), scalability, storage, recovery, cluster sharding, k…

阅读更多 →
Linux BPF 文件系统 kfuncs 详解:BPF LSM 程序如何安全地访问文件数据 2026/9/14 17:28:21

Linux BPF 文件系统 kfuncs 详解:BPF LSM 程序如何安全地访问文件数据

Linux BPF 文件系统 kfuncs 详解:BPF LSM 程序如何安全地访问文件数据 【免费下载链接】linux Linux kernel source tree 项目地址: https://gitcode.com/GitHub_Trending/li/linux BPF LSM 程序在 LSM 钩子中被执行时,常常需要读取文件相关的内核…

阅读更多 →
Windmill Python Client 文档构建指南:基于 pdoc 的 API 文档生成、发布与部署全解析 2026/9/14 17:28:21

Windmill Python Client 文档构建指南:基于 pdoc 的 API 文档生成、发布与部署全解析

Windmill Python Client 文档构建指南:基于 pdoc 的 API 文档生成、发布与部署全解析 【免费下载链接】windmill Open-source developer platform to power your entire infra and turn scripts into webhooks, workflows and UIs. Fastest workflow engine (13x vs…

阅读更多 →
a2ui Express 编译器字符串到数字自动强转(Auto-Coercion)实验复盘:一次被回滚的格式优化迭代 2026/9/14 17:28:21

a2ui Express 编译器字符串到数字自动强转(Auto-Coercion)实验复盘:一次被回滚的格式优化迭代

a2ui Express 编译器字符串到数字自动强转(Auto-Coercion)实验复盘:一次被回滚的格式优化迭代 【免费下载链接】a2ui 项目地址: https://gitcode.com/GitHub_Trending/a2/a2ui 本篇文章基于 a2ui 仓库中迭代式格式优化(It…

阅读更多 →
Bazel 如何用 persistent worker 策略降低编译启动开销? 2026/9/14 17:25:21

Bazel 如何用 persistent worker 策略降低编译启动开销?

Bazel 如何用 persistent worker 策略降低编译启动开销? 【免费下载链接】bazel a fast, scalable, multi-language and extensible build system 项目地址: https://gitcode.com/GitHub_Trending/ba/bazel 当一次构建包含大量编译 action 时,Baz…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞