Vibecoding 全自动agent工作流开发嵌入式软件之串口数据发送
依然是不写一行代码,只给Agent指令,实现串口数据发送功能。
使用Agent开发嵌入式软件,最大的一个特点,就是我不需要了解使用的单片机管脚分配,外设配置,直接让AI去分析。
AI调试串口输出,一切使用AI的方法。
第一步:我先要知道使用的MCU,哪些管脚有串口发送功能,直接问AI。
给出指令

输出结果:MSPM0G3519 UART_TX 引脚映射
根据datasheet分析,MSPM0G3519支持 8个UART模块(UART0~UART7),以下是所有可用的 UART TX引脚:
常用/推荐引脚

第二步:搭建硬件开发环境
用PA10作为TX引脚,接逻辑分析仪,开发板和逻辑分析接入电脑
第三步 :给出实现的功能指令
使用PA10为TX引脚,实现100MS周期循环发送0XAA ,0X55,0X33,0X88,波特率9600.已经接好所有硬件,PA10接逻辑分析仪的PH0。全闭环开发

第四步:刷牙洗脸,回来验收结果

AI全闭环开发总结
需求
PA10 (UART0_TX) 每100ms循环发送 0xAA, 0x55, 0x33, 0x88,波特率9600bps。
Phase 1: 代码生成
修改文件 3 个:
|
文件 |
修改内容 |
|
ti_msp_dl_config.h |
添加 UART0 宏定义(PA10, PINCM21, 9600bps, IBRD=208, FBRD=21) |
|
ti_msp_dl_config.c |
添加 UART0 初始化:reset/power → GPIO外设功能配置 → 时钟/波特率/FIFO |
|
main.c |
主循环:transmitDataBlocking 发送4字节 → delay_cycles(3,200,000) |
关键配置:
- UART0 时钟:BUSCLK 32MHz, 16x 过采样
- 波特率误差:+0.0025% (9600.24 Hz)
- GPIO:PA10 配置为 IOMUX_PINCM21_PF_UART0_TX
Phase 2: 编译
Keil MDK ARMCLANG v6.24
- 0 Error(s), 0 Warning(s)
- Code: 788 bytes
- 编译时间:2秒
Phase 3: 烧录
DSLite + XDS110
- 擦除 → 写入 → 运行
- Status: Success
Phase 4: 验证
逻辑分析仪 (CH0)
- 采样率:10MHz
- 解码:UART 9600-8-N-1
- 实测周期:~100ms ✅
- 字节间隔:~1.04ms (符合9600bps) ✅
闭环结果
|
指标 |
结果 |
|
编译 |
✅ 0 errors |
|
烧录 |
✅ Success |
|
功能 |
✅ 用户手动验证通过 |
|
总耗时 |
< 60秒 |
状态:闭环完成
第五步:用AI学习串口基础知识
问你想问题的问题:比如,什么是uart?,怎么开发uart程序?,uart怎么测试?,uart有哪些常见问题?uart和其它通信方式有什么优势和劣势?大胆的问,不要再去网上搜索,直接问你的智能体。


UART 详解
1. 基础概念
UART(Universal Asynchronous Receiver/Transmitter)通用异步收发器:
- 异步通信:无时钟线,依靠双方约定的波特率同步
- 全双工:TX(发送)和 RX(接收)可同时工作
- 点对点:一对一通信(区别于总线型的 I2C/SPI)
2. 数据帧格式
[起始位] [数据位(5-9)] [校验位(可选)] [停止位(1-2)]
|
字段 |
说明 |
|
起始位 |
1位低电平(0),标志传输开始 |
|
数据位 |
5-9位,LSB 先传,常用 8 位 |
|
校验位 |
奇校验/偶校验/无校验 |
|
停止位 |
1、1.5 或 2 位高电平(1) |
典型配置:8N1(8 数据位、无校验、1 停止位)
3. 波特率与误差
波特率:每秒传输的码元数(bits per second)
|
常用波特率 |
适用场景 |
|
9600 |
低速、稳定通信 |
|
115200 |
高速调试,最常用 |
|
921600 |
高速下载/大量数据传输 |
时钟误差容限:
- 8 数据位+无校验:±3% 以内
- 8 数据位+校验:±2% 以内
误差计算公式:|实际波特率 - 目标波特率| / 目标波特率 × 100%
4. 硬件连接
单片机 A 单片机 B/电脑 TX ───────────► RX RX ◄─────────── TX GND ──────────── GND (必须共地!)
电平标准:
|
类型 |
逻辑 1 |
逻辑 0 |
特点 |
|
TTL |
3.3V/5V |
0V |
板级通信,距离短 |
|
RS-232 |
-3V~-15V |
+3V~+15V |
电脑串口,距离 15m |
|
RS-485 |
差分信号 |
差分信号 |
总线型,距离 1200m |
5. 工作流程
发送过程
- 空闲时 TX 保持高电平
- CPU 写入数据到发送缓冲区
- UART 自动添加起始位、停止位
- 按波特率逐位发送(LSB 优先)
- 发送完成触发中断或设置标志位
接收过程
- 检测到下降沿(起始位)
- 等待 1.5 位时间,采样确认起始位
- 按位时间间隔采样数据位中心
- 存入接收缓冲区
- 触发接收中断或设置标志位
6. 关键寄存器(以 STM32 为例)
|
寄存器 |
功能 |
|
USART_SR |
状态寄存器(TXE、RXNE、TC 标志) |
|
USART_DR |
数据寄存器 |
|
USART_BRR |
波特率寄存器 |
|
USART_CR1 |
控制寄存器 1(使能、字长、校验、中断) |
|
USART_CR2 |
控制寄存器 2(停止位配置) |
7. 代码示例(STM32 HAL)
// 初始化 huart.Instance = USART1; huart.Init.BaudRate = 115200; huart.Init.WordLength = UART_WORDLENGTH_8B; huart.Init.StopBits = UART_STOPBITS_1; huart.Init.Parity = UART_PARITY_NONE; HAL_UART_Init(&huart); // 发送 HAL_UART_Transmit(&huart, (uint8_t*)"Hello\r\n", 7, 100); // 接收(轮询) uint8_t rx; HAL_UART_Receive(&huart, &rx, 1, HAL_MAX_DELAY);
8. 调试 checklist
|
现象 |
可能原因 |
排查方法 |
|
无输出 |
引脚未配置复用 |
检查 GPIO 模式 |
|
乱码 |
波特率不匹配/晶振错误 |
逻辑分析仪测量实际波特率 |
|
丢数据 |
中断处理太慢 |
使用 DMA 或增大缓冲区 |
|
偶尔错码 |
时钟误差过大 |
计算实际波特率误差 |
|
只能发不能收 |
RX 引脚冲突 |
检查是否被其他功能占用 |
第六步:根据学的知识,指挥Agent改一改串口参数,一边实现功能,一边学习
同学们自己实践
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)