UARTRS232的CTS与RTS.docx
《UARTRS232的CTS与RTS.docx》由会员分享,可在线阅读,更多相关《UARTRS232的CTS与RTS.docx(10页珍藏版)》请在冰豆网上搜索。
![UARTRS232的CTS与RTS.docx](https://file1.bdocx.com/fileroot1/2022-10/25/888fb6ab-5b04-4d99-84dc-7dbc8b25d6bd/888fb6ab-5b04-4d99-84dc-7dbc8b25d6bd1.gif)
UARTRS232的CTS与RTS
UARTRS232接口PIN脚定义
接口定义RS232(DB9)
1DCD载波检测
2RXD接收数据
3TXD发送数据
4DTR数据终端准备好
5SG信号地
6DSR数据准备好
7RTS请求发送
8CTS清除发送
9RI振铃提示
接口定义RS232(DB25)
1频蔽地线
2TXD发送数据
3RXD接收数据
4RTS请求发送
5CTS允许发送
6DSR数据准备好
7SG信号地
8DCD载波检测
9发送返回(+)
10未定义
11数据发送(-)
12~17未定义
18数据接收(+)
19未定义
20数据终端准备好DTR
21未定义
22振铃RI
23~24未定义
25接收返回(-)
接口电平(RS232采用负逻辑电平)
-15~-3:
逻辑1;
+15~+3:
逻辑0;
电压值通常在7V左右
RS232电平标准中分为正负电平,PC机一般输出+15V和-15V。
而RS232规定的电平范围如下:
代表“0”,有效:
+3V--+15V
代表“1”,无效:
-15V---3V
一般的电平需要输出在正负6V以上,这样才能更好的去除干扰。
而TTL电平标准中定义如下:
代表“0”,有效:
0V--0.3V
代表“1”,无效:
3.3V/5V
UART波特率一般为:
115.2KBIT/S但不会太高,参考华为。
接下来是RTS和CTS的作用。
在我使用的中兴公司MC8331A的CDMA模块中,其中对模块的RTS和CTS引脚定义如下:
/RTS:
输出,模块允许用户(PC机或MCU)发送数据,低电平有效。
/CTS:
输入,用户允许模块发送数据,低电平有效。
通过模块引脚的定义的阅读,我们其实就能很清楚的知道RTS,CTS硬件流控制时的作用了。
要注意的是上面的/RTS、/CTS都是从模块的角度而言的。
对于MCU或PC机而言,RTS同样也是输出,当有效时表示PC机马上要向模块发送数据标识,“0”时有效。
CTS是输入,有效时表示模块马上要向PC机发送数据了,同样“0”时有效。
通过上面分析,我们不难得出当PC机(或MCU)与CDMA模块RTS、CTS硬件流控制相连时的硬件连接图如下,即交叉相连:
要值得注意的是,如果MC8331A模块的RTS和CTS均未接出来的时候,CTS默认是低电平的,即有效状态。
这样不管模块是否使用RTS、CTS硬件流控制,通讯都是能够正常完成的。
这也是为什么MC8331A的出厂设置中有RTS/CTS硬件流控制,在硬件电路设计中没有把这两个脚接出来但同样也是可以进行通讯控制的原因。
1.UART
UART(UniversalAsynchronousReceiverandTransmitter)通用异步收发器(异步串行通信口),是一种通用的数据通信协议,它包括了RS232、RS499、RS423、RS422和RS485等接口标准规范和总线标准规范,即UART是异步串行通信口的总称。
而RS232、RS499、RS423、RS422和RS485等,是对应各种异步串行通信口的接口标准和总线标准,它规定了通信口的电气特性、传输速率、连接特性和接口的机械特性等内容,这些东东都是物理层的概念。
通信协议,是属于通信网络中的数据链路层的概念。
1.1RS232
COM口是PC(个人计算机)上,异步串行通信口的简写。
由于历史原因,IBM的PC外部接口配置为RS232,成为实际上的PC界默认标准。
所以,现在PC机的COM口均为RS232。
上图最右边的是串口接口,统称为RS232接口(封装DB9)
通信过程中实际只有两个管脚参与通信
2脚:
电脑的输入RXD
3脚:
电脑的输出TXD
5脚:
接地
通过2,3脚就实现全双工(可同时收发)的串行异步通信
UARTRS232的CTS与RTS
目前较为常用的串口有9针串口(DB9)和25针串口(DB25),通信距离较近时(<12m),可以用电缆线直接连接标准RS232端口(RS422,RS485较远),若距离较远,需附加调制解调器(MODEM)。
最为简单且常用的是三线制接法,即地、接收数据和发送数据三脚相连,本文只涉及到最为基本的接法,且直接用RS232相连。
1.DB9和DB25的常用信号脚说明
9针串口(DB9)25针串口(DB25)
针号功能说明缩写针号功能说明缩写
1数据载波检测DCD8数据载波检测DCD
2接收数据RXD3接收数据RXD
3发送数据TXD2发送数据TXD
4数据终端准备DTR20数据终端准备DTR
5信号地GND7信号地GND
6数据设备准备好DSR6数据准备好DSR
7请求发送RTS4请求发送RTS
8清除发送CTS5清除发送CTS
9振铃指示DELL22振铃指示DELL
强烈建议不要带电插拨串口,插拨时至少有一端是断电的,否则串口易损坏。
我们在串行通讯处理中,常常看到RTS/CTS和XON/XOFF这两个选项,这就是两个流控制的选项,目前流控制主要应用于调制解调器的数据通讯中,但对普通RS232编程,了解一点这方面的知识是有好处的。
那么,流控制在串行通讯中有何作用,在编制串行通讯程序怎样应用呢?
这里我们就来谈谈这个问题。
1.流控制在串行通讯中的作用
这里讲到的“流”,当然指的是数据流。
数据在两个串口之间传输时,常常会出现丢失数据的现象,或者两台计算机的处理速度不同,如台式机与单片机之间的通讯,接收端数据缓冲区已满,则此时继续发送来的数据就会丢失。
现在我们在网络上通过MODEM进行数据传输,这个问题就尤为突出。
流控制能解决这个问题,当接收端数据处理不过来时,就发出“不再接收”的信号,发送端就停止发送,直到收到“可以继续发送”的信号再发送数据。
因此流控制可以控制数据传输的进程,防止数据的丢失。
PC机中常用的两种流控制是硬件流控制(包括RTS/CTS、DTR/CTS等)和软件流控制XON/XOFF(继续/停止),下面分别说明。
2.硬件流控制
硬件流控制常用的有RTS/CTS流控制和DTR/DSR(数据终端就绪/数据设置就绪)流控制。
硬件流控制必须将相应的电缆线连上,用RTS/CTS(请求发送/清除发送)流控制时,应将通讯两端的RTS、CTS线对应相连,数据终端设备(如计算机)使用RTS来起始调制解调器或其它数据通讯设备的数据流,而数据通讯设备(如调制解调器)则用CTS来起动和暂停来自计算机的数据流。
这种硬件握手方式的过程为:
我们在编程时根据接收端缓冲区大小设置一个高位标志(可为缓冲区大小的75%)和一个低位标志(可为缓冲区大小的25%),当缓冲区内数据量达到高位时,我们在接收端将CTS线置低电平(送逻辑0),当发送端的程序检测到CTS为低后,就停止发送数据,直到接收端缓冲区的数据量低于低位而将CTS置高电平。
RTS则用来标明接收设备有没有准备好接收数据。
常用的流控制还有还有DTR/DSR(数据终端就绪/数据设置就绪)。
我们在此不再详述。
由于流控制的多样性,我个人认为,当软件里用了流控制时,应做详细的说明,如何接线,如何应用。
3.软件流控制
由于电缆线的限制,我们在普通的控制通讯中一般不用硬件流控制,而用软件流控制。
一般通过XON/XOFF来实现软件流控制。
常用方法是:
当接收端的输入缓冲区内数据量超过设定的高位时,就向数据发送端发出XOFF字符(十进制的19或Control-S,设备编程说明书应该有详细阐述),发送端收到XOFF字符后就立即停止发送数据;当接收端的输入缓冲区内数据量低于设定的低位时,就向数据发送端发出XON字符(十进制的17或Control-Q),发送端收到XON字符后就立即开始发送数据。
一般可以从设备配套源程序中找到发送的是什么字符。
应该注意,若传输的是二进制数据,标志字符也有可能在数据流中出现而引起误操作,这是软件流控制的缺陷,而硬件流控制不会有这个问题。
硬流控的RTS、CTS :
RTS(RequireToSend,发送请求)为输出信号,用于指示本设备准备好可接收;CTS(ClearToSend,发送清除)为输入信号,有效时停止发送。
假定A、B两设备通信,A设备的RTS连接B设备的CTS;A设备的CTS连接B设备的RTS。
前一路信号控制B设备的发送,后一路信号控制A设备的发送。
对B设备的发送(A设备接收)来说,如果A设备接收缓冲快满的时发出RTS信号(意思通知B设备停止发送),B设备通过CTS检测到该信号,停止发送;一段时间后A设备接收缓冲有了空余,发出RTS信号,指示B设备开始发送数据。
A设备发(B设备接收)类似。
上述功能也能在数据流中插入Xoff(特殊字符)和Xon(另一个特殊字符)信号来实现。
A设备一旦接收到B设备发送过来的Xoff,立刻停止发送;反之,如接收到B设备发送过来的Xon,则恢复发送数据给B设备。
同理,B设备也类似,从而实现收发双方的速度匹配。
半双工的方向切换:
RS232中使用DTR(DateTerminalReady,数据终端准备)与DSR(DataSetReady,数据设备准备好)进行主流控,类似上述的RTS与CTS。
对半双工的通信的DTE(DateTerminalEquipment,数据终端设备)与DCE(DatacircuitEquipment)来说,默认的方向是DTE接收,DCE发送。
如果DTE要发送数据,必须发出RTS信号,请求发送数据。
DCE收到后如果空闲则发出CTS回应RTS信号,表示响应请求,这样通信方向就变为DTE->TCE,同时RTS与CTS信号必须一直保持。
从这里可以看出,CTS,TRS虽然也有点流控的意思(如CTS没有发出,DTE也不能发送数据),但主要是用来进行方向切换的。
如果UART只有RX、TX两个信号,要流控的话只能是软流控;如果有RX,TX,CTS,RTS四个信号,则多半是支持硬流控的UART;如果有RX,TX,CTS,RTS,DTR,DSR六个信号的话,RS232标准的可能性比较大。
顺便提一下:
DCD(DataCarrierDetect,数据载波检测):
DCE向DTE指示,线路上检测到载波。
RI(RingIndicator,振铃指示):
DCE向DTE指示,有呼叫接入。
RS232中RTS和CTS的作用
一、RS232标准中的RTS与CTS
RTS,CTS------请求发送/清除发送,用于半双工时的收发切换,属于辅助流控信号。
半双工的意思是说,发的时候不收,收的时候不发。
那么怎么区分收发呢?
缺省时是DCE向DTE发送数据,当DTE决定向DCE发数据时,先有效RTS,表示DTE希望向DCE发送。
一般DCE不能马上转换收发状态,DTE就通过监测CTS是否有效来判断可否发送,这样避免了DTE在DCE未准备好时发送所导致的数据丢失。
二、MODEM硬件流控中的RTS与CTS
按