串行通讯原理说明--RS232,UART电平等介绍
串行通讯:一条信息的各位数据被逐位按顺序传送的通讯方式称为串行通讯。
串行通讯的特点是:数据位传送,传按位顺序进行,最少只需一根传输线即可完成,
成本低但送速度慢。串行通讯的距离可以从几米到几千米。
根据信息的传送方向,串行通讯可以进一步分为单工、半双工和全双工三种。

能够完成上述“串<- ->并”转换功能的电路,通常称为“通用异步收发器”
(UART:Universal Asynchronous Receiver and Transmitter),
典型的芯片有:Intel 8250/8251,16550。

EIA-RS-232C对电器特性、逻辑电平和各种信号线功能都作了规定。
在TxD和RxD上:逻辑1(MARK) =-3V~-15V
                            逻辑0(SPACE)=+3~+15V
在RTS、CTS、DSR、DTR和DCD等控制线上:
信号有效(接通,ON状态,正电压)=+3V~+15V
信号无效(断开,OFF状态,负电压) =  -3V~-15V

数据传输时,低位在前,高位在后

数据位:1位、2位
停止位:1位、1.5位、2位

.流控制在串行通讯中的作用
          解决丢失数据的问题
.硬件流控制
  硬件流控制常用的有RTS/CTS(请求发送/清除发送)流控制和DTR/DSR(数据终端就绪/数据设置就绪)流控制
.软件流控制
一般通过XON/XOFF来实现软件流控制。

奇校验:所有传送的数位(含字符的各数位和校验位)中,“1”的个数为奇数,如:
1 0110,0101
0 0110,0001
偶校验:所有传送的数位(含字符的各数位和校验位)中,“1”的个数为偶数,如:
1 0100,0101
0 0100,0001

          9针串口(DB9)                          25针串口(DB25)         
针号        功能说明        缩写        针号        功能说明        缩写
1        数据载波检测        DCD        8        数据载波检测        DCD
2        接收数据        RXD        3        接收数据        RXD
3        发送数据        TXD        2        发送数据        TXD
4        数据终端准备        DTR        20        数据终端准备        DTR
5        信号地        GND        7        信号地        GND
6        数据设备准备好        DSR        6        数据准备好        DSR
7        请求发送        RTS        4        请求发送        RTS
8        清除发送        CTS        5        清除发送        CTS
9        振铃指示        DELL        22        振铃指示        DELL

RS-232C规标准接口有25条线,4条数据线、11条控制线、3条定时线、7条备用和未定义线,常用的只有9根,它们是:
(1)联络控制信号线:
数据装置准备好(Data set ready-DSR)——有效时(ON)状态,表明通信装置处于可以使用的状态。
数据终端准备好(Data set ready-DTR)——有效时(ON)状态,表明数据终端可以使用。
这两个信号有时连到电源上,一上电就立即有效。这两个设备状态信号有效,只表示设备本身可用,并不说明通信链路可以开始进行通信了,能否开始进行通信要由下面的控制信号决定。

请求发送(Request to send-RTS)——用来表示DTE请求DCE发送数据,即当终端要发送数据时,使该信号有效(ON状态),向MODEM请求发送。它用来控制MODEM是否要进入发送状态。
允许发送(Clear to send-CTS)——用来表示DCE准备好接收DTE发来的数据,是对请求发送信号RTS的响应信号。当MODEM已准备好接收终端传来的数据,并向前发送时,使该信号有效,通知终端开始沿发送数据线TxD发送数据。
这对RTS/CTS请求应答联络信号是用于半双工MODEM系统中发送方式和接收方式之间的切换。在全双工系统中作发送方式和接收方式之间的切换。在全双工系统中,因配置双向通道,故不需要RTS/CTS联络信号,使其变高。

接收线信号检出(Received Line detection-RLSD)——用来表示DCE已接通通信链路,告知DTE准备接收数据。当本地的MODEM收到由通信链路另一端(远地)的MODEM送来的载波信号时,使RLSD信号有效,通知终端准备接收,并且由MODEM将接收下来的载波信号解调成数字两数据后,沿接收数据线RxD送到终端。此线也叫做数据载波检出(Data Carrier dectection-DCD)线。
振铃指示(Ringing-RI)——当MODEM收到交换台送来的振铃呼叫信号时,使该信号有效(ON状态),通知终端,已被呼叫。

(2)数据发送与接收线:
发送数据(Transmitted data-TxD)——通过TxD终端将串行数据发送到MODEM,(DTE→DCE)。
接收数据(Received data-RxD)——通过RxD线终端接收从MODEM发来的串行数据,(DCE→DTE)。
(3)地线
有两根线SG、PG——信号地和保护地信号线,无方向。

如果在通信过程的任意时刻,信息只能由一方A传到另一方B,则称为单工。
如果在任意时刻,信息既可由A传到B,又能由B传A,但只能由一个方向上的传输存在,称为半双工传输。
如果在任意时刻,线路上存在A到B和B到A的双向信号传输,则称为全双工。
RS-232 接口,RS-232 接口是什么意思
2010年03月09日 10:57 作者:佚名 用户评论(0)
关键字:RS-232(50)接口(359)
RS-232 接口,RS-232 接口是什么意思
电缆长度限制

RS-232的最初标准建议将电缆长度限制在50 ft以内,对于≤20 000 b/s的数据传输速度,可以使用任何类型的电缆。
后来的标准是在接收器规定了一个最大的电容2500 pF。这个数值包括了接收器的电容、电缆中连接器之间的动态电容以及导线与电缆屏蔽之间,或者在非屏蔽电缆中,导线和地线之间的电容。电容限制了回转速 度,或者在输出切换的时候的电压变化速度。一个较高的电容导致一个较低的回转速度和较慢的跃迁。一个较高的电容还意味着一个电压变化需要
更大的电流来对电 容充电,因此驱动器总的电能消耗要更大一些。在导线之间的电容还能导致干扰。如果想要使用一个超出了电容限制的连接,可能仍旧能够进行通信,但是以更低的 波特率。利用短电缆及相应的更小的电容,如果发送和接收端硬件都支持更高的速度,则可以比20 000 b/s更快的速度进行通信。
5.1) 非屏蔽电缆
对于非屏蔽电缆,计算非屏蔽电缆的电缆长度的公式如下:
??电缆长度=(2500—接收器输入电容)/(电缆电容×1.5)?
?  电缆长度的单位是ft,输入电容的单位是pF,电缆电容的单位是pF/ft。
带状电缆的典型电容是15 pF/ft,假定接收器的输人电容是100 pF,电缆最长可以达到106 ft((2500—100)/(15×1.5) )。一个单根非屏蔽双绞线的典型电容是12 pF/ft。仍然假定输入电容为100 pF, 则最大电缆长度为133ft。
5.2) 屏蔽电缆
为电缆增加屏蔽缩短了最大长度,但是屏蔽有时对于阻止噪声混入电缆或者从电缆中“溢出”是需要的。对于屏蔽的双绞线,建议将导线到导线电容乘以3以便把导线到屏蔽的电容考虑在内。
?  因此计算屏蔽导线的电缆长度的公式如下:
?  电缆长度=(2500—接受器输入电容)/(电缆电容×3)
?  电缆长度的单位为ft,输入电容的单位是pF,电缆电容的单位是pF/ft。
这就将屏蔽双绞线电缆的最大长度削减到66 ft。
5.3) 双绞线
为了减少干扰,可以对RS-232使用双绞线电缆和多个接地线。每一根信号线应和一个接地线绞在一起。
5.4) 电缆测试结果
RS-232-C标准规定,在码元畸变小于4%的情况下,传输电缆长度应为50 英尺(约15米),其实这个4%的码元畸变是很保守的,在实际应用中往往按码元畸变10-20%的范围工作的,所以最大距离会远超过15米。
美国DEC公司曾在允许码元畸变为10%得出下面实验结果。其中1 号电缆为屏蔽电缆,型号为DECP. NO. 9107723,内有三对双绞线,每对由22# AWG 组成,其外覆以屏蔽网。2 号电缆为不带屏蔽的电缆。型号为DECP. NO. 9105856-04是22#AWG 的四芯电缆。DEC 公司的实验结果
波特率bps
1号电缆传输距离(米)
2号电缆传输距离(米)
110
  1500 
900
300
1500
900
1200
900
900
2400
 300 
150
4800
 300 
75
9600
75 
75
 
6. 串口通信功能的实现
单片机实现串口通讯一般使用UART接口或利用GPIO口模仿异步串行通讯数据格式,外加驱动芯片连接RS-232口。
在PC机上一般直接调用Window API中的一系列标准的串口通信函数,来实现异步串行通讯,控制RS-232口。一般常用VC++或VB来编程。常用的串口通信函数:
CreatFile()函数:实现串口初始化并打开串口;
ReadFile()函数:接收串口传递过来的二进制流并返回数据到接收缓冲区中
WriteFile()函数:把应用程序发出的指令送到发送缓冲区以供串口接收
1. 打开串口
以下程序用于以同步方式打开串口COM1;
HANDLE hCom;
DWORD dwErrorHcomm="CreateFile"(“COM1”,GENERIC_READ|GENERIC_WRITE
,0, NULL,OPEN_EXISTING, 0, NULL);
if (hComm==(HANDLE)0Xffff)
{
dwError=GetLastError();
MessageBox(dwError);
}
2. 配置串口
配置串口是通过改变设备控制块DCB(Device Control Block)的成员变量值来实现的,程序实现如下:
DCB dcb
dcb.BaudRate=9600;//波特率为9600bps
dcb.ByteSize=8;//数据位8位write的返回值
dcb.Parity=EVENPARTTY;//有校验
dcb.StopBits=ONESTOPRTT; //一个停止位
SetCommState(hCom,&dcb);
3. 数据读写
对串口进行读写与对文件进行读写所用的函数相同,具体为可采用查询、同步、异步或事件驱动等方法对串口进行读写所用函数如下所示:
bReadStatus=ReadFile(hCom,buffer,length,&length &m_lpOverlapped);
if(!bReadStatus)
{
if(GetLastError()=ERROR_IO_PENDING)
{
WaitForSingleObject(m_lpOverlapped,hEvent,1000);
return((char)length);
}
return 0;
}
//写入函数程序为:
bWriteStatus=WriteFile(hCom,buffer,length,&length,&m_lpOverlapped)
if(!bWriteStatus)
{
if(GetLastError()=ERROR_IO_PENDING)
{
WaitForSingleObject(m_lpOverlapped, hEvent,1000);
return((char)length);
}
return 0;
}
4. 程序的编制
用VC++进行程序的编制首先要对串口进行初始化,设定端口,通信速率和校验方式,并在使用前打开串口,程序部分如下:
{
Cdialog::OnInitDialog();//TOD Add extra initialization here
m_comm.SetCommPort(1);//选择串口1
if(! m_comm.GetPortOpen())
m_comm.SetPortOpen(TRUE);//打开串口1
m_comm.SetSettings(“9600,n,8,1”); //设置串口参数
m_comm.SetRThreshold(1);
m_comm.SetInputMode(1);//设置二进制模式
return TRUE;
}
除了串口的位置和基本串口参数(数据传输速率9600bps,1位开始位,8位数据位,1位停止位,一位奇偶校验)设置 外,为了实现实时数据采集功能,接受数据的读写要尽可能的快速,则设置RTHreshold=1即接收缓冲区收到一个字节产生OnComm事件 InputLen=1每次读取一个字节。如果PC上位机在一定时间内不能将数据处理完,接收缓冲区会滞留数据,数据会产生丢失现象,我们必须对接受缓冲区 进行适当的设置。RS-232 的缺陷及改进
由于RS-232标准开发较早,使用的是当时流行的DTL技术,随着技术的进步,越老越显露出其局限。
7.1)RS-232 的缺陷
1) 接口的信号为DTL电平,电压值较高,易损坏接口电路的芯片,又因为与TTL 电平不兼容故需使用电平转换电路方能与TTL电路连接。   

2) 传输速率较低,在异步传输时,波特率为20Kbps(现在已发展到超过115.2 Kbps)。 
3) 接口使用一根信号线和一根信号返回线而构成共地的传输形式,这种共地传输容易产生共模干扰,所以抗噪声干扰性弱。
4)传输距离有限,最大传输距离标准值为50英尺(约15米),实际上也只能 用在50米左右。     
5)接口为一对一连接