欢迎关注 youcans@xidian【嵌入式软件AI编程】专栏
AI Coding 快速发展。很多程序员已经开始在日常工作中使用AI生成代码、解释代码、修改程序、分析错误,甚至辅助完成需求整理和技术文档编写。在Web开发、应用软件开发和数据处理等领域,AI已经不再只是一个"问答工具"或"代码补全工具",而是逐步参与到软件开发的多个环节之中。
本专栏结合STM32项目实践,介绍嵌入式软件AI编程的实战路径。本专栏内容来自图书《嵌入式软件的AI编程实践》,即将出版。
1. AI编程正在改变软件开发方式
过去我们谈到编程工具,通常想到的是编辑器、编译器、调试器、版本控制系统和各种开发框架。开发者自己理解需求、查阅资料、设计结构、编写代码、排查错误,工具主要起辅助作用。
AI编程工具出现后,这种协作方式正在发生变化。
在很多软件开发场景中,AI已经可以完成远不止"补全几行代码"的工作。例如:
- 根据需求描述生成初步实现方案;
- 阅读已有项目,解释代码结构和调用关系;
- 根据错误日志分析编译或运行问题;
- 修改函数、模块甚至多个文件;
- 根据代码生成说明文档和测试思路;
- 帮助开发者整理任务清单和开发记录。
AI正在从"代码提示工具"逐渐变成"开发协作者"。开发者不再只是逐行写代码,而是越来越多地承担目标定义、过程组织、结果判断和质量控制的工作。
这种变化在通用软件开发中已经比较明显,但在嵌入式软件开发中,情况会更复杂一些。
2. 嵌入式软件AI编程面临的困难
嵌入式软件开发和普通软件开发有一个重要区别:程序最终必须运行在真实硬件上。
以STM32开发为例,一个看似简单的功能,通常不只是写几行C代码。开发者还需要考虑芯片资源、引脚复用、时钟配置、外设初始化、中断机制、DMA传输、存储空间、编译工具链、烧录器和调试器等问题。
例如,要实现一个PWM输出功能,至少要确认:
- 使用哪个定时器;
- 输出到哪个引脚;
- 引脚是否支持对应的复用功能;
- PWM频率和占空比如何设置;
- 定时器时钟来源是否正确;
- CubeMX配置是否已经生成初始化代码;
- 用户代码应该写在哪个位置;
- 程序烧录后是否真的有波形输出。
AI可以帮助写代码,但如果没有这些硬件和工程上下文,它很容易给出"看起来合理、实际不能运行"的代码。
嵌入式软件AI编程的困难主要体现在几个方面。
-
第一,嵌入式软件依赖具体硬件平台。
AI无法凭空判断开发板接线是否正确,也无法直接看到LED是否闪烁、串口是否输出、PWM是否有波形、ADC数据是否变化。这些都必须由开发者在真实硬件上验证。
-
第二,外设配置和代码实现强相关。
在STM32项目中,很多代码必须建立在CubeMX配置正确的基础上。如果外设没有开启、引脚没有配置、中断没有使能、DMA没有设置,单纯修改应用代码并不能解决问题。
-
第三,工程结构比单个源文件复杂。
STM32项目通常包含启动文件、HAL库、系统初始化代码、用户代码区、CMake配置、头文件和多个源文件。AI修改代码时,必须知道哪些文件可以改,哪些文件不应该改,哪些代码会被CubeMX重新生成覆盖。
-
第四,调试结果来自真实运行。
普通软件的错误常常可以通过日志、异常栈或单元测试判断,而嵌入式开发还需要结合示波器、串口助手、调试器、开发板状态和外部模块响应来确认。
-
第五,AI容易在上下文不足时扩大修改范围。
如果开发者只说"帮我实现一个功能",AI可能会自行假设硬件连接、外设配置和软件结构,甚至修改与当前任务无关的代码。这样虽然看似效率高,但后续审查和调试会变得困难。
因此,嵌入式软件AI编程的核心问题,并不是"AI会不会写代码",而是:
如何让AI在明确的硬件约束、工程上下文、任务边界和验证闭环中参与开发。
3. 本专栏的定位:让AI参与嵌入式软件开发流程
本专栏关注的不是"让AI一次性生成一个完整STM32项目",也不是简单展示几个AI写代码的小技巧,而是探索一种更适合嵌入式软件的AI协同开发方法。
这里所说的嵌入式软件AI编程,是让AI参与嵌入式软件开发流程。它不是把开发者排除在外,而是重新划分开发者与AI之间的工作关系。
在这种协作方式中,开发者主要负责:
- 明确开发目标;
- 准备工程资料;
- 控制任务边界;
- 审阅代码修改;
- 完成硬件验证;
- 判断结果是否满足需求。
AI主要参与:
- 分析工程结构;
- 理解外设配置;
- 制定任务清单;
- 生成修改方案;
- 编写和修改代码;
- 分析编译和运行问题;
- 整理文档和测试记录。
也就是说,开发者从主要执行者,逐步转变为组织者、判断者和审核者;AI则成为开发过程中的重要协作者。
这种分工的价值在于:开发者可以减少在重复性代码细节、资料查找和错误排查上的消耗,把更多精力放在系统设计、项目推进和硬件验证上。对于初学者来说,这也意味着学习方式会发生变化。
传统学习路径通常是:先学C语言,再学寄存器或HAL库,再学外设例程,然后通过大量调试积累经验。这个路径当然是完整的,但链条较长,初学者很容易陷入细节,短时间内难以建立对完整开发流程的认识。
而在AI协同开发中,学习者可以更早进入真实项目实践:在任务中遇到问题,借助AI理解问题,再回到开发板上验证结论。学习重点不再只是记住某个函数怎么写,而是理解"需求如何转化为配置和代码""软件如何控制硬件""运行现象如何反推问题原因"。
这正是本专栏希望呈现的内容。
4. 嵌入式软件AI编程的基本流程
不同STM32案例涉及的外设、文件和功能不同,但开发者与AI的协同方式具有共通性。结合STM32项目实践,可以将嵌入式软件AI编程归纳为以下几个基本环节。

-
第一步,使用CubeMX完成工程配置并生成初始工程。
在目前阶段,我仍然建议初学者使用STM32CubeMX手动完成芯片选择、外设配置、引脚分配、时钟设置和工程生成。这样做虽然增加了一些人工操作,但更稳妥,也更容易理解工程来源。
AI可以参与配置要求整理和检查,但不建议一开始就完全跳过CubeMX,让AI直接生成整个初始工程。
-
第二步,使用AI分析工程。
工程生成后,可以让AI读取.ioc文件、初始化代码、目录结构和相关源文件,分析当前工程具备哪些外设条件,哪些代码由CubeMX生成,哪些区域适合添加用户代码,后续任务可能涉及哪些文件。
工程分析的目的不是马上写代码,而是让AI和开发者先对当前工程状态形成一致理解。
-
第三步,根据分析结果制定任务清单。
在工程条件明确之后,可以要求AI根据功能目标制定任务清单。任务不应按照单行代码或单个函数机械拆分,而应围绕完整功能来划分。例如"实现按键状态切换""实现ADC采样结果处理""实现串口周期发送"等。
每项任务都应尽量做到目标明确、修改范围清楚、结果可以验证。
-
第四步,按照任务清单逐项修改代码。
AI协同开发不适合一次性把所有需求都交给AI修改。更稳妥的方式是每次选择一项任务,让AI在指定文件和指定范围内生成代码修改。当前任务完成审阅和验证后,再进入下一项任务。
这样可以减少任务之间的相互影响,也方便定位问题。
-
第五步,审阅并确认代码修改。
AI生成的代码不能不经审阅就直接写入工程。开发者应检查本次修改是否符合任务目标,是否修改了不该修改的文件,是否破坏已有接口,是否引入无关功能。
这一步非常重要。AI可以写代码,但开发者必须掌握最终判断权。
-
第六步,编译、烧录并运行验证。
代码修改确认后,需要重新编译工程,并将程序烧录到开发板,通过真实运行结果验证功能是否符合预期。如果出现编译错误、烧录失败或运行异常,可以把完整错误输出、相关代码和实际现象反馈给AI,让AI协助分析原因并提出修改建议。
新的修改仍然需要再次审阅和验证。
这个流程可以进一步概括为三项基本原则:
- 修改前要有依据。
- 每次代码修改都应基于工程分析和任务清单,而不是凭感觉让AI随意发挥。
- 修改过程要审阅。
所有代码修改都应由开发者检查确认,特别要关注修改范围、接口关系和自动生成代码边界。
修改后要验证。
嵌入式软件最终要在开发板上运行,是否正确不能只看AI解释,也不能只看代码是否"看起来合理",必须以编译、烧录和实际运行结果为准。
5. 本专栏后续会介绍哪些内容
本专栏将以STM32开发为主要场景,以Claude Code为主要AI编程工具,围绕嵌入式软件AI编程展开实践介绍。后续内容大致分为四类。
-
第一类是基础项目。
从最简单的LED闪烁程序开始,介绍如何让AI分析STM32工程、制定任务清单、修改代码、审阅修改并完成运行验证。这个阶段的重点不是功能复杂度,而是建立第一个完整的AI协同开发闭环。
-
第二类是基础外设与通信实验。
围绕GPIO输入与外部中断、定时器、PWM、互补PWM、ADC、ADC DMA、DAC、UART、UART DMA、I2C和SPI等内容,介绍AI如何参与外设实验开发。每个实验都不是单纯讲外设原理,而是关注AI如何理解工程配置、修改代码、分析错误和支持验证。
-
第三类是系统资源与程序运行机制。
嵌入式项目不仅有外设,还需要系统资源和程序组织方式。后续会介绍看门狗、RTC、Flash参数存储、多任务处理、事件驱动、状态机设计和FreeRTOS多线程入门等内容,帮助读者理解单片机程序如何从"单个功能"走向"系统运行"。
-
第四类是综合项目。
在基础实验之后,专栏会以"基于ADC同步采样的PWM占空比控制"为综合案例,介绍如何借助AI完成需求分析、功能设计、架构设计、详细设计、任务规划、程序框架、模块接口和按任务编程。
进一步,还会讨论AI辅助工程配置、工程构建与调试、运行验证与分析、测试组织与评估、Git版本控制、AI辅助代码审查、项目维护与二次开发、STM32开发Skill以及AI协同开发的安全边界等问题。
这些内容的目标不是堆叠更多外设,而是逐步形成一条可复用的嵌入式软件AI编程路径。
6. 从"让AI写代码"到"让AI参与开发流程"
很多人第一次接触AI编程时,最直接的想法是:让AI帮我写一段代码。
这当然有用,但对嵌入式软件来说远远不够。
因为嵌入式软件面对的不是孤立代码,而是一个由芯片、外设、工程配置、编译工具链、烧录调试环境和真实硬件现象共同构成的系统。AI写出的代码只有放进正确的工程结构中,经过编译、烧录和运行验证,才算真正有意义。
所以,嵌入式软件AI编程更重要的不是"AI能不能写代码",而是"能不能让AI参与完整开发流程"。
从这个角度看,AI的价值不只是提高写代码速度,更在于帮助开发者理解工程、组织任务、分析问题、整理文档和形成规范。开发者的价值也不会消失,而是更加集中在目标判断、系统设计、工程控制和硬件验证上。
本专栏将从STM32开发实践出发,一步步展示这种协作方式如何落地。下一篇将从开发环境和第一个AI协同STM32程序开始,进入具体实践。
版权声明:
欢迎关注 youcans@xidian【嵌入式软件AI编程】专栏
转发必须注明原文链接:
【嵌入式软件AI编程】01. 基于 STM32/Claude Code 的 AI 编程(https://youcans.blog.csdn.net/article/details/164429293)
Copyright by ai4mcu@qq.com 2026
Crated:2026-09