依然是不写一行代码,只给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. 工作流程

发送过程

  1. 空闲时 TX 保持高电平
  2. CPU 写入数据到发送缓冲区
  3. UART 自动添加起始位、停止位
  4. 按波特率逐位发送(LSB 优先)
  5. 发送完成触发中断或设置标志位

接收过程

  1. 检测到下降沿(起始位)
  2. 等待 1.5 位时间,采样确认起始位
  3. 按位时间间隔采样数据位中心
  4. 存入接收缓冲区
  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改一改串口参数,一边实现功能,一边学习

同学们自己实践

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐