USART 数据流控制 也就是 USART_HardwareFlowControl

一、流控制的作用

这里讲到的 “流”,指的是数据流;在数据通信中,流控制是管理两个节点之间数据传输速率的过程,以防止出现接收端的数据缓冲区已满,而发送端依然继续发送数据,所导致数据丢失

二、工作原理

当接收端的数据缓冲区已满,无法处理数据来时,就发出 “不再接收” 的信号,发送端则停止发送,直到发送端收到 “可以继续发送” 的信号再发送数据。计算机中常用的两种流控制分别是硬件流控制(RTS /CTS、DTR /DSR等)和软件流控制(XON /XOFF)

RS232的简化连线法

原来 RTS和 CTS是用来询问和回答是否可以传输数据。 但在这种连接方式下,就成了纯粹告诉对方自己是否可以进行通讯。 此时 RTS和 DTR都可以用来对数据流进行控制。

A端的 DTR(数据设备就绪)发出信号, 当 B端准备好后,B端的 DTR(数据设备就绪)向 A端的 DSR(通讯设备就绪)发出信号。 接下来就可以通过 RTS(请求发送)和 DTR(允许发送)来控制通信。

3、进一步简化(也就是以 RTS /CTS为主)

从上面的流程可以看到,硬件流控制主要是 RTS /CTS和 DTR /DSR来控制,但是,人嘛,能懒就懒,因此现在很多时候都只是用 RTS /CTS告诉对方自己是否可以进行通讯,而直接跳过了 DTR /DSR的就绪状态检测

RTS:是模块的输入端,用于MCU通知模块,MCU是否准备好,模块是否可向MCU发送信息,RTS的有效电平为低。

CTS:是模块的输出端,用于模块通知MCU,模块是否准备好,MCU是否可向模块发送信息,CTS的有效电平为低

在使用 RTS /CTS时,它们都是低电平有效,因此,需要注意的有两点,一点是电平变化,第二点是信号传递(RTS /CTS无时无刻不在传递信号,也就是RTS /CTS的高低电平),一般在上位机中一旦打开串口,RTS会拉置高电平,然后等待数据发送,使得低电平有效,RTS 信号在数据没有被读取之前都是保持在高电平状态,我们可以看到在 Start 之前都是高电平,这也就是告诉发送端,数据还没有被拿走,请发送端等待,一旦数据被 DMA 或者 CPU 从 DR 寄存器读取之后,RTS 就释放高电平,变为低电平,这时候发送端如果想发送数据的话就可以直接发送了。

当 Data 2 还在 TX 线上进行发送的时候,如果此时在 CTS 信号上检测到了高电平,即使在 Data 2 的 STOP 位发送完之前写入了 Data 3,在当前的字节发送完之后是不会马上发送新写入的数据的,而是要等待,直到在 CTS 管脚上检测为低电平后,TX脚上才会开启 Data 3 的 Start 信号。

RTS信号是发送端向接收端发送信号,表示发送端已经准备好发送数据,而CTS信号是接收端向发送端发送信号,表示接收端已经准备好接收数据。这两个信号在不同的方向上进行控制,所以需要在发送端和接收端各有一个。

在一般来说,在发送端,当发送缓冲区满时,发送端就会发送RTS信号让接收端不能再接受数据,在接收端接收完数据后,就发送CTS信号告诉发送端可以继续发送数据。

值得注意的,并不是说硬件流控制就单纯的依靠硬件,它还需要软件去处理识别,因为硬件流控制所做的只是给出信号电平,真正的控制发送使能还得看软件的处理

STM32的USART注意:

通常USART1接口的通信速率较快,其它USART接口较慢。如STM32F103C8T6的USART1接口通信速率是4.5Mbps,其它USART接口的通信速率是2.25Mbps。片上所有的USART接口都可以使用DMA操作。

UART和COM是物理接口形式(物理接口)

TTL和RS-232是电平标准(电信号)

默认的TX GPIO:  模式为:推挽式复用功能    输出速率:高速

默认的RX GPIO: 模式为:浮空输入

软件流控制

软件流控制(Software flow control)是在计算机数据链路中的一种流控制方法,特别适用于 RS-232串口通信;它是采用特殊字符来传输带内信令,特殊编码字符称作 XOFFXON(分别表示 “transmit off” 与 “transmit on”)。因此,也被称作 “XON /XOFF流控制”;

使用 ASCII字符集,XOFF一般为字节值 19(十进制),XON为字节值 17

值得注意的是:是接受方把 XON /XOFF信号发给发送方来控制发送方何时发送数据的,这些信号是与发送数据的传输方向相反的

它的处理主要是:接收方利用 XON信号告诉发送方,我已经准备好接受更多的数据了,利用 XOFF信号告诉发送方停止发送数据,直到接受方发送 XON信号告诉发送方我再次准备好了。

引用来自:UART串口流控制(Flow control)「建议收藏」 – 腾讯云开发者社区-腾讯云

物联沃分享整理
物联沃-IOTWORD物联网 » 优化USART数据流控制

发表评论