三个月前我尝试用AI调MSPM0G3107的座椅加热PWM,100Hz,50%占空比,PA16引脚输出。
第一轮,AI写完代码,编译通过,烧录进去。拿示波器夹上去——信号没有,PA16静悄悄的。
查了一圈,发现少调了两个初始化步骤。SysConfig官方模板里写了八步,AI凭经验只写了六步——setCCPDirection和setCounterControl漏了。
第二轮,补上,重来。这回有输出了——频率92Hz,偏了8%。预设分频算错了,BUSCLK 32MHz分频系数是5,TimerClk应该6.4MHz,AI写成了4,变成8MHz,周期值全偏。
第三轮,改了分频,再来。频率现在100.3Hz,差0.3%,可以接受——但占空比只有47%。CCDAT2寄存器写的是LOAD值的一半,AI算了64000×50%得到了32000——但忘记LOAD是减一的,实际LOAD=63999,64000/2=32000,不是63999/2=31999.5。占空比偏了3%。
三轮下来,一个最简单的PWM消耗了一小时。
这不是AI不行。是流程有问题。
AI生成代码 → 编译 → 烧录 → 人拿示波器看 → 不对 → 人分析原因 → 改提示词 → 重来。
这个循环里每一步都有人。人只能串行工作,一次处理一个问题,还容易漏。
所以只有实现AI完整的自动闭环开发,才能发挥AI的最大效率,我花了两个月的时间,打磨出这套多Agent协作嵌入式全自动闭环开发的工作流


全闭环系统工作流的核心逻辑:AI写代码,机器做验证,物理信号当考官。
架构分三层,每一层堵一种类型的错。
第一层,寄存器级验证。
代码编译烧录之后,JLink调试器直接读芯片内部每个寄存器的实际值。逐位对比,32位的寄存器每一位单独比较。
比如Timer的LOAD寄存器,预期63999,实际读回来如果是64000,AI马上知道偏差在哪一位。
这相当于给芯片做了一次CT扫描——所有配置状态一目了然,不需要等人用肉眼去翻手册比对。
第二层,物理波形验证。
寄存器值对了不代表引脚信号对了——这是嵌入式开发最痛的常识。所以我给AI接了一台逻辑分析仪,探针夹在PA16引脚上。AI自动触发采集、解析波形、提取实际频率和占空比,跟需求做对比。
实际跑出来的数据:目标100Hz/50%,逻辑分析仪抓到的是99.7Hz/49.8%。误差0.3%和0.2%,在容差范围内,通过。
偏差超过阈值,AI分析原因——是prescale偏了还是period算错了——调整参数重新闭环。不需要人看示波器读数。
第三层,经验固化。
每次调试中发现的问题——比如忘了调setCCPDirection——都被记录到PERIPHERAL_CONSTRAINTS.md约束库里。此后AI写任何涉及PWM的代码,自动检查是否调了这步。
犯过的错误不会再犯第二次。团队的"集体经验"永久固化在约束文件里,不随人员流动流失。
**传统模式的问题**
嵌入式开发最痛苦的环节,不是写代码——是写完代码之后的验证。
一个PWM频率参数调错了,开发者要在"改代码→等编译→焊线烧录→示波器读数→翻数据手册→再改"的循环里反复消耗数小时。
Bug靠人肉排查,经验无法继承。忘了调enableOutput导致引脚无输出——资深工程师踩过一次会记住,但换个人或换个项目又重犯。
Keil仿真器里的寄存器值看着都对,烧到芯片上就是不工作。软件仿真无法模拟真实电气特性,最终只能在物理芯片上验证——而且每一步都得人盯着。
一个参数配置错误→编译2分钟→烧录30秒→示波器抓波形→发现不对→再改。一天的有效迭代次数不超过10次。
**我的全闭环工作流AI写的代码凭什么可信?四层保障。**
这套工作流的做法是:AI 写的每一行嵌入式代码,都必须通过真实芯片引脚上的物理电信号检验,合格才能交付。以我用TI的MCU为例
**第一层,知识库来自TI官方SDK,不是AI编的。**
系统首先解析TI官方SDK中数百个头文件,提取每个寄存器的地址、位域定义、有效值范围,建立结构化知识库。AI写代码时在这个知识库的约束下生成——不是猜测,是基于标准答案的翻译。
**第二层,寄存器级验证:JLink读芯片内部值,逐位对比。**
AI通过JLink调试器直接读取芯片内部每个寄存器的实际值,与预期值进行位域级对比——32位的寄存器,每一位都单独比较。
比如Timer的LOAD寄存器预期值是63999,实际读回来如果是64000,AI立即知道偏差在哪一位。这相当于给芯片做了一次CT扫描,所有配置状态一目了然。
**第三层,物理波形验证:逻辑分析仪抓真实信号。**
逻辑分析仪通过USB连接到电脑,探针夹在芯片PA16引脚上。AI自动完成触发采集→解析波形→提取频率/占空比→与需求值对比→偏差超阈值则自动回退。
这就避免了AI纸上谈兵——写出来的代码到底能不能在真实芯片上产生正确的波形,不是AI说了算,是示波器说了算。
**第四层,经验永不重犯:Bug一旦修复,永久写进约束库。**
每次调试中发现的问题——比如忘了调enableOutput导致引脚无输出——都被记录到PERIPHERAL_CONSTRAINTS.md约束库中。此后AI写任何涉及GPIO的代码,都会自动检查是否调用了enableOutput。
犯过的错误绝不会再犯第二次。团队的集体经验被永久固化在约束文件里。
**一次完整的闭环跑下来是什么样的?以PWM配置为例。**
需求:在MSPM0G3107芯片的PA16引脚输出100Hz、50%占空比的PWM加热控制信号。
**第一步,AI查数据手册,确定硬件能力。**
PA16引脚→IOMUX_PINCM38→TIMA0定时器CCP2通道。从知识库确认:定时器是16位(最大计数值65535)、时钟源BUSCLK=32MHz、PWM支持DOWN-counting模式。
**第二步,AI计算参数。**
时钟链:BUSCLK(32MHz)→预分频÷5→TimerClk=6.4MHz。周期:6.4MHz÷100Hz=64000(满足16位限制)。LOAD值:64000-1=63999。占空比:64000×50%=32000→写入CCDAT2寄存器。
**第三步,AI参考SysConfig模板,确定8步初始化序列。**
AI从TI官方SysConfig模板提取完整的初始化步骤,而非凭经验手写。这个设计很关键——之前手写代码遗漏了setCCPDirection和setCounterControl两步,导致PA16完全无输出。
**第四步,AI生成C代码。**
生成完整的TIMA0_PA16_PWM_Init()函数,涵盖8个初始化步骤。所有宏定义放在文件顶部,便于后续修改。
**第五步,全自动闭环执行。**
运行master_agent.py,系统自动执行:Keil编译通过→寄存器验证→JLink烧录成功→逻辑分析仪波形验证。
**第六步,物理验证结果。**
逻辑分析仪真实抓取PA16引脚波形:
实际频率:99.7Hz(目标100Hz,误差0.3%)
占空比:49.8%(目标50%,误差0.2%)
误差在许可范围内,验证通过,代码可直接用于量产。
整个闭环从用户下指令到拿到验证报告,不到5分钟,零人工介入。
效率提升:迭代速度提升约10倍,物理验证覆盖率100%,人工值守时间降为0,知识可无限累积。
我的闭环工作流,AI不靠猜测写代码,而是基于TI官方知识库精确翻译;AI写的代码不靠信任交付,而是经过真实芯片物理检验才放行。
整个工作流,用到的技能我已经全部SKILL化,平台化,任何一款MCU基于这个工作流,都能够快速的进行全自动闭环开发,其中关键的技术已经申请专利。
有兴趣者可以加我微信:shujieshuyan
提供一键部署多agent协作全闭环开发嵌入式软件和社群服务。一次付费,一年持续升级工作流和SKILL。传授指挥,使用AI的方法论,让你也能够开发属于自己的SKILL和工作流。
免费的AI工具链也可以实现全闭环开发和量产的代码质量。opencode+deepseek 无需爬梯。AI编程代理工具链,十分钟部署完成。
夜雨聆风