2016-2022 All Rights Reserved.平安财经网.复制必究 联系QQ280 715 8082 备案号:闽ICP备19027007号-6
本站除标明“本站原创”外所有信息均转载自互联网 版权归原作者所有。
大家好,小科来为大家解答以上问题。【STM32学习笔记】USART 硬件流控这个很多人还不知道,现在让我们一起来看看吧!
1、流量控制的概念源于RS232标准,其中包含了串口和流量控制的定义。大家一定知道RS232中的“RS”是推荐标准的缩写,意思是“推荐标准”。与IEEE-1284、IEEE-1394等标准不同,它是由委员会定制的。所以不同厂家做RS232的时候会有一些差异,在流量控制上也会有差异。下面和大家探讨一下流量控制的功能、构造和操作。
2、本文主要研究硬件流量控制。
3、为什么需要流量控制?
4、在两个串口之间进行数据通信时,经常会出现数据丢失的现象,比如两台计算机之间或者一台计算机与单片机之间的通信。当接收端的数据缓冲区已满时,如果此时有数据发送,由于接收端没有时间处理,这样的数据可能会丢失。在工业领域或其他领域,经常会遇到这类问题。本质原因是速度和处理能力的不匹配。比如单片机主频只有20M或者30M,ARM的处理能力可能是200M,PC的处理能力是几个G,这就使得数据在传输过程中很容易丢失。
5、硬件流量控制就是为了解决这个速度匹配的问题。它的基本意思很简单。当接收方收到的数据无法处理时,它会向发送方发送一个不再接收的信号。收到这个信号后,发送方会停止发送,直到收到可以继续发送的信号。因此,流量控制本身可以控制数据传输的进度,从而防止数据丢失。
6、常见的流量控制方法有两种:硬件流量控制和软件流量控制。本文主要讨论硬件流程控制。
7、如何在STM32上搭建硬件流控?
8、图1,硬件流量控制的连接原理图
9、在图1中,之前使用的TX和RX是简单的三线式串行通信方法。如果启用硬件流控,需要在此基础上增加两条控制线,一条叫CTS(Clear To Send是输入信号),一条叫RTS(Require To Send是输出信号)。其实从名字就可以看出,一个是接收控制,一个是发送控制。
10、从硬件连接原理图可以看出,如果做USART 1到USART 2的传输,USART 1的TX接USART 2的RX,USART 1的CTS接USART 2的RTS,数据方向是从TX到RX,从串口1到串口2,流量控制是从RTS到CTS,也就是从串口2到串口1。
11、数据线的方向与流控线的方向相反。
12、从图1-硬件流控的连接原理图可以发现,数据线方向与流控线方向相反。为什么呢?本文前面提到的流量控制的主要概念是指接收方没有时间处理这样的数据或者处理能力较弱,需要让发送方等待。接收方发出的信号称为RTS信号,发送方的检测引脚称为CTS。所以硬件连接原理图的下半部分和上半部分正好相反,接收器接串口2的TX,RTS接串口2的CTS。
13、数据收到后如何操作?
14、图2,接收和RTS信号示意图
15、从图2-接收和RTS信号示意图可以看出,RTS信号在数据读取前一直保持高电平,我们可以看到在开始前都是高电平,这意味着告诉发送方数据还没有被取走,请等待发送方。一旦DMA或CPU从DR寄存器中读取数据,RTS将释放高电平并变为低电平。这时候如果发送方想发送数据,可以直接发送。
16、总之,RTS表明USART是否准备好接收新数据。
17、另外需要注意的是,当USART的FIFO模式,也就是缓冲模式开启时,RTS信号不会被拉高,直到FIFO满为止。
18、图3,传输和CTS信号示意图
19、图3-传输和CTS信号原理图中,TDR是USART的传输寄存器,数据写入该寄存器。如果此时移位寄存器中没有正在传输的数据,硬件会将TDR的内容移到移位寄存器中,然后开始按照设定的波特率、数据位等数据格式直接传输数据。这是正常的数据传输过程。
20、如果启用了硬件流量控制功能,将增加一个实时检测步骤。在图3中,当未接收到CTS信号时,TX传输线上的数据被连续传输,这表明停止位之后是下一个数据的开始位。
21、当数据2仍在TX线路上传输时,如果此时在CTS信号上检测到高电平,即使在数据2的停止位发送之前写入数据3,新写入的数据也不会在当前字节发送之后立即发送,而是等待直到在CTS引脚上检测到低电平,并且数据3的起始信号不会在TX引脚上开启。
22、需要注意的是在当前字节发送完之前的三个时钟周期,CTS 需要提前置位上,也就是在Data 2 结尾的地方如果只差一个 STOP bit,那有可能把 Data 3 连续发送出去。
23、有人可能会有疑问,CTS 不是马上就置位了吗,而且 Data 2 还没有完全发送出去。其实它是去检查 CTS 的标志位,设置这个标志位至少需要两个时钟周期,设置好了 CTS 的标志位之后,硬件才会去检查进而不去发送 Data 3 的 Start bit。但如果设置的 CTS 或者是检查到的 CTS 已经是非常晚了,那后面的一个字节就已经发送过去了,因为在发送 Data 3 的时候没看到有 CTS 的标志位,所以就要求我们至少提前三个时钟周期把 RTS 信号释放出来,让 CTS 把这个信号检测到进而让后面的数据不再发送。RTS 是只要在接收缓冲区非空的时候就会被提前置位,也就是结果寄存器里面只要有一个东西就会把它置位,都会放在当前的移位缓冲寄存器里。
24、在原则上是不会出现由于 RTS 置位比较晚,导致 CTS比较慢的现象。但是不排除一种情况,就是 CTS 和 RTS 之间的延迟特别大,或者说串口的波特率特别快,这个时候就容易出现由于 RTS 置位比较晚使得 CTS 比较慢的现象。
25、软件配置
▲图4,软件配置
27、在 CubeMX 里可以选择一个串口模式为异步模式,之后在它下面的硬件流控 RS232 中选择 CTS/RTS。这里要注意一下,CTS 和 RTS 是可以单独使能的,可以根据速度来选择使能 CTS 还是 RTS,如果我的速度比较慢的话就使能 RTS,因为 RTS 是给对方的信号,不需要考虑对方的处理能力。
28、另外,在 CubeMX 里也可以使能 RS485 的硬件流控,这里的流控实际上流控的是数据的方向,因为 RS485 是一个半双工的通讯模式,它的数据收的时候就不能发,发的时候不能收。STM32 上有一个 DE 管脚和 RS485 的接收器芯片直接相连,控制数据的收发,所以我们要知道在 STM32 的硬件流控中其实包含两方面的内容,一方面是关于速度的,也就是 RS232 的 CTS、RTS;另一方面是关于数据的方向的控制,它是基于 RS485 的,在软件中只需要设置它的功能,其他使用功能和串口都是一样的。
29、
30、硬件流控和软件流控的区别
31、软件流控是以特殊的字符来代表从机已经不能再接收新的数据了,基本的流程就是从机在接收数据很多的时候或主动给发送端发送一个特殊字符,当发送端接收到这个特殊字符后就不能再发送数据了。
32、软件流控很方便,不需要增加新的硬件,还是以前的TX、RX,但是使用了软件流控,它本身的字符也是数据,这个数据只不过是说在软件里把它设置了一个特殊的含义。如果它是一个全双工的通讯,在给另一个串口发送数据的时候如果也包含了这样一个特殊字符,对方就会误以为我让它不要再发送数据了,会有一定的概率出现错误,而硬件流控就不需要考虑这方面,只需要使用 CTS 和 RTS,所有的数据都是由硬件来操作的。
33、在实际的应用开发中,大家需要根据自己的实际情况来选择使用硬件流控还是软件流控。
34、审核
本文到此结束,希望对大家有所帮助。
2016-2022 All Rights Reserved.平安财经网.复制必究 联系QQ280 715 8082 备案号:闽ICP备19027007号-6
本站除标明“本站原创”外所有信息均转载自互联网 版权归原作者所有。