【动手学 Claude Code】(11) 基于 Claude Code 开发 STM32 程序
欢迎关注 youcans@xidian【AI 编程】专栏
(1)AI 编程概述
(2)Claude Code 快速上手
(3)Claude Code 与 IDE 的集成
(4)Claude Code 接入微信对话
(11) 基于 Claude Code 开发 STM32 程序
【动手学 Claude Code】(11) 基于 Claude Code 开发 STM32 程序
本文将在前面已经搭建好的 STM32 VSCode 开发环境基础上,演示如何使用 Claude Code 开发一个简单的 STM32 程序。
本文先让 Claude Code 理解项目,再让它编写或修改代码,最后通过 STM32 工具链和真实硬件验证结果。采用这套流程可以逐步扩展到按键输入、外部中断、串口通信、定时器、PWM 和 ADC 等更完整的 STM32 程序。
1. 为什么使用 Claude Code 开发 STM32 程序?
1.1 Claude Code 在 STM32 开发中的作用
传统的 STM32 开发流程通常包括以下步骤:
- 在 STM32CubeMX 中选择芯片,配置引脚、时钟和外设;
- 生成初始化代码;
- 在 VSCode 中编写业务逻辑;
- 编译工程;
- 将程序烧录到开发板;
- 调试与测试。
基于 Claude Code 开发 STM32 程序,可以采用“硬件配置、项目理解、代码编写、工具链验证” 的协同范式。
- 首先,使用 STM32CubeMX 完成芯片、引脚和外设配置,并生成基础工程;
- 然后,让 Claude Code 阅读项目结构、.ioc 配置文件和相关源代码,理解当前工程;
- 接着,使用 Claude Code 编写、修改或审阅用户代码;\
- 最后,在 VSCode 中完成编译、烧录和调试,并通过开发板的实际运行结果进行验证。
相比单纯手工编程,这种方式可以帮助开发者更快理解项目结构,减少重复工作,也便于分析错误和逐步完善代码。
在 STM32 项目中,可以让 Claude Code 完成以下任务:
- 浏览项目目录,说明主要文件和文件夹的作用;
- 阅读 STM32CubeMX 生成的配置和初始化代码;
- 找到 LED、按键、串口等外设对应的引脚;
- 判断程序应该写入哪个用户代码区域;
- 编写和修改 STM32 程序;
- 分析编译错误;
- 整理代码结构和说明文档。
对于初学者来说,Claude Code 的意义并不只是“代替手工写代码”。更重要的是,它可以帮助我们逐步理解 STM32 项目的结构,并形成更加清晰的开发思路。
1.2 Claude Code 与 STM32 开发工具链的分工
在 STM32 开发中,不同工具承担不同任务。引入 Claude Code 后,原有工具链仍然保留,只是增加了一个能够理解项目并协助编程的智能工具。
| 工具 | 主要作用 |
|---|---|
| STM32CubeMX | 配置芯片、引脚、时钟和外设,生成初始化代码 |
| VSCode | 查看和编辑项目文件 |
| STM32CubeIDE for Visual Studio Code | 管理 STM32 工程,支持编译、烧录和调试 |
| ST-LINK | 连接电脑和 STM32 开发板,完成程序下载和在线调试 |
| Claude Code | 阅读项目、理解代码、编写和修改程序、分析问题 |
需要特别说明的是,编译、烧录和调试并不是 Claude Code 自身提供的功能。执行编译、烧录和调试操作的,仍然是 STM32 开发工具链。例如,在 VSCode 中单击“运行与调试”按钮后,程序可以被烧录到 STM32 开发板,并进入调试状态。这一过程依赖的是 STM32CubeIDE for Visual Studio Code、编译工具链和 ST-LINK。
同样,Claude Code 也不能代替 STM32CubeMX。如果需要启用新的 GPIO 引脚、配置串口、设置定时器或修改时钟,仍然应优先在 STM32CubeMX 中完成配置,再重新生成代码。Claude Code 可以阅读 .ioc 文件和自动生成代码,帮助判断当前配置是否满足需求,但不应绕过 STM32CubeMX 随意修改底层初始化代码。
合理的开发流程是:
- 使用 STM32CubeMX 完成硬件配置;
- 使用 Claude Code 阅读工程并理解项目结构;
- 使用 Claude Code 编写或修改用户代码;
- 在 VSCode 中编译工程;
- 使用 ST-LINK 烧录并调试程序;
- 根据硬件运行结果继续检查和修改。
这种分工既能发挥 Claude Code 的优势,也能保留 STM32 官方工具链的稳定性。
1.3 STM32 for Claude Code 开发环境
在开始使用 Claude Code 开发 STM32 程序之前,需要先准备基础环境用于 STM32 编程、编译、烧录和调试,与使用 Claude Code 阅读和修改项目代码。
- STM32 VSCode 开发环境
在 从零搭建 STM32 VSCode 开发环境 中,我们搭建了 STM32 VSCode 开发环境,可以在 VSCode 中创建 STM32 工程,编译程序,烧录代码和调试程序。
基于 VSCode 的 STM32 开发环境主要包括:
- Visual Studio Code;
- STM32CubeIDE for Visual Studio Code 扩展包;
- STM32CubeMX;
- STM32CubeProgrammer;
- ST-LINK 驱动。
- Claude Code for VSCode 开发环境
在 youcans(3)Claude Code 与 IDE 的集成 中,我们介绍了 在 VSCode 中安装和配置 Claude Code。Claude Code 可以通过 VSCode 扩展和终端配合使用。它能够读取当前项目文件,理解代码结构,并根据自然语言要求编写、修改和审阅代码。
在开始本文操作前,应先确认以下功能可以正常使用:- 已经安装 Claude Code;
- 已经完成登录或模型配置;
- 可以在 VSCode 中打开 Claude Code;
- 可以在 VSCode 集成终端中启动 Claude Code;
- Claude Code 可以读取当前工程目录中的文件;
- Claude Code 可以回答关于项目结构和代码内容的问题。
完成以上准备后,就可以在同一个 VSCode 环境中同时使用 STM32 开发工具和 Claude Code。
其中,STM32CubeIDE for Visual Studio Code 负责工程管理、编译、烧录和调试;Claude Code 则负责阅读项目、理解代码、编写和修改程序。两者分工不同,但可以在同一个 STM32 项目中协同使用。
2. 新建 STM32 工程
在使用 Claude Code 编写 STM32 程序之前,需要先建立一个基础工程。本文以 NUCLEO-G431RB(板载 STM32G431RBT6 芯片,集成 ST-LINK/V3E 调试器/编程器)为例,本章使用 STM32CubeMX 选择芯片、生成 CMake 工程,并在 VSCode 中打开项目。
STM32CubeIDE for Visual Studio Code 支持多种工程创建方式。对于初学者来说,建议使用 STM32CubeMX 创建工程。STM32CubeMX 提供图形化界面,可以帮助我们选择开发板或芯片,并自动生成基础代码。后续需要配置 GPIO、串口和定时器等外设时,也可以继续使用同一个工具。
本章先创建一个简单的测试工程,将工程命名为:MyLed02。
2.1 在 STM32CubeMX 中新建工程
本节首先使用 STM32CubeMX 选择开发板或芯片,建立一个新的 STM32 工程。
-
创建测试目录。
在正式创建工程之前,建议先建立一个专门存放 STM32 项目的目录。例如,“C:\STMicroelectronics\STworkspace_G431”。
创建一个名为 “MyLed02” 的测试工程,例如:“C:\STMicroelectronics\STworkspace_G431\MyLed02”。 -
启动 STM32CubeMX。
选择 “File > New Project”(或Ctrl-N快捷键)新建工程,进入 New Project 芯片或开发板选择界面。 -
选择开发板或芯片。
STM32CubeMX 通常提供两种选择方式创建工程:- Board Selector:按照开发板型号创建工程;
使用 NUCLEO 官方开发板时建议,按照 Board Selector 选择,例如选择开发板型号为 NUCLEO-G431RB。 - MCU/MPU Selector:按照 STM32 芯片型号创建工程。
使用最小系统板、自制开发板或其他第三方开发板时,建议选择 MCU/MPU Selector,并输入开发板上实际使用的芯片型号。
- Board Selector:按照开发板型号创建工程;
2.2 外设配置
在 STM32CubeMX 中将 LED 对应的引脚设置为输出模式,为后续控制 LED 做好准备。
-
打开 STM32CubeMX 工程。
打开 STM32CubeMX,然后选择:“File > Open Project”,打开生成的工程配置文件:"MyLed01.ioc“”
(1)选择 “System Core – SYS” 设置调试器类型,将 Debug 模式设为 “Serial Wire”,启用SWD接口用于后续的下载和调试。
(3)选择 “System Core – RCC” 配置时钟模式,设置高速晶振为外部时钟,将 High Speed Clock (HSE) 设为 “Crystal/Ceramic Resonator”,为系统提供时钟源。
(4)选择 “Connectivity” 配置串口通信,设置 “LPUSAT1”,启用异步模式,用于程序调试信息输出。 -
将 LED 引脚设置为输出模式。
确认开发板上 LED 所对应的引脚。以 NUCLEO-G431RB 开发板为例,板载 LD2 连接到 PA5。
(1)在芯片引脚图中单击 PA5,然后选择:“GPIO_Output”,将引脚设置为将其设置为 GPIO_Output。
(2)在左侧配置栏中,依次打开:“System Core > GPIO”,选中 PA5,在 User Label 一栏中输入:LD2。
设置标签后,STM32CubeMX 会在代码中自动生成与 LED 引脚对应的名称,例如:“LED_GPIO_Port”、“LED_Pin”。后续代码不需要直接写死 GPIOA 和 GPIO_PIN_5。更换开发板或修改引脚时,只需要重新配置 STM32CubeMX 即可。 -
将用户按键(PC13)配置为外部中断
确认开发板上 用户按键对应的引脚。以 NUCLEO-G431RB 开发板为例,板载 BTN 连接到 PC13。
(1)在芯片引脚图中找到 PC13,将其配置为 “GPIO_EXTI13”。
(2)在左侧配置栏中,依次打开:“System Core > GPIO”,选中 PC13,在 User Label 一栏中输入:LD2。
2.3 工程设置
本节将完成工程名称、保存路径和构建方式的设置,并使用 STM32CubeMX 生成 CMake 工程。生成完成后,工程即可在 VSCode 中打开。
-
打开工程设置。
进入 STM32CubeMX 工程配置界面后,暂时不需要修改芯片引脚。
单击上方的:“Project Manager”,进入工程设置页面,可以看到工程名称、保存路径和工具链等设置项。 -
设置工程名称和保存路径。
在 Project Name 中输入工程名称:“MyLed02”,将自动生成的完整工程路径:“C:\STMicroelectronics\STworkspace_G431\MyLed02”。 -
选择 CMake 工程。
在 Toolchain / IDE 中选择工程构建工具:“CMake”。不要选择 Keil、IAR 或 STM32CubeIDE。
STM32CubeMX 会自动生成基础配置文件。 -
生成工程代码。
完成设置后,单击右上角的:“GENERATE CODE”,STM32CubeMX 会根据当前芯片型号生成基础工程。
第一次为某个 STM32 系列创建工程时,STM32CubeMX 可能提示下载对应的软件包。按照提示完成下载即可。

- 代码生成完成后,打开工程目录可以看到 .ioc 文件、CMakeLists.txt 文件以及 Core、Drivers 等文件夹,说明工程已经生成成功。
其中:- MyLed01.ioc 保存 STM32CubeMX 的工程配置;
- CMakeLists.txt 保存 CMake 构建规则;
- Core 目录包含主要源代码和头文件;
- Drivers 目录包含 HAL 库和芯片支持文件。

2.4 在 VSCode 中打开工程
本节在 VSCode 中采用“打开工程—选择 Debug—执行 CMake: Configure—检查 build\Debug 文件夹”的流程,打开并初始化刚刚生成的工程。
-
打开工程文件夹。
启动 VSCode。
在顶部菜单中选择:“File > Open Folder…”,选择刚才生成的工程目录:“…\MyLed01”,然后单击“选择文件夹”。
打开工程后,在 VSCode 左侧资源管理器中,可以看到 CMakeLists.txt、Core 和 Drivers 等文件或文件夹。 -
选择 CMake 配置预设。
第一次打开 CMake 工程时,VSCode 可能会提示选择配置预设,开发过程选择 “Debug” 即可。CMake 将按照该预设进行配置,STM32 插件(STM32CubeCMake Support)也识别该工程是 STM32Cube Project。
Debug 表示调试版本,适合学习和测试;Release 更适合正式发布程序。

- 执行 CMake 配置。
(1)按下 Ctrl + Shift + P 打开命令面板,输入并执行:“CMake: Configure”。CMake 会读取工程配置,并生成 VSCode 编译器 所需的编译、索引、头文件、宏、工具链环境,让代码能正常编译。
(2)STM32 插件(STM32CubeCMake Support)也识别该工程是 STM32Cube Project,确认后将自动安装所需的工具链。
(3)STM32 插件调用工具链,生成了一些 CubeMX 创建工程时缺失的文件,如 .vscode 中记录的插件配置文件, .settings 中记录的使用工具链的文件。
(4)打开工程目录。如果看到:“build\Debug”,就说明 CMake 配置已经完成。在STM32 工具包管理器 Bundle Manager 界面中也可以看到当前工程的捆绑包 MyLed01。

-
打开 main.c
在 VSCode 中点击左侧资源管理器图标,依次展开:“Core > Src”,双击打开:“main.c”。
完成以上操作后,工程已经准备就绪。 -
注意:VSCode 自动识别 C语言程序,推荐安装官方【C/C++ Extension Park 扩展】,在开发 STM32 项目时不要安装以免冲突。
3. Claude Code 解析 STM32 工程
在编写 STM32 程序之前,应先让 Claude Code 了解当前工程。本文将从工程目录、.ioc 配置文件和 main.c 程序结构三个层次入手,帮助 Claude Code 建立对项目的基本认识,并为后续编写代码做好准备。
3.1 工程结构解析
本节youcans@qq.com先在 VSCode 内置终端中启动 Claude Code,再让它浏览工程目录,识别主要文件和文件夹。
-
打开工程目录。
(1)在 VSCode 中打开上一章创建的MyLed01工程。
(2)在 右侧面板区域,点击 “终端(Terminal)” 打开终端面板。也可以使用快捷键:Ctrl + Shift + `。
在 VSCode 窗口下方的面板中将会出现一个新的终端标签页。确认当前路径为工程根目录,例如:“C:\STMicroelectronics\STworkspace_G431\MyLed01”。Claude Code 将在当前路径启动和工作。 -
在工程目录中启动 Claude Code。
确认当前路径为工程根目录后,在终端输入 “claude” 后按回车键,在当前工程目录中启动 Claude Code。
如图所示,终端中进入 Claude Code 交互界面,说明 Claude Code 已经在当前工程目录中启动。后续提出的问题,将默认围绕 MyLed01 工程展开。

- Claude Code 浏览工程目录
向 Claude Code 输入:
请浏览当前 STM32 工程目录,说明主要文件和文件夹的作用。暂时不要修改任何文件。
Claude Code 完成工程目录分析后,会在 VSCode 下方面板的终端中显示结果如下图所示,不同芯片型号和 STM32CubeMX 版本生成的文件可能略有差异。

可以让 Claude Code 将分析结果保存为 Markdown 文件。例如,输入:【请将刚才的工程结构分析结果整理为 Markdown 格式,并保存为 docs/project-structure.md 文件。】
保存完成后,可以在 VSCode 左侧资源管理器中打开该文件。其主要内容如下:
文件已保存到 docs/project-structure.md。文档涵盖以下内容:
- 目录总览 — 工程树形结构一览
- 顶层文件详解 — MyLed01.ioc、CMakeLists.txt、CMakePresets.json、链接脚本、启动文件
- Core/ 核心代码 — 每个源文件的职责、main.c 的执行流程、CubeMX USER CODE 保护机制
- Drivers/ 驱动库 — CMSIS 和 HAL/LL 两层驱动的结构说明
- build/ 构建输出 — 生成的 elf 固件、map 映射文件、compile_commands.json 等
- 辅助目录 — .vscode、.claude、cmake 等
- 当前固件行为综述 — LED 闪烁逻辑和系统时钟配置
youcans@qq.com

- 认识主要文件和目录
当前阶段,只需要了解以下内容:
| 文件或目录 | 主要作用 |
|---|---|
MyLed01.ioc |
保存 STM32CubeMX 配置 |
Core |
存放主要源代码和头文件 |
Drivers |
存放 HAL 库和芯片支持文件 |
CMakeLists.txt |
保存 CMake 构建规则 |
cmake |
存放构建所需的辅助配置 |
startup_stm32g4xx.s |
芯片启动文件 |
STM32G431CBTX_FLASH.ld |
描述 Flash 和 RAM 布局的链接脚本 |
其中,后续重点关注 MyLed01.ioc、Core 即可,对于 Drivers、启动文件和链接脚本通常不需要直接修改。
3.2 配置文件解析
本节让 Claude Code 读取 MyLed01.ioc 文件,了解当前工程的芯片型号、引脚分配和外设配置。
- 让 Claude Code 读取 .ioc 文件
向 Claude Code 输入:
请阅读 MyLed01.ioc 文件,说明当前工程使用的 MCU 型号,以及已经配置的引脚、时钟和外设。请将分析结果整理为 Markdown 格式,并保存为 docs/ioc-analysis.md 文件。
Claude Code 输出如下,并生成 “docs/ioc-analysis.md” 文件。
文件已保存到 docs/ioc-analysis.md。文档涵盖以下内容:
- MCU 型号 — STM32G431RBT6 / NUCLEO-G431RB / LQFP64 封装
- 5 个 IP 外设 — LPUART1、NVIC、RCC、SYS、BSP
- 13 个引脚 — 分组为 LED/按钮用户引脚、LPUART1 串口、HSE/LSE 时钟源、SWD 调试接口、虚拟内部信号
- 完整时钟树 — HSI(16 MHz)→PLL→160 MHz 各级总线频率,附 PLL 链路图和外设时钟一览表
- NVIC 中断 — 优先级分组和全部系统异常的使能状态
- 工程管理配置 — 堆栈大小、用户代码保护、初始化函数调用顺序等
- 功能覆盖总结 — 芯片已用/未用功能对比,方便后续扩展参考
youcans@qq.com

- 认识 .ioc 文件的作用
可以将.ioc文件理解为 STM32 工程的“硬件配置清单”。
其中通常记录:- MCU 型号;
- 引脚分配;
- GPIO 模式;
- 时钟设置;
- 外设启用状态;
- 用户标签;
- 代码生成选项。
如果后续需要配置 LED、按键、串口、ADC 或定时器,Claude Code 都可以先读取 .ioc 文件,判断当前配置是否已经满足要求。
- 检查当前工程配置
继续向 Claude Code 输入:
请根据 MyLed01.ioc 文件,判断当前工程是否已经配置 GPIO 输出引脚,是否具备编写 LED 闪烁程序的条件。
根据之前读取的 MyLed02.ioc 和源代码,结论是明确的。这里一并梳理如下:
...
编写 LED 闪烁程序的条件评估
- GPIO 输出引脚已配置: PA5 已初始化为推挽输出
- 引脚宏定义已就绪: main.h 中已定义 LD2_Pin (GPIO_PIN_5) 和 LD2_GPIO_Port (GPIOA)
- GPIO 初始化在 main() 中调用: MX_GPIO_Init() 已在 main() 中调用
- HAL 时基已就绪: SysTick 已使能,HAL_Delay() 可用
- 系统时钟已配置: HSI→PLL 产生 160 MHz SYSCLK
- 无需冲突的中断配置: PC13/BTN 仅占用 EXTI13,不影响 PA5
结论youcans@qq.com
完全具备编写 LED 闪烁程序的条件。
只需在 main.c 的 while (1) 循环中加入 HAL GPIO 翻转和延时即可。
3.3 程序结构分析
本节让 Claude Code 阅读 main.c 和相关头文件,识别程序入口、初始化流程和用户代码区域。
- 让 Claude Code 分析 main.c
向 Claude Code 输入:
请阅读 Core/Src/main.c 和 Core/Inc/main.h,说明程序入口、初始化流程、主循环和用户代码区域。请将分析结果整理为 Markdown 格式,并保存为 docs/main-analysis.md 文件。
Claude Code 将输出结果保存为 docs/main-analysis.md 文件,包括文件结构总览、程序入口函数解析、初始化流程解析、主循环解析、用户代码区域解析、主程序头文件解析等。
文件已保存至 docs/main-analysis.md。要点总结:
程序入口
- 芯片上电 → Reset_Handler(启动汇编)→ SystemInit() → main()
初始化流程(5 步)
1. HAL_Init() — 外设复位、SysTick 1ms 时基
2. SystemClock_Config() — HSI→PLL→160 MHz
3. MX_GPIO_Init() — PA5 (LED)、PC13 (按键)
4. MX_LPUART1_UART_Init() — 115200-8N1
5. while (1) — 空主循环
USER CODE 区域
- main.c 有 16 个用户代码区,main.h 有 6 个
- 编号 0~4:0=main 之前、1=main 首部、2=外设初始化后(写初始化逻辑最常用)、3=循环体内(写业务逻辑最常用)、4=文件末尾(写自定义函数)
- CubeMX 重新生成时保留标记间的用户代码
当前状态:纯净骨架,所有 USER CODE 区域为空,只需在 USER CODE BEGIN 3 区加入 HAL_GPIO_TogglePin + HAL_Delay 即可实现 LED 闪烁。
youcans@qq.com

- 检查分析结果
继续向 Claude Code 输入:
请说明后续编写 LED 闪烁程序时,应修改哪个文件和哪个用户代码区域。如果需要修改 GPIO 引脚配置,应如何处理?
Claude Code 输出 LED 闪烁程序修改指南:
LED 闪烁程序 — 修改指南
应修改哪个文件和区域
Core/Src/main.c │ USER CODE BEGIN 3 │ 主循环体内,业务逻辑代码的最佳位置
具体位置(main.c 第 91 行):
/* Infinite loop youcans@qq.com */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
// ★ 在这里写入 LED 闪烁代码 ★
HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin);
HAL_Delay(500);
/* USER CODE END 3 */
}
4. 使用 Claude Code 编写和修改 LED 闪烁程序
在上一章中,我们已经让 Claude Code 解析了 STM32 工程结构,找到了 main.c、main.h、主循环和用户代码区域。本章将在此基础上,让 Claude Code 编写 LED 闪烁程序,并通过编译、烧录和开发板运行结果进行验证。
需要注意的是,Claude Code 负责辅助编写和修改代码;编译、烧录和运行验证仍然由 VSCode 中的 STM32 开发工具链完成。
4.1 使用 Claude Code 编写 LED 闪烁代码
在编写代码之前,需要先确认 LED 引脚已经在 STM32CubeMX 中配置为 GPIO 输出模式,并且在 main.h 中已经生成了对应的引脚宏定义。例如:
#define LED_Pin GPIO_PIN_5
#define LED_GPIO_Port GPIOA
不同开发板的 LED 引脚可能不同,应以实际工程中的 main.h 为准。
在 Claude Code 交互界面中输入:
请根据当前 STM32 工程,在 Core/Src/main.c 的 while (1) 主循环中添加 LED 闪烁代码。要求:
1. 只修改 USER CODE BEGIN 3 和 USER CODE END 3 之间的代码;
2. 使用 main.h 中已有的 LED_Pin 和 LED_GPIO_Port 宏;
3. 每 500 ms 切换一次 LED 状态;
4. 不要修改 STM32CubeMX 自动生成的其他代码。
Claude Code 会读取当前工程中的 main.c 和 main.h,并尝试在主循环的用户代码区域中加入 LED 控制代码。
当 Claude Code 准备修改 main.c 文件时,终端中可能会出现如下确认信息:
Do you want to make this edit to main.c
1. Yes
2. Yes, allow all edits during this session (shift+tab)
3. No
这是 Claude Code 的文件修改确认机制。Claude Code 已经生成了修改方案,但在真正写入文件之前,需要用户确认。其中:
- Yes:允许本次修改。适合初学者使用,推荐选择。
- Yes, allow all edits during this session:允许本次会话中的后续所有修改,不再逐次询问。适合熟悉 Claude Code 且明确知道修改范围时使用。
- No:拒绝本次修改,文件不会被改动。
对于初学者,建议选择 “1. Yes”。这样每次 Claude Code 修改文件前,都会先显示确认信息,用户可以逐次检查和控制修改范围。在终端中输入:“1”,然后按下回车键允许本次修改,Claude Code 才会真正把 LED 闪烁代码写入 main.c。如下图所示。
修改完成后,while (1) 中的代码如下:
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin);
HAL_Delay(500);
}
/* USER CODE END 3 */
其中:
- HAL_GPIO_TogglePin() 用于切换 LED 引脚电平;
- HAL_Delay(500) 表示延时 500 ms;
- 代码被放在 USER CODE BEGIN 3 和 USER CODE END 3 之间,可以避免重新生成代码时被覆盖。

4.2 编译、烧录与运行验证
Claude Code 完成代码修改后,需要回到 VSCode 的 STM32 开发环境中进行编译、烧录和运行验证。
4.2.1 编译工程
VSCode 调用编译器,对工程中的 C 语言代码进行编译和链接。
(1)点击 VSCode 底部工具栏的 “生成” 按钮(或 “CMake-项目状态-生成”),将执行完整编译链接流程:完成源码编译、目标文件链接、固件格式转换,产出可烧录的程序文件。
(2)编译完成后,输出窗口中应显示构建成功的信息,例如:“[build] 生成已完成”,无错误、警告或仅列出无害警告。
编译出错时,输出窗口提示 “Build failed”,并显示具体报错信息。
(3)编译完成后,工程目录中会生成原始固件文件:“build\Debug\MyLed01.elf”,CMake 的 BUILD ANALYZER 也会显示程序所占达到 RAM 与 Flash 信息。

4.2.2 烧录程序
编译完成后,在 VSCode 中将编译生成的程序烧录到开发板,并启动调试。
-
连接开发板
使用 USB 数据线将 STM32 开发板(板载 ST-LINK)连接到电脑。
开发板上的电源指示灯应正常点亮。Windows 设备管理器中应能够识别 ST-LINK。 -
检查 ST-LINK 下载器
(1)在 VSCode 中左侧活动栏中点击 “运行与调试”,VSCode 左侧出现“运行与调试”面板。
(2)查看 “STM32Cube Device and Boards”,可以看到识别到的下载器 STM32 STLink。 -
启动烧录和调试
(1)在“运行与调试”面板中,单击:“运行与调试” 按钮,
(2)如果 VSCode 提示选择调试器,选择:“STM32Cube: STM32 Launch ST-Link GDB Server”。
VSCode 会自动完成以下操作:
- 检查工程是否已经成功编译;
- 将程序烧录到 STM32 开发板;
- 启动 ST-LINK 调试连接;
- 进入调试状态。
4.2.3 程序运行
程序烧录完成后,按 F5键(或点击调试工具栏的 “继续” 按钮 ▶️)启动调试,程序就会开始持续运行,直到遇到下一个断点或手动暂停。
目前并未设置断点,因此程序持续运行。观察开发板上的 LED,LED 按照约 500 ms 的间隔不断亮灭切换。
4.3 修改 LED 闪烁间隔
在确认 LED 闪烁程序能够正常运行后,可以让 Claude Code 修改闪烁速度。例如,将 LED 闪烁间隔从 500 ms 改为 100 ms。
在 Claude Code 交互界面中输入:
请将 LED 闪烁间隔从 500 ms 修改为 100 ms。要求:
1. 只修改 Core/Src/main.c;
2. 只修改 USER CODE BEGIN 3 和 USER CODE END 3 之间的代码;
3. 不要修改其他自动生成代码。
Claude Code 修改延时函数中的参数:
已修改。HAL_Delay(500) → HAL_Delay(100)。
修改后的循环体:
/* USER CODE BEGIN 3 */
HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin);
HAL_Delay(100);
}
/* USER CODE END 3 */
LED 将以 5 Hz 的频率闪烁(亮 100ms / 灭 100ms,周期 200ms)。youcans@qq.com
如果终端中再次出现文件修改确认信息,仍然建议选择:“1. Yes”,也就是只允许本次修改。
这一步体现了 Claude Code 的一个常见用途:在已有可运行代码的基础上进行局部修改。对于初学者来说,不必手动查找所有相关位置,而是可以用自然语言说明修改要求,再检查 Claude Code 的修改结果。
对于修改后程序,按照 4.2 所述步骤进行编译、烧录与运行验证,不再赘述。如果程序正常运行,开发板上的 LED 闪烁速度应明显变快。这样就完成了从“让 Claude Code 编写代码”到“工具链验证程序”再到“让 Claude Code 修改代码”的完整实践流程。
本章完成后,可以看出,Claude Code 的价值不在于替代 STM32 工具链,而在于帮助开发者更快理解代码、生成代码和修改代码。最终程序是否正确,仍然必须通过编译、烧录和开发板运行结果来确认。
5. 总结
本文在 STM32 VSCode 开发环境的基础上,介绍如何使用 Claude Code 辅助开发 STM32 程序。通过一个 LED 闪烁程序,我们完成了从新建 STM32 工程、配置外设、打开工程,到让 Claude Code 解析工程结构、分析配置文件和程序结构,再到编写、编译、烧录、运行和修改代码的完整流程。
在这个过程中可以看到,Claude Code 并不是 STM32 的编译、烧录或调试工具。它的主要作用是帮助开发者理解工程结构、阅读代码、定位用户代码区域,并根据自然语言要求编写或修改程序。真正的编译、烧录和运行验证,仍然需要依靠 VSCode 中的 STM32 开发工具链完成。
对于初学者来说,这种开发方式的价值在于降低理解 STM32 工程结构和修改代码的难度。开发者可以先让 Claude Code 解释工程,再让它生成或修改代码,最后通过实际硬件运行结果进行验证。这样既能提高开发效率,也能避免把 AI 生成的代码直接当作最终结果。
版权声明:
欢迎关注 youcans@xidian【AI 编程】专栏
转发必须注明原文链接:
【动手学 Claude Code】(11) 基于 Claude Code 开发 STM32 程序(https://youcans.blog.csdn.net/article/details/161924707)
Copyright by youcans@qq.com 2026
Crated:2026-06
更多推荐

所有评论(0)