最近我在整理 Project Velocity 的 AI Skill。
很多人以为,AI Skill 就是一个更长的 Prompt。
但在嵌入式工程里,真正有用的 AI Skill,第一步不是让 AI 写代码,而是让 AI 先理解:
硬件是什么,边界在哪里,哪些地方不能乱动。
今天先做第一步:
把 STM32F103 MCU 的硬件资料整理成一个 AI 可以读取、理解和长期复用的硬件 Skill。
一、为什么今天不急着写 Zephyr 代码?
在 Project Velocity 中,STM32F103 节点不是一个简单的单片机示例。
它未来要成为 MCU–Edge–Cloud AIoT 系统中的底层节点。
它会接入传感器、执行器、CAN/CANopen、RK3588 Edge Gateway,最终进入 ThingsBoard 云平台。
但是,在这些工作开始之前,必须先完成一件事:
让 AI 编程 Agent 看懂 STM32F103 这块板子的硬件边界。
否则,AI 很容易写出这样的代码:
能编译;
看起来合理;
但真实板子跑不起来。
因为嵌入式系统不是纯软件系统。
引脚、供电、BOOT(启动模式 / 启动配置)、SWD(串行线调试)、USB、晶振、LED、电流限制,这些硬件事实不能靠 AI 猜。
二、这些 .md 文件是怎么来的?
在开始设计 STM32 Zephyr 节点的 Skill 之前,我先做了一件基础工作:
把原来的工程资料转换成 Markdown。
例如:
PDF 格式的 STM32F103 原理图;
Excel 格式的芯片引脚定义表;
图片格式的开发板管脚图;
Word 或 PDF 格式的设计说明文档;
后续还包括传感器、执行器、CANopen、测试计划等资料。
为什么要先转成 Markdown?
因为 AI Agent 最容易读取、检索和理解的工程资料,不是 PDF,也不是图片,而是结构化 Markdown。
原理图适合工程师看,
Markdown 更适合 AI 读。
Excel 适合人整理表格,
Markdown 更适合 AI 做上下文分析。
图片管脚图适合快速查阅,
Markdown 表格更适合 AI 检查引脚冲突。
关于如何把 PDF 原理图、Excel 引脚表、图片管脚图和设计文档转换成 Markdown,我在前面一篇已经专门写过:
《Markdown第三篇|AI编程第一步:把 Excel、PDF、图片变成 Markdown——以 Project Velocity 的 STM32 为例》
这篇就不再展开转换方法,今天重点讲:
转换成 Markdown 之后,如何把这些文件组织成 STM32F103 Hardware Skill。
三、今天我完成了什么?
今天我先把 STM32F103 MCU 相关的硬件资料整理成了一个 Skill 目录。
目前目录大致如下:
stm32_zephyr_node_skill/
├── README.md
└── inputs/
├── board_photo_back.jpg
├── board_photo_front.jpg
├── hardware_constraints.md
├── jumper_setting.md
├── stm32f103_board_pinout.md
├── stm32f103_chip_pin_definition.md
├── stm32f103_schematic.md
└── swd_connection.md
这不是普通资料归档。
它的目标是让 AI 编程 Agent 在生成 Zephyr 工程之前,先读懂硬件。
四、这些文件分别解决什么问题?
1. README.md:Skill 的入口文件
README.md 是整个 Skill 的入口。
它告诉 AI:
这个 Skill 用于什么硬件;
它属于 Project Velocity 哪一层;
有哪些输入文件;
哪些引脚需要保留;
生成代码前必须检查什么;
最终应该输出哪些工程文件。
也就是说,README.md 不是普通说明文档,而是 AI Agent 使用这个 Skill 的“工程导航图”。
AI Agent 打开这个目录后,应该先读它。
2. stm32f103_schematic.md:原理图结构化文件
这个文件来自 STM32F103 最小系统原理图。
它把原理图中的关键信息转换成 Markdown,包括:
电源输入;
5V 转 3.3V;
USB D+ / D-;
BOOT0 / BOOT1;
SWD 调试接口;
8MHz 主晶振;
32.768kHz RTC 晶振;
PC13 用户 LED;
扩展排针。
例如,这块板子的 USB D- 接 PA11,USB D+ 接 PA12;SWDIO 接 PA13,SWCLK 接 PA14;PC13 是用户 LED;主晶振是 8MHz。
这些信息将直接影响 Zephyr 的 Device Tree、GPIO 配置和调试方式。
3. stm32f103_board_pinout.md:开发板管脚图文件
这个文件来自 STM32F103 开发板管脚图。
它告诉 AI:
每个排针对应哪个 STM32 引脚;
每个引脚有哪些复用功能;
哪些引脚可做 ADC;
哪些引脚可做 USART、SPI、I2C、CAN;
哪些引脚和 USB、SWD、BOOT 相关。
例如:
PA9 / PA10 可用于 USART1;
PA11 / PA12 与 USB 和 CAN 功能相关;
PB6 / PB7 可用于 I2C1;
PB8 / PB9 可作为 I2C1 或 CAN 重映射候选。
这类资料非常重要。
因为 AI 如果只靠模型记忆,很容易把管脚复用关系写错。
4. stm32f103_chip_pin_definition.md:芯片引脚定义文件
开发板管脚图告诉 AI“板子上能看到什么”。
芯片引脚定义表则告诉 AI“芯片本身支持什么”。
这个文件包括:
芯片引脚编号;
主功能;
默认复用功能;
重定义功能;
哪些引脚是 5V tolerant;
哪些是电源、地、复位、BOOT、时钟引脚。
例如:
PA13 是 JTMS / SWDIO;
PA14 是 JTCK / SWCLK;
PB10 / PB11 可用于 I2C2 或 USART3;
PB12–PB15 可用于 SPI2 或 USART3。
这可以帮助 AI 判断:
哪些引脚适合用;
哪些引脚应该保留;
哪些功能之间可能冲突。
5. jumper_setting.md:BOOT 跳线说明文件
这个文件告诉 AI:
BOOT0 和 BOOT1 如何设置;
正常运行时应该如何启动;
什么时候进入 System Bootloader;
烧录完成后为什么要把 BOOT0 重新接回 GND。
对 STM32F103 来说,BOOT 设置非常关键。
如果 BOOT0 设置错了,代码可能已经烧录成功,但板子就是不运行。
所以这个文件的价值是:
让 AI 不仅会写代码,还能解释为什么板子启动不了。
6. swd_connection.md:SWD 烧录与调试连接文件
这个文件告诉 AI:
ST-Link 应该如何连接 STM32F103;
SWDIO 是 PA13;
SWCLK 是 PA14;
GND 必须共地;
3.3V 是目标参考电压;
NRST 是否建议连接;
烧录失败时应该先检查什么。
它还有一个非常重要的作用:
提醒 AI 不要随便占用 PA13 和 PA14。
因为这两个引脚是调试生命线。
如果 AI 把 PA13 / PA14 分配给普通 GPIO 或外设,后面调试和恢复都会变得很麻烦。
7. hardware_constraints.md:硬件约束文件
这是今天最重要的文件之一。
它告诉 AI:
哪些硬件边界不能违反。
例如:
STM32F103 工作在 3.3V;
不是所有 GPIO 都能承受 5V;
PC13 不能当普通大电流输出;
PA13 / PA14 应保留给 SWD;
BOOT0 / PB2 与启动模式有关;
PA11 / PA12 涉及 USB,也可能和 CAN 功能冲突;
引脚分配前必须检查复用冲突;
Zephyr overlay 不能脱离原理图生成。
这个文件相当于给 AI 设置“工程红线”。
AI 不是不能写代码,而是必须在这些红线内写代码。
五、为什么我要把这些资料都组织成 Skill?
因为 AI Agent 写嵌入式代码时,最大的问题不是不会写语法。
最大的问题是:
它不知道真实硬件边界。
如果 AI 不知道原理图,它可能乱用引脚。
如果 AI 不知道管脚复用,它可能制造外设冲突。
如果 AI 不知道 SWD,它可能占用调试口。
如果 AI 不知道 BOOT,它可能写不出正确烧录说明。
如果 AI 不知道 PC13 的板级连接,它可能连 LED 逻辑都写反。
所以 STM32 Zephyr Node Skill 的第一步,不是 main.c。
而是:
把 STM32F103 的硬件事实结构化。
六、这和 Vibe Coding 有什么不同?
Vibe Coding 通常是这样开始的:
“帮我写一个 STM32 Zephyr 程序。”
AI-Assisted Engineering 则是这样开始的:
“这里是 STM32F103 的原理图、管脚图、芯片引脚表、BOOT 设置、SWD 连接和硬件约束。请先读取这些资料,再生成 Zephyr 工程。”
区别就在这里。
前者依赖 AI 猜。
后者让 AI 在工程边界内工作。
对嵌入式系统来说,这个区别非常大。
因为嵌入式工程不是只要代码能编译。
它还必须能烧录;
能启动;
能调试;
不能占用错误引脚;
不能违反电气边界;
不能破坏系统通信链路。
七、今天这一步的核心价值
今天这个 Skill 还没有接传感器,也没有接执行器。
但它已经完成了一个很重要的基础工作:
把 STM32F103 的硬件事实变成 AI 可以调用的工程知识。
这意味着,后面无论是让 AI 生成:
Device Tree overlay;prj.conf;main.c;
GPIO 控制;
UART 日志;
CAN/CANopen 配置;
传感器驱动;
执行器控制逻辑;
AI 都不再是从空白开始猜。
它会先回到这个硬件Skill,确认硬件边界。
八、我暂时不把传感器和执行器放进今天这篇
今天只做 MCU 硬件输入层。
也就是:
STM32F103 本体;
开发板资源;
电源;
BOOT;
SWD;
USB;
晶振;
LED;
管脚复用;
硬件约束。
传感器和执行器我准备放到明天。
因为那是另一个层次的问题:
哪些传感器接到哪里;
哪些执行器由哪些 GPIO、PWM、ADC、I2C、SPI、CAN 控制;
这些外设如何进入 Zephyr Device Tree;
如何形成 Project Velocity 的节点数据模型。
今天先把地基打好。
九、结语
AI 写嵌入式代码,第一步不是写 main.c。
第一步是让 AI 看懂硬件。
这也是我设计 Project Velocity STM32 Zephyr Node Skill 的原因。
不是为了让 AI 多写几行代码。
而是为了把工程师过去存在脑子里的硬件经验,变成 AI 可以长期调用、可以检查、可以复用的 Skill。
今天完成的是第一层:
STM32F103 MCU Hardware Skill。
下一篇,我会继续整理:
如何把传感器和执行器加入这个 Skill,让 STM32 节点真正进入 Project Velocity 的 AIoT 系统。
文中提到的 STM32F103 相关 .md 文件,包括原理图、开发板管脚图、芯片引脚定义、BOOT 跳线、SWD 连接和硬件约束等,如果大家想参考,欢迎在公众号后台私信我。
夜雨聆风