
嵌入式AI编程这个系列写到第七篇按照课程的节奏前几篇已经把AI辅助编程的思路、代码生成的基本套路都讲完了接下来就要进入真正动手的阶段。磨刀不误砍柴工不管你是准备用AI辅助写STM32的驱动还是打算让模型帮你做代码审查都得先把开发环境跑起来。所以这一篇我们就来解决两件事一是装好VS Code这个编辑器二是把STM32相关的扩展工具链全部配齐。这篇面向的读者很明确就是刚接触嵌入式开发、想从Keil迁移到VS Code生态的小白或者已经在用VS Code但还没配上STM32开发环境的同学建议收藏之后跟着步骤一步步来。先说一个核心观点这套组合选VS Code而不是继续留在Keil不是因为它比Keil更“高级”而是因为VS Code在AI编程这个方向上有着天然的生态优势。AI编程工具包括Codex、Copilot这类大多以VS Code作为首选插件宿主接口成熟、插件调度灵活、终端集成度高这意味着你可以在同一个窗口里完成代码编辑、AI对话、编译烧录、调试GDB全套流程。Keil本身是个优秀的MCU开发工具但在AI辅助编程的整合度上确实明显落后一个身位。这一篇我就以Windows 10/11为操作环境把从下载到编译烧录的完整过程都过一遍顺便把我在实际安装中踩过的坑也整理出来。1. 为什么嵌入式AI编程要选VS Code STM32这套组合1.1 从Keil迁移到VS Code的缘由很多做STM32开发的朋友第一个接触的工具基本都是Keil MDK包括我自己当年也是从Keil开始的。Keil的优势在于集成度高装好即用工程模板、编译器、调试器一站式解决对初学者非常友好。但用到后面特别是在这个AI编程工具爆发的节点上Keil的短板就越来越明显了它的编辑器对AI插件支持极差代码补全用的是老一套的智能感知扩展生态也几乎封闭你想在编辑器里接入一个代码生成插件或者大模型对话助手基本找不到合适的入口。VS Code恰恰相反它是当前编辑器领域插件生态最丰富的一个几乎所有头部AI编程助手都有对应的VS Code插件版本。我在前面几篇里讲到过用AI生成STM32的外设初始化代码如果你还停留在Keil里整个过程是非常割裂的——要在浏览器里打开AI工具再把生成代码拷贝回Keil而迁到VS Code之后AI助手直接挂在侧边栏生成代码一键插入上下文还带着你当前的文件内容这种体验是完全不一样的。所以我个人建议如果你准备长期走嵌入式软件开发这条路越早适应VS Code这套工作流越好。1.2 这套方案解决了哪些痛点VS Code STM32扩展这套组合解决的第一个痛点是工程管理的可视化。Keil的工程树虽然直观但打开大项目时卡顿明显索引速度也慢VS Code配合C/C扩展的IntelliSense在代码跳转、定义查找、全局搜索这些操作上几乎是秒开体验顺滑很多。第二个痛点是编译调试流程的透明化。Keil把编译参数和链接脚本封装在可视化界面里出了问题不太好排查而VS Code通过CMake或Makefile管理构建编译器命令行全部可见报错信息能直接定位到源码行排错效率提升很明显。第三个痛点就是前面说的AI编程能力。STM32的开发有其固定的套路比如GPIO初始化、定时器配置、串口收发、中断服务函数这些重复性很高的代码非常适合用AI来辅助生成。VS Code可以让你在写代码的同时调用AI而不用来回切换窗口深度集成之后你的开发流会顺畅很多。再加上这一篇后面要讲的Cortex-Debug插件编译完直接按F5就能进入GDB调试打断点、看寄存器、看外设状态完全不输IDE体验。2. 端到端安装前的准备工作2.1 确认系统与硬件环境动手安装之前先花两分钟确认一下你的环境。这一篇的步骤以64位Windows 10或Windows 11为准其他系统我只能在后面补充一些要点。硬件方面你至少需要一块STM32开发板常见的有Nucleo系列、STM32F103C8T6最小系统板或者正点原子/野火的各种开发板USB线建议准备两根一根用来供电一根用来下载调试避免反复插拔。磁盘空间方面VS Code本体只有几百兆但加上扩展、ARM GCC工具链和SDK之后建议至少预留10GB空间如果你的项目里还会编译带图形界面的组件比如TouchGFX或者LVGL全套那20GB更稳妥。内存8GB起步16GB比较舒适因为VS Code加上AI插件、加上编译任务同时跑的时候内存占用会明显上升。如果你是用笔记本记得把电源插上编译的时候省电模式可能会导致CPU降频编译速度骤降。另外有一点容易被忽略就是系统的Path变量。后面的安装过程中我们要把ARM GCC、CMake、Git这些工具的路径手动加入Path如果你对Windows环境变量不熟悉在安装过程中就要特别注意我标出来的步骤。千万别跳过不然后面运行命令时系统会提示“不是内部或外部命令”排查起来很浪费时间。2.2 准备需要下载的软件清单在正式开始安装之前我建议你先把下面这些软件全部准备好统一下载到一个文件夹里这样后面的步骤就不会因为临时找下载链接而中断。我自己习惯的做法是建一个D:\Tools\download目录你根据自己的盘符习惯来把安装包都放进去。软件/工具用途官网/获取途径Visual Studio Code主编辑器code.visualstudio.comGit for Windows版本管理与组件下载git-scm.comSTM32CubeMX芯片初始化代码生成st.com (需注册也可用国内镜像)STM32CubeCLT命令行工具集含GCC工具链、烧录工具st.comST-Link驱动调试器PC端驱动st.com或开发板资料包内Cortex-Debug 扩展GDB调试前端VS Code扩展市场C/C 扩展包语言服务与调试支持VS Code扩展市场STM32 VS Code 扩展ST官方VS Code支持VS Code扩展市场这里有一个关键点要提前说明STM32CubeCLT是STM32官方推出的命令行工具集合里面包含了编译器、烧录工具、调试工具是VS Code做STM32开发的基石。早期大家用VS Code做STM32要么自己单独装ARM GCC工具链然后手动配一堆路径要么干脆还是回Keil里面编译。现在有了STM32CubeCLT一条命令就能装完所有底层工具省去很多麻烦。所以我后面的步骤会以STM32CubeCLT为准而不是教你单独去装老旧的arm-none-eabi-gcc。3. VS Code本体安装与基础设置3.1 从官网到安装完成VS Code的安装包下载地址是 code.visualstudio.com打开之后页面会自动识别你的操作系统直接点击Windows下载即可。下载下来的文件名大概长这样VSCodeUserSetup-x64-xxx.exe双击运行。安装路径我建议选择一个非系统盘的自定义目录比如D:\Software\Microsoft VS Code这样重装系统时不会丢配置也方便后续对插件目录做管理。安装向导里大部分默认选项直接下一步就行但有三个复选框需要特别留意一是“将‘使用Code打开’操作添加到Windows资源管理器目录上下文菜单”这个建议勾上以后在项目文件夹上右键就能直接打开VS Code效率高很多二是“将‘使用Code打开’操作添加到Windows资源管理器文件上下文菜单”同样建议勾上三是“将Code注册为受支持的文件类型的编辑器”这个默认勾选即可。至于“添加到PATH”这一步新版VS Code默认就已经勾选了保持打开。装完之后第一次启动VS Code会进入欢迎页左侧是活动栏中间是编辑区底部是状态栏。界面语言默认是英文如果你看着不习惯可以安装中文语言包扩展。安装方法是在扩展视图里搜“Chinese”选择“Simplified Chinese Language Pack”作者是Microsoft点击Install装完会提示重启重启后就变成中文界面了。我这个系列后续的操作截图都会以中文界面为主所以建议你先把语言包装好。3.2 基础设置与功能验证VS Code装好之后先别急着装一堆插件我建议先把几个基础设置调一下这能避免后面很多奇怪的问题。打开设置的方式是左下角齿轮 - Settings或者按快捷键Ctrl ,。在设置搜索框里把“Auto Save”设为afterDelay这样代码会自动保存把“Files: Encoding”设为gbk如果你经常打开别人用Keil建的工程里面源码可能是GBK编码当然如果你只玩Linux串口和标准UTF-8工程保持默认UTF-8也行。另外一个很实用的设置是文件关联。STM32开发中经常会遇到.ioc、.s、.ld、.map这类文件VS Code默认可能不认识它们。你可以在设置里找到Files: Associations添加以下关联*.s-arm*.ld-linkerscript.ioc-xml。这样这些特殊文件就能有正确的语法高亮和折叠了查看链接脚本的时候特别有用。接着验证一下VS Code本身的终端是否能正常使用。按Ctrl \ 打开内置终端输入code --version如果能看到版本号输出说明VS Code的CLI也正常工作。这一步看似多余实际上是在排查你有没有装成便携版或者某些环境变量被篡改的问题提前确认一遍省得后面出岔子。4. STM32扩展工具链的安装与配置4.1 扩展集合C/C、Cortex-Debug与STM32扩展VS Code本体只是一个空壳真正干活的是扩展。我们首先安装三个核心扩展顺序无所谓第一个是C/C Extension Pack微软出品里面包含C/C语言支持、CMake Tools、CMake语言支持等子组件。这个包是VS Code做C/C开发的地基代码补全、语法高亮、调试符号解析全靠它。安装完成后VS Code会自动下载语言服务器首次打开C文件时右下角会弹出一个“配置IntelliSense”的提示可以暂时忽略我们后面统一配置。第二个是Cortex-Debug扩展这是做ARM Cortex-M调试的利器。它基于GDB支持J-Link、ST-Link、OpenOCD等多种调试后端。你大概率会用到它的两个核心能力一个是外设寄存器查看调试时可以直接查看芯片内部各外设的寄存器当前值另一个是RTOS线程显示如果你的工程跑了FreeRTOS或者ThreadX插件能列出当前所有线程状态。这个扩展配合后面的STM32CubeCLT里的GDB Server完整替代Keil的调试功能没有任何问题。第三个是STM32 VS Code Extension这是ST官方近几年推出的VS Code支持扩展全名叫“STM32 VS Code Extension”。它最大的作用是能够在VS Code里直接浏览和导入STM32CubeMX生成的项目同时集成了项目面板、代码模板生成、设备管理器等功能。装上它之后你就不需要为了改一个引脚配置而单独打开CubeMX直接在VS Code侧边栏里操作即可这对AI编程工作流来说非常友好。安装扩展的操作在VS Code里很简单左侧活动栏点扩展图标正方形加四格的那个在搜索框输入扩展名找到对应项点击Install。搜不到的情况下注意检查一下网络环境部分网络环境访问VS Code扩展市场会失败常见的现象是扩展栏一直转圈、搜不出来。如果你遇到这种情况可以试试点右下角的重试按钮或者在系统的hosts文件里加上微软扩展市场的解析记录。这里不做展开后面会给出更详细的排查列表。4.2 工具链STM32CubeCLT、CMake与ST-Link驱动扩展装完只是第一步真正决定能不能编译的是底层的工具链。我前面说过STM32CubeCLT是核心我现在手把手讲一下它的安装过程和注意事项。STM32CubeCLT可以从ST官网下载文件是一个exe安装包体积大概几百MB。安装时要注意它会让你选择组件默认全选就行。组件里面最重要的两部分一个是STM32 GCC Compiler也就是基于arm-none-eabi-gcc的交叉编译器另一个是STM32CubeProgrammer它是ST官方的烧录工具即命令行下的烧录王牌后面用VS Code烧录程序就靠它。安装完成后安装目录下会有一个STM32CubeProgrammer子目录里面还有调试相关的驱动文件。如果你之前已经安装过ST-Link的PC驱动这里不需要重复安装如果你用的是J-Link调试器那还需要额外去SEGGER官网下载J-Link驱动。我个人的建议是如果你手头有J-Link同时也有ST-Link那优先在STM32开发上使用ST-Link因为ST官方工具链与ST-Link的整合度最高出现问题最少见。安装完STM32CubeCLT之后需要把工具链路径加入Path。这个步骤很多人会漏掉漏掉的后果就是你在VS Code终端运行arm-none-eabi-gcc --version会提示找不到命令。加入Path的操作是右键“此电脑”- 属性 - 高级系统设置 - 环境变量 - 在“系统变量”里找到Path- 编辑 - 新建然后把STM32CubeCLT里工具链的bin目录路径填进去。具体的路径形如C:\ST\STM32CubeCLT_1.16.0\GNU-tools-for-STM32\bin你以实际安装目录为准。配置CMake也是类似。STM32CubeCLT安装包里其实已经内置了一个cmake但它不会自动加Path。如果你后面要用CMake构建工程建议单独装一个CMake或者直接把内置cmake的路径也加进Path。我建议直接装独立的最新版CMake因为VS Code的CMake Tools扩展会自动探测系统里的CMake版本太老可能导致插件不识别。4.3 工程配置与编译验证工具链装齐之后我们需要建一个最小工程来验证整套环境是否跑通。我这里用一种最干净的方式用STM32CubeMX生成一个最小工程然后导入VS Code编译。先在CubeMX里新建一个项目选择芯片型号比如最常见的STM32F103C8。配置系统时钟、选一个GPIO作为LED输出生成代码时在Project Manager里把Toolchain选为CMake然后Generate。生成的文件夹里会包含CMakeLists.txt、Makefile、Core等目录。这个CMake工程是STM32CubeMX生成的标准CMake工程可以直接被VS Code和CMake Tools识别。然后我们在VS Code里打开这个工程文件夹文件 - 打开文件夹选中CubeMX生成的目录。VS Code会提示检测到CMake工程是否配置点“是”。如果没有弹出也可以按Ctrl Shift P输入CMake: Configure手动触发。第一次配置时CMake Tools会要求你选择编译器工具链注意选择“STM32 GCC Compiler”通常它会自动识别到STM32CubeCLT路径下的编译器如果没识别到就需要你手动指向arm-none-eabi-gcc的路径。配置成功后底部状态栏的CMake区域会显示工具链信息同时会生成build目录。按F7或点击状态栏的“生成”编译器就会开始工作。如果一切正常你会在输出面板看到编译进度最终在build目录下生成.elf、.bin、.hex等文件说明工具链已经正确工作。这一步跑通了你的VS Code STM32开发环境就已经具备了编译能力。编译通过之后接下来验证烧录。我用STM32CubeCLT里自带的STM32CubeProgrammer命令实现烧录当然你也可以在ST-Link连接的情况下在VS Code里配置一个任务来执行。我常用的思路是直接打开VS Code的终端输入如下命令STM32_Programmer_CLI -c portSWD modeHOTPLUG -w build/xxx.hex -v -rst把命令中的文件名替换成你实际的hex文件名。如果看到Download verified successfully类似的提示说明烧录成功开发板上的程序已经开始运行。到了这一步你的VS Code STM32开发环境已经完整可用可以开始体验AI辅助编程的整个过程了。5. 常见问题与排查技巧实录5.1 头文件红色波浪线与IntelliSense配置失败很多从Keil转过来的朋友第一次用VS Code打开STM32工程时会发现头文件下面全是红色波浪线比如#include stm32f1xx_hal.h报“无法打开源文件”。这个问题的本质是IntelliSense的includePath没有配置正确。扩展帮你索引代码时需要知道头文件的搜索目录而我们从CubeMX生成的项目里没有现成的c_cpp_properties.json。解决方法是按Ctrl Shift P输入C/C: Edit Configurations (JSON)生成并打开c_cpp_properties.json在配置项的includePath数组里把SDK的头文件路径加进去。以STM32F1的HAL库为例路径形如{ name: STM32, includePath: [ C:/Users/你的用户名/STM32Cube/Repository/STM32Cube_FW_F1_V1.8.5/Drivers/STM32F1xx_HAL_Driver/Inc, C:/Users/你的用户名/STM32Cube/Repository/STM32Cube_FW_F1_V1.8.5/CMSIS/Device/ST/STM32F1xx/Include, C:/Users/你的用户名/STM32Cube/Repository/STM32Cube_FW_F1_V1.8.5/CMSIS/Include ], defines: [ USE_HAL_DRIVER, STM32F103xB ] }这里面有两个容易踩的坑第一路径里不要忘了定义USE_HAL_DRIVER和具体的芯片宏否则HAL库很多条件编译代码不会被激活第二路径分隔符建议统一用正斜杠/避免反斜杠转义问题。配置完保存红色波浪线通常会在几秒内消失。如果还没消失可以使用Ctrl Shift P - C/C: Reset IntelliSense Database重置一下索引。5.2 编译时报错“无法找到带有参数集的默认工具链”或“arm-none-eabi-gcc不是内部或外部命令”这个问题的原因几乎都是环境变量没有配好。打开Windows终端输入arm-none-eabi-gcc --version如果提示“不是内部或外部命令”说明编译器路径没有加入Path或者加入之后没有重启终端。前面我讲过如何在系统变量里配置Path配置好之后务必开一个新的终端窗口别在旧窗口里测试旧窗口不会刷新Path。另外一个常见的情况是STM32CubeCLT安装包里的GNU工具链目录跟你预期的不一样不同版本目录结构稍有差别。你可以直接在文件管理器里搜索arm-none-eabi-gcc.exe找到真实的bin目录然后把那个目录加入Path。这里额外提醒一句如果你之前装过其他ARM GCC工具链比如Xpack的或者GNU Arm Embedded Toolchain官方版系统里可能存在多个arm-none-eabi-gcc.exePath里靠前的那个生效。建议用where arm-none-eabi-gcc命令查看当前使用的是哪个路径如果不一致把STM32CubeCLT的路径调整到最前面即可。5.3 调试器连接失败与烧录卡死的处理调试和烧录是新手容易卡的另一个环节。常见报错是No ST-LINK detected或者Error: Connection error。这种问题先排查连接确认ST-Link与电脑的USB口连接正常驱动识别正常。进入设备管理器展开“通用串行总线设备”应该能看到STM32 STLink如果显示带感叹号的未知设备说明驱动没装好重新安装ST-Link驱动即可。驱动正常但依然连不上那就考虑是不是keil或STM32CubeProgrammer等工具把ST-Link占用了。ST-Link不支持多个上位机同时访问此时关掉其他所有调试烧录工具再重试。硬件层面也有一个低概率但常见的原因STM32的BOOT0引脚状态不对导致芯片进入ISP下载模式而不是正常运行模式ST-Link连接时会失败。检查BOOT0是否接GND如果是高电平把它拨回低电平再试。如果你在烧录时遇到Data read mismatch或者校验错误大部分原因就两个一个是电源不稳给板子换一个独立供电的USB口或者接外部3.3V电源另一个是SWD线太长或接触不良SWDIO和SWCLK两根线尽量缩短避免在面包板上飞很长的杜邦线高速模式对线材和接触质量很敏感。实测中把SWD速率从默认调低到4MHz或1.8MHz很多不稳定的烧录问题都能解决这也是STM32CubeProgrammer图形界面里经常用到的一个技巧。6. 在VS Code里配置AI编程环境前五节我们把VS Code和STM32工具链都跑通了接下来这一步是这个系列的重头戏把AI编程助手接入VS Code。以我实际使用中最常用的方案为例在扩展市场搜索Codex AI或Claude Code等AI插件安装后登录或填入API Key就能在侧边栏打开对话窗口。你当前打开的文件会自动作为上下文传给AI发送指令时还可以让AI直接读取整个项目目录理解工程结构后再生成代码准确率会高很多。在我这个系列的课程设计中接下来的很多实操环节都会直接在VS Code里完成比如让AI生成STM32的外设初始化代码、让AI修复编译报错、让AI帮你做代码格式化和逻辑审查。这些操作如果还在Keil环境下做起来会非常别扭这也是我一再强调要先搭好VS Code环境的原因。对话窗口使用上有一个小技巧在窗口中输入指令时尽量带上芯片型号和库的版本例如“给STM32F103C8生成串口1初始化代码使用HAL库波特率115200”AI给出的代码会更准确几乎可以直接复用。如果只是说“帮我写串口初始化”AI默认可能生成的是LL库或陈旧代码需要你花时间修改。实际测试下来精确指令能让AI生成代码的可用率从一半左右提升到八成以上。7. 环境验证与总览总结到这里你已经完成了VS Code STM32扩展工具链的全部安装与配置为了确认整个环境状态我建议你用一张清单快速检查一遍能否在VS Code中打开STM32工程并能正常浏览代码无红色波浪线能否按F7完成编译并生成hex文件能否通过STM32CubeProgrammer完成烧录并运行程序能否在VS Code中启动Cortex-Debug并成功连上开发板打断点以及AI扩展窗口是否正常对话并能输出有效代码。如果这五项全部通过恭喜你整套开发环境已经达到了可以日用的水平。从我个人的实际体验来说这套环境我大概已经用了一年多刚开始从Keil切换过来的头几天确实会有些不适尤其是对CMake构建方式还不熟的时候一改工程配置就懵。但坚持用下来之后再回到Keil反而会觉得很憋屈因为VS Code的代码检索效率、多文件切换速度、AI辅助编程的便利性都是Keil给不了的。最后再分享一个真实的使用技巧如果你在使用过程中觉得VS Code启动变慢、或者插件加载卡顿检查一下是否装了很多不常用的扩展尽量只保留必要的比如C/C、Cortex-Debug、STM32 VS Code Extension、AI助手插件、中英文语言包其他临时用途的扩展用完就禁用。实测中安装超过二十个扩展之后VS Code的冷启动时间可能会从两秒暴增到十几秒这对日常开发的烦躁度是有很大影响的。保持插件精简是VS Code长期流畅运行的一个核心原则。