串口UART问答合集

📖 精选 📅 2026-09-04
#来源/立芯星球 #类型/问答合集 #技术/UART #技术/DMA #技术/缓冲区设计

串口UART问答合集

由本目录 9 篇串口主题问答的答案精华按知识点重组而成,原帖全部保留,每节末尾标注出处。

1. 没有空闲中断怎么断帧:DMA 剩余计数 + 时间

串口 DMA 接收,不用 IDLE 中断时:自己查询 DMA 剩余传输长度,结合时间来断帧。很多没有串口空闲中断的单片机都是这样做的;这样做还有一个目的——节省中断资源

串口dma接收,不用idle的话,可以自己查询dma剩余传输长度结合时间来断帧(Jack)

2. 为什么解析不放在"前端"线程

串口接收不定长架构中,不在前端线程解析数据,是因为数据解析可能耗时过长,不能及时响应中断——前端的职责是尽快把数据收下来,解析放到后端去做。

看完串口相关视频我是这么理解的:串口接收不定长架构(Jack)

3. 串口 DMA + 环形缓冲的收发包结构

串口 DMA 加环形缓冲区主要用于传输数据;自定义协议帧的包结构为:包头识别符、包长度、净荷数据、包尾识别符

  • 发送:数据放到一个定长 buffer 后,启动串口 DMA 发送函数发出;
  • 接收:串口 + 环形缓冲区,用于实时接收命令。

老师,我们的串口dma加环形缓冲区主要是用于传输数据(Jack)

4. 疑难杂症:发送时最后一个字节先发出来

使用 ST 提供的串口发送函数出现"最后一个字节先发出来"的现象,星主的判断是:你的环形缓冲区上一包数据还没发完(发送时序被上一包残留占用)。

我猜测,因为你的环形缓冲区没有(Jack)

5. USB 口可以当串口用吗

可以。USB 可以枚举成串口(CDC),但这种串口需要系统完整跑起来,否则可能枚举不成功;枚举失败时电脑端不会出现 COM 口。

我想问一下,单片机的USB口,可以当串口使用吗?我之前USB口是用串口,用来调试(Jack)

6. 参考工程资源

B 站视频配套的"串口单字节不定长双 buffer 的 DMA 和 CPU 并行工作 Demo"完整工程(附件 zip)。

B站视频中的串口单字节不定长双buffer的DMA和CPU并行工作Demo(Jack)

7. 更多相关问答(答案在原帖截图中)

来源笔记