一、流控,顾名思义就是流量控制的意思。目的是协调收发双方,使数据不会丢失。
如果UART只有RX、TX两个信号,要流控的话只能是软流控;
如果有RX,TX,CTS,RTS 四个信号,则多半是支持硬流控的UART;
RTS (Require ToSend,发送请求)为输出信号,用于指示本设备准备好可接收数据,低电平有效,低电平说明本设备可以接收数据。
CTS (Clear ToSend,发送允许)为输入信号,用于判断是否可以向对方发送数据,低电平有效,低电平说明本设备可以向对方发送数据。
二、很多人用了串口很久都不知道这回事,这是因为很多场合确实没有必要。
收发双方波特率固定,并且接受数组足够大,这时不会出现接收方接受数组溢出导致数据丢失的情况,所以,以我的理解,使用流控的主要目的就是在数据量大,有可能出现接受数组溢出的时候,采取的一种协调收发双方的措施。
三、流控设计到RTS和CTS两个口,收发双方都有各自的RTS和CTS,如通信双方A,B。那么A的RTS就与B的CTS相连,A的CTS就与B的RTS相连。
RTS的作用是告诉对方我可以接受数据,是输出口;CTS的作用是根据电平高低控制发送或不发生数据。
如:A与B通信,现在A给B发送数据,当B出现某种情况(可能是接受缓存快要满了)的时候,B的RTS拉低(一般拉低表示有效,但也不一定),A的CTS是与B的RTS相连的,则A检测到它的CTS拉低,就知道B在告诉他暂时不要再发了。他就乖乖地停止发送。等到B可以继续接收数据的时候,B的RTS拉高,这时候A的CTS也拉高,A就知道可以继续发送数据了。如果A和B收发情况换一下也是一样的道理。
四、上面说的是硬件的流控,接收方通过引脚的高低来告知或叫做控制发送方的发送。这种方式不管发送的数据是二进制格式还是字符格式都适用。
另外跟硬件流控相对的还要软件流控。软件流控就不需要RTS和CTS两引脚了,
当接收方不想继续接收数据时,通过接收方的TXD给发送方发送一个XOFF信号,发送方接收到这个字符就暂停发送数据;
等到接收方可以继续接收数据时,接收方再给发送方发送一个XON信号,于是发送方继续发送数据。
因为XON、XOFF信号也是通过数据信号线发送的,所以软件流控在传输二进制数据时可能会出现错误,因为可能你发送的数据里面也有XON、XOFF对应的二进制值。但是这种情况也可以解决,比如对XON、XOFF进行转义。
来源:CSDN
作者:太白醉客
链接:https://blog.csdn.net/lx123010/article/details/103458334