首页/协议速查/UART 协议
🔗

UART 协议 异步串行

板内总线
从协议视角看串口:帧结构、波特率对齐、流控与调试口规范。
🧩 核心原理
📈 时序 / 工作过程图
UART 串口帧时序(8-N-1)起始位(低) → 8位数据(LSB在前) → 可选校验 → 停止位(高)TX起始位D0D1D2D3D4D5D6D7校验位停止位波特率 = 每秒传输位数(如 115200 = 1 位约 8.68µs)· 异步:双方各自按时钟对齐采样,无需时钟线
⚙️ 配置 / 使用要点
  1. 确定帧格式:8N1/8E1 等
  2. 选波特率:9600/115200/460800
  3. 发送侧:TX 空闲高、起始低、数据、停止高
  4. 接收侧:检测起始位下降沿后按波特率定时采样
🛠️ 项目示例
自定义协议帧(0xAA 0x55 帧头 + 长度 + 数据 + CRC)
// 帧格式: AA 55 [LEN] [DATA...] [CRC8]
// 发送:
uint8_t tx[8] = {0xAA, 0x55, 0x03, 0x01, 0x02, 0x03, 0x00};
tx[6] = crc8(tx, 6);            // CRC 覆盖到 LEN..DATA
HAL_UART_Transmit(&huart1, tx, 7, 100);

// 接收状态机:
// S_AA → 等0x55 → 等LEN → 收DATA[LEN] → 校验CRC → 组帧完成
❓ 面试高频
UART帧为什么要有起始位和停止位?
起始位下降沿做时间基准(帧同步),停止位保证帧间有恢复时间,接收端由此对齐每位采样点
怎么避免数据错位?
校验位+CRC、波特率误差控制、帧头帧尾+长度校验、超时判帧
调试串口日志规范?
分级(ERROR/WARN/INFO/DEBUG)、带时间戳、可开关、循环缓冲防阻塞
✅ 自查清单 (点击勾选,本地保存)
0/0
会画8N1帧结构
知道LSB先发
知道波特率误差容忍
会设计帧头+CRC协议
知道流控RTS/CTS