OutlierLi

Back

流控#

流控分为硬流控和软流控。软流控的实现需要占据数据通道,硬流控通过硬件实现,无需占据数据通道。

串口流控示例#

串口流控:

串口流控示例

串口通过 TX 和 RX 发送数据,通过拉高或者拉低 TX 电平来发送数据,通过 RX 的电平采样数据来接收数据。

RTS:输入管脚,请求对方发送数据。高电平表示不允许对端发送,低电平表示允许对端发送数据。

流控实现细节分析#

串口数据传输流程#

串口数据传输流程

起始位、校验位、结束位,针对的是每一个字节。也就是一个字节 8 bit,加上起始位、校验位、结束位,发送到 TX 线上的电平信号为 11 bit。默认 TX 线常态为高,所以停止位为 1。

轮询数据传输流程:

轮询数据传输流程

轮询会大量占据 CPU 的时间片,对性能影响很大。外循环和内循环实现了生产者-消费者模型。

中断实现流程:

中断实现流程

中断是大部分设备使用的方案。

DMA 实现流程:

DMA 实现流程

发送状态机 FSM:

发送状态机 FSM

bit_tick 为波特率时钟驱动。流控也是在这里进行控制,CTS 为输入管脚,控制本端的 TX。当 CTS 为高,FIFO 即使不空,也不会进入 LOAD 流程,不会进行 START,所以看上去就是卡在了当前字节。

串口通信原理与流控
https://outlierli-s-blog.pages.dev/blog/serial-communication-flow-control/post
Author OutlierLi
Published at 18 juli 2026