您的位置:首页 > 编程语言

11、串口编程

2016-05-19 19:08 281 查看

1、串口的介绍

   串口的介绍,串口发送的顺序;1.空闲位:这里是连续的12.起始位:低电平3.数据位:对于传输的数据位这里是自己去设定传输位数,可以5、6、7、8位,但是我们一般设置为 8位串口的数据是从低位开始发送4.奇偶校验位:保证传输数据位中的1的个数是奇数还是偶数。奇校验;保证数据位中的‘1’是奇数个,当数据位中的‘1’是奇数个的时候,那么校验位填零;当数据位中的‘1’是偶数个的时候,则校验位填为‘1’。5.停止位:低电平。持续时间为一个或者1.5个字符的时间。
  

2、硬件引脚的认识

 

3、Linux下端口/dev/ttyn、/dev/pts/n、/dev/ttySn:

 终端的查看,是借用了tty命令去查看。/dev/ttyn:终端,一般就是我们在ubuntu里面终端的时候,就是ttyn
   /dev/pts/n:虚拟终端,比如当我们使用secureCRT连接ubuntu的时候,这个时候secureCRT的终端。   /dev/ttySn:使用串口登录串行端口终端,也就是设备通过串口端连接终端,ttyS0、ttyS1,分别对应了COM1和COM2 

4、串口的基本知识

4.1、串口传输模式

   串口传输的模式,可以分为两种,标准输入模式(规范模式)和非标准输入模式(非规范模式)

标准输入模式:

   这种模式是终端设备标准的处理模式。通信中,是以行为单位进行传输,行的结束是以enter为结束符。read的时候,会将一行的数据,完整地进行输入,一行的结束默认是enter(ASCII是 LF,既换行,回车是cr,)。在标准输入模式下,字符被输入终端之后,还可以进行清除,删除,重写,换行等操作,所以,根据自己的实际需求,写好字符之后,按下enter作为作为一行输入的结束。

非标准输入模式:

   这种模式一般是用于需要每次读取固定字符的情况下(比如一个字符),并允许使用,字符接收时间的定时器。也就是说,可以在每次读取固定长度字符串的程序中,或者连接的设备会突然发送大量的字符内容的情况下。 

4.2、流控

   流控,可以分为硬件流控和软件流控。流控实现的是,当接收端不能接收串口数据的时候,通知数据的发送端,使其不再发送数据的这么一种机制。软件流控,实现的方法是通过一些特殊的字符进行定义,X0N(DC1,八进制的话是,021)和结束,X0FF(DC3,八进制是,023),来开始和结束数据流的进行。开始和结束的这个特殊的字符,是被定义在ASCII。所以,当传输的信息是文本信息的时候,软件流控是非常的好用的。但是,流控是不被建议运用在传输二进制文件。   硬件流控,是通过硬件特定的管脚,发送电平实现的。

4.3、ASCII

CR---------od(十六进制)------回车-------\r(C语言)NL(LF)-----oa(newline、linefeed)-----换行----\n(C语言)

5、串口的操作

5.1、文件的打开

intopen_port(void){   intfd;/*Filedescriptorfortheport*/   fd=open("/dev/ttyf1",O_RDWR|O_NOCTTY|O_NDELAY);   if(fd==−1)   {   /*       *Couldnotopentheport.   */   perror("open_port:Unabletoopen/dev/ttyf1−");   }   else       fcntl(fd,F_SETFL,0);   return(fd);}O_NOCTTY :告诉系统,当前的程序上不受终端的控制,所以就不会受到 ctrl+c的影响。NDELAY:和NONBLOCK类似。NDELAY不会受到DCD信号的影响。非阻塞

5.2、串口读

   n=write(fd,"ATZ\r",4);   if(n<0)       fputs("write()of4bytesfailed!\n",stderr); 

5.3、串口的写

   相比于串口读,串口写的操作,还是存在一点的技巧的。当read一个以原始模式的传输数据串口的时候,read的返回值,是串口实际接收字符的个数。当没有read到字符的时候,read操作会编程阻塞模式,直到字符的到来,或者错误的发生。所以,为了read的时候,读取不到字符的时候,立即马上返回,可以进行下面的操作:   fcntl(fd, F_SETFL, FNDELAY)FNDELAY会导致,当串口没有字符被读取到的时候,立即返回零。如果需要设置阻塞模式的话:   fcntl(fd, F_SETFL, 0);

5.4、关闭

   close(fd)
 

6、接口

structtermios{
tcflag_tc_iflag;/*inputmodeflags*/输入模式标志
tcflag_tc_oflag;/*outputmodeflags*/输出模式标志
tcflag_tc_cflag;
/*controlmodeflags*/控制模式标志
tcflag_tc_lflag;/*localmodeflags*/本地模式标志
cc_tc_line;/*linediscipline*/
cc_tc_cc[NCCS];/*controlcharacters*/控制字符
};、

6.1、controlflag

   控制模式,主要是对,波特率,传输的数据位,校验位、停止位、和流控进行设置。对于控制标志的设置,是通过下面的常量(宏)进行配置。
Constant    DescriptionCBAUD       BitmaskforbaudrateB0              0baud(dropDTR)   //波特率B50             50baudB75              75baudB110              110baudB134             134.5baudB150             150baudB200             200baudB300              300baudB600              600baudB1200              1200baudB1800              1800baudB2400              2400baudB4800              4800baudB9600             9600baudB19200              19200baudB38400              38400baudB57600              57,600baudB76800              76,800baudB115200              115,200baudEXTA             ExternalrateclockEXTB                     ExternalrateclockCSIZE              Bitmaskfordatabits   //传输数据位的掩模CS5             5databitsCS6              6databitsCS7              7databitsCS8              8databits   //8bit数据位CSTOPB              2stopbits(1otherwise)  //2个停止位CREAD             Enablereceiver    //允许接收字符PARENB             Enableparitybit //使能校验位PARODD              Useoddparityinsteadofeven //使用奇校验HUPCL             Hangup(dropDTR)onlastcloseCLOCAL             Localline−donotchange"owner" // 本地接收ofportLOBLK             Blockjobcontroloutput  CNEW_RTSCTS     //CNEW_RTSCTS和CRTSCTS   使能硬件流控           CRTSCTS             Enablehardwareflowcontrol(notsupportedonallplatforms)   CLOCAL 和CREAD这两个选项,应该被选中。而对标志的设置,永远也不要对这些标志做初始化的操作,而应该是使用与、或的操作,达到清零或者置一的操作。 

6.1.1、波特率的设置

   tcgetattr(fd,&options);   structtermiosoptions;   options.c_cflag|=(CLOCAL|CREAD);   tcgetattr(fd,&option);   cfsetispeed(fd,B115200);   tcsetattr(fd,TCSANOW,&options);   tcgetattr函数,实现获取当前串口的配置信息。当完成新的配置之后,就需要将这些信息进行激活。,就使用tcsetattr。      TCSANOW    Makechangesnowwithoutwaitingfordatatocomplete   TCSADRAIN    Waituntileverythinghasbeentransmitted   TCSAFLUSH    Flushinputandoutputbuffersandmakethechange   TCSANOW  标志,表明所做的更改设置,会立即生效,不会等待数据发送或者接收完毕, 

6.1.2、设置字符大小

   传输字符大小的设置,没有函数接收可以使用,而是通过宏代码实现。   options.c_cflag&=~CSIZE;/*Maskthecharactersizebits*/   options.c_cflag|=CS8;/*Select8databits*/   实现传输字符的设置,一定先要进行options.c_cflag&=~CSIZE之后,才可以进行位数的设置。 

6.1.3、校验位和停止位的设置

    校验位可以设置为,无校验、奇校验、偶校验,三种。•Noparity(8N1): //8bitdata无校验,1个停止位   options.c_cflag&=~PARENB  //关闭校验   options.c_cflag&=~CSTOPB  //一个停止位   options.c_cflag&=~CSIZE;  //8个数据位   options.c_cflag|=CS8;•Evenparity(7E1):  //7个数据位,偶校验,一个停止位   options.c_cflag|=PARENB  //校验使能   options.c_cflag&=~PARODD  //偶校验   options.c_cflag&=~CSTOPB //一个停止位   options.c_cflag&=~CSIZE; //7个数据位   options.c_cflag|=CS7;•Oddparity(7O1):   options.c_cflag|=PARENB   //校验使能   options.c_cflag|=PARODD //奇校验   options.c_cflag&=~CSTOPB //一个停止位   options.c_cflag|=CS7;   停止位的设定是通过CSTOPB实现的。如停止位为1,则清除CSTOPB。如停止位为2,则激活CSTOPB。 

6.1.4、硬件流控的设置

    一些Linux系统是支持硬件流控的。如果CNEW_RTSCTS和CRTSCTS在自己的系统中,是被定义的话,就可以借助他们来实现硬件流控的开启:   options.c_cflag|=CNEW_RTSCTS;/*AlsocalledCRTSCTS*/当然,也可以进行关闭:   options.c_cflag&=~CNEW_RTSCTS 

6.2、localflag

   本地模式,c_lflag用于控制串口输入的字符,比如终端输入的字符是否支持回显。通常上,需要对c_lflag设置,实现,规范模式,或者原始模式。ISIG        EnableSIGINTR,SIGSUSP,SIGDSUSP,andSIGQUITsignalsICANON  Enablecanonicalinput(elseraw)XCASE    Mapuppercase\lowercase(obsolete)ECHO      EnableechoingofinputcharactersECHOE     EchoerasecharacterasBS−SP−BSECHOK     EchoNLafterkillcharacterECHONL   EchoNLNOFLSH    Disableflushingofinputbuffersafterinterrupt orquitcharactersIEXTEN      EnableextendedfunctionsECHOCTL    Echocontrolcharactersas^charanddeleteas~?ECHOPRT    EchoerasedcharacterascharactererasedECHOKE     BS−SP−BSentirelineonlinekillFLUSHO    OutputbeingflushedPENDIN    RetypependinginputatnextreadorinputcharTOSTOP     SendSIGTTOUforbackgroundoutput     如果终端的模式,设置为规范模式(标准输入),那么需要设置ICANNOECHOECHOE选项。   options.c_lflag|=(ICANON|ECHO|ECHOE);   如果终端是原始模式(非标准输入),那么就需要进行不选中ICANNOECHOECHOE,同时添加ISIG选项。   options.c_lflag&=~(ICANON|ECHO|ECHOE|ISIG);注意:   当传输的命令是传送给MODEN的时候,或者传送的命令是发送给已经开启了回显的B电脑的时候,发送端A,绝对不要打开回显功能(不要打开ECHO和ECHOE),因为会在两个串口之间生成回环的反馈。   

6.3、输入模式

   输入模式的,c_iflag,对串口接收的字符进行的操作。Constant       DescriptionINPCK         Enableparitycheck  //使能校验检查IGNPAR       IgnoreparityerrorsPARMRK         MarkparityerrorsISTRIP          Stripparitybits     //删除校验位IXON         Enablesoftwareflowcontrol(outgoing)IXOFF          Enablesoftwareflowcontrol(incoming)IXANY          AllowanycharactertostartflowagainIGNBRK          IgnorebreakconditionBRKINT          SendaSIGINTwhenabreakconditionisdetectedINLCR          MapNLtoCRIGNCR          IgnoreCRICRNL         MapCRtoNLIUCLC         MapuppercasetolowercaseIMAXBEL          EchoBELoninputlinetoolong 

6.3.1、设置输入校验

   如果在c_cflag中使能了PARENB,也就是使能了校验位,那么就需要在输入模式,使能校验检测。一般是:    options.c_iflag|=(INPCK|ISTRIP); 

6.3.2、软件流控

   软件流控的实现是,需要IXON,IXOFF,andIXANY常量打开软件流控:   options.c_iflag|=(IXON|IXOFF|IXANY)关闭:   options.c_iflag&=~(IXON|IXOFF|IXANY);   IXON和IXOFF是被定义在c_cc数组当中。 

6.4、输出模式

   设置c_oflag控制的是当串口完成数据的接收,并且完成输入模式操作之后,如果将数据进行数据。数据的输出,可以进行操作,或者直接以原始的模式进行输出。Constant        DescriptionOPOST        Postprocessoutput(notset=rawoutput)OLCUC         MaplowercasetouppercaseONLCR         MapNLtoCR−NLOCRNL         MapCRtoNLNOCR         NoCRoutputatcolumn0ONLRET        NLperformsCRfunctionOFILL        UsefillcharactersfordelayOFDEL        FillcharacterisDELNLDLY         MaskfordelaytimeneededbetweenlinesNL0         NodelayforNLsNL1         Delayfurtheroutputafternewlinefor100millisecondsCRDLY        MaskfordelaytimeneededtoreturncarriagetoleftcolumnCR0         NodelayforCRsCR1         DelayafterCRsdependingoncurrentcolumnpositionCR2         Delay100millisecondsaftersendingCRsCR3         Delay150millisecondsaftersendingCRsTABDLY         MaskfordelaytimeneededafterTABsTAB0         NodelayforTABsTAB1         DelayafterTABsdependingoncurrentcolumnpositionTAB2         Delay100millisecondsaftersendingTABsTAB3        ExpandTABcharacterstospacesBSDLY         MaskfordelaytimeneededafterBSsBS0        NodelayforBSsBS1        Delay50millisecondsaftersendingBSsVTDLY        MaskfordelaytimeneededafterVTsVT0         NodelayforVTsVT1         Delay2secondsaftersendingVTsFFDLY         MaskfordelaytimeneededafterFFsFF0         NodelayforFFsFF1         Delay2secondsaftersendingFFs 

6.4.1、输出的字符,如果进行操作的话,需要对OPOST进行设置:

   options.c_oflag|=OPOST;

6.4.2、如果选择为原始数据输出的话:

   options.c_oflag&=~OPOST;   当OPOST被关闭之后,那么对于c_oflag 所有的设置将会被忽略。

6.5、字符控制

    在c_cc数组中,实现了对定时器等一些操作,下面是配置信息:Constant     Description      KeyVINTR           Interrupt           CTRL−CVQUIT           Quit                  CTRL−ZVERASE         Erase               Backspace(BS)VKILL            Kill−line             CTRL−UVEOF            End−of−file         CTRL−DVEOL            End−of−line         Carriagereturn(CR)VEOL2          Secondend−of−lineLinefeed(LF)VMIN            MinimumnumberofcharacterstoreadVTIME          Timetowaitfordata(tenthsofseconds) 

6.5.1、设置软件流控的字符

    当使用了软件流控的时候,需要对,c_cc[VSTART]和c_cc[VSTOP]进行设置,他们应该被设置为DC1和DC3,DC1和 DC3在SCII中,代表了 XON和XOFF。 

6.5.2、定时和字符个数的设置

MIN>0,TIME=0:读取函数在读到了MIN值的字符数后返回。MIN=0,TIME>0:TIME决定了超时值,读取函数在读到一个字节的字符,或者等待读取时间超过TIME(t=TIME*0.1s)以后返回,也就是说,即使没有从串口中读到数据,读取函数也会在TIME时间后返回。MIN>0,TIME>0:读取函数会在收到了MIN字节的数据后,或者超过TIME时间没收到数据后返回。此计时器会在每次收到字符的时候重新计时,也只会在收到第一个字节后才启动。MIN=0,TIME=0:读取函数会立即返回。实际读取到的字符数,或者要读到的字符数,会作为返回值返回。根据Antonino(参考conditions),可以使用fcntl(fd,F_SETFL, FNDELAY),在读取前获得同样的结果。 

7、串口的操作介

(1)头文件
#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<termios.h>
#include<errno.h>
[/code] 常用串口设置函数:
(1)属性的获取与设置
 inttcgetattr(intfd,structtermios*termios_p);
获取属性存放在structtermios里面,而fd是打开串口的的文件描述符。
inttcsetattr(intfd,intoptional_actions,conststructtermios*termios_p);设置属性(termios结构)//激活自己的配置
 
cfgetispeed得到输入速度
Cfgetospeed得到输出速度
 [/code]
Cfsetispeed设置输入速度
Cfsetospeed设置输出速度
 [/code]
Tcdrain等待所有输出都被传输
 [/code]
tcflow挂起传输或接收
tcflush刷清未决输入和/或输出
 [/code]
Tcsendbreak送BREAK字符
tcgetpgrp得到前台进程组ID
tcsetpgrp设置前台进程组ID
 [/code]
 

8、串口流程

(1)保存原先串口的配置
structtermiosnewtio,oldtio;
tcgetattr(fd,&oldtio);
[/code]   获取原先串口的配置。 (2)激活本地连接和接收使能   这一步,是用于本地进行接收的。
 
newtio.c_cflag|=CLOCAL|CREAD;
 
(3)设置波特率
 
cfsetispeed(&Opt,B19200);/*设置为19200Bps*/
cfsetospeed(&Opt,B19200);//设置输出的波特率为19200
波特率的设置,都是BXXXXX
 
(4)设置数据位的位数
newtio.c_cflag&=~CSIZE;
newtio.c_cflag|=CS8;//设置数据位为8位
 
(5)设置奇偶校验
 
设置奇校验
newtio.c_cflag|=PARENB;
newtio.c_cflag|=PARODD;
newtio.c_iflag|=(INPCK|ISTRIP);
设置偶校验:
newtio.c_iflag|=(INPCK|ISTRIP);
newtio.c_cflag|=PARENB;
newtio.c_cflag|=~PARODD;
 
(6)设置停止位   设置停止位,通过激活c_cflag中的CSTTOPB实现。若停止位为1,则清除CSTOPB,若停止位为2,则激活CSTOPB。
 
newtio.c_cflag&=~CSTOPB;
 
(7)设置最少字符和等待时间   对于字符接收和等待的时间,一般没有太多的要求,一般全部设置为零。
 
newtio.c_cc[VTIME]=0;
newtio.c_cc[VMIN]=0;
 
(8)清空缓存区域   tcflush函数会清空输入的缓存区域(底层驱动已经结合到数据,但是用户还没有接收到数据)和情况输出缓存区域(用户空间将数据写入缓存区域,但是串口协议缓存还没有将数据发出)。
 
inttcflush(intfiledes,intquene)
quene数应当是下列三个常数之一:
*TCIFLUSH刷清输入队列
*TCOFLUSH刷清输出队列
*TCIOFLUSH刷清输入、输出队列
 
 (9)激活配置   在前面已经设置好的各种配置的进行激活。
 
inttcsetattr(intfiledes,intopt,conststructtermios*termptr);
opt使我们可以指定在什么时候新的终端属性才起作用,
 [/code]
*TCSANOW:更改立即发生
*TCSADRAIN:发送了所有输出后更改才发生。若更改输出参数则应使用此选项
*TCSAFLUSH:发送了所有输出后更改才发生。更进一步,在更改发生时未读的
 
 

5、串口初始化的基本例操作

(1)串口的初始化
//打开串口并初始化设置
init_serial(void)
{
serial_fd=open("/dev/ttyS0",O_RDWR|O_NOCTTY|O_NDELAY);
if(serial_fd<0){
perror("open");
return-1;
}
//串口主要设置结构体termios<termios.h>
structtermiosoldtio;
structtermiosnewtio;
bzero(&newtio,sizeof(structtermios));
/**1.tcgetattr函数用于获取与终端相关的参数。
*参数fd为终端的文件描述符,返回的结果保存在termios结构体中
*/
tcgetattr(serial_fd,&oldtio);
/**2.修改所获得的参数*/
newtio.c_cflag|=(CLOCAL|CREAD);//设置控制模式状态,本地连接,接收使能
//3.设置串口输入输出的波特率
cfsetispeed(&newtio,B115200);
cfsetospeed(&newtio,B115200);//4.设置数据位的位数newtio.c_cflag&=~CSIZE;//字符长度,设置数据位之前一定要屏掉这个位,其实是将对应的位进行清理
newtio.c_cflag&=~CRTSCTS;//无硬件流控
newtio.c_cflag|=CS8;//8位数据长度,设置对应的位
//5.设置奇偶校验newtio.c_iflag|=IGNPAR;//无奇偶检验位
//6.设置停止位
newtio.c_cflag&=~CSTOPB;//1位停止位停止位
//7.设置最少字符和等待的时间
newtio_c.cc[VTIME]=0;
newtio_c.cc[VMIN]=0;
//8.清空缓存区域
tcflush(serial_fd,TCIOFLUSH);//刷新输入输出的缓存
//9.激活配置
tcsetattr(serial_fd,TCSANOW,&newtio);
//
options.c_lflag &=~(ICANON|ECHO|ECHOE|ISIG); /*Input*/ //options.c_oflag &=~OPOST;  /*Output*/
return0;
}
[/code]注意:   当设置的串口不是终端的话(我们经常使用的串口是集成自己串口代码的使用上,每次串口的数据不是使用ENTER作为结束标志之类的),只是拿来作为串口传输数据的,那么就使用原始的方式进行通信。
options.c_lflag&=~(ICANON|ECHO|ECHOE|ISIG);/*Input*/
options.c_oflag&=~OPOST;/*Output*/
 [/code]当然设置也可以为终端模式:
 
options.c_lflag|=(ICANON|ECHO|ECHOE|ISIG);/*Input*/
options.c_oflag|=OPOST;/*Output*/
 
(2)串口的读写   因为Linux一切设备皆文件,所以可以直接对串口的文件使用write和read进行串口数据的读写。
intbuf[1024];
intreadByte=read(fd,buf,1024);
[/code]   就可以将串口的数据读取到buf中,而返回值为读取到字符的数目。(3)串口的关闭   串口的关闭,其实就是关闭文件了。
close(fd);
[/code]   一般来说,关闭了串口,先要将之前的串口的配置进行还原。6、串口测试   开发板和PC的连接因为串口要被使用用于测试,所以串口和板子的连接改为telnet的方式。(1)设置开发板和PC在同一个网段(2)使用SecureCRT连接上开发板(3)   

二、串口+MODEM

   MODEM与串口之间的通信,是采用的AT命令,其实就是AT+内容形式。串口与MODEM之间产口数据通信,需要注意一下的问题

2.1、将打开的串口设置为原始输入模式

options.c_lflag&=~(ICANON|ECHO|ECHOE|ISIG);  //输入的本地输入是非规范options.c_oflag&=~OPOST;  //数据的输出也是非规范   数据的输入和输出,设置为非规范,也就是rawinput模式 

2.2、设备的初始化

   当与MODEM设备建立通信的时候,最好的初始化设备的方法是,先发送“AT”给MODEM,当MODEM接收到的时候,就会回复“OK”。这个过程,完成设备的初始化。intinit_modem(intfd)/*I−Serialportfile*/{   charbuffer[255];/*Inputbuffer*/   char*bufptr;/*Currentcharinbuffer*/   intnbytes;/*Numberofbytesread*/   inttries;/*Numberoftriessofar*/   for(tries=0;tries<3;tries++)   {       /*sendanATcommandfollowedbyaCR*/       if(write(fd,"AT\r",3)<3)   //完成 AT\R,也就是AT+回车的命令的发送,当没有发送出去的话,就continue,重新再发           continue;       /*readcharactersintoourstringbufferuntilwegetaCRorNL*/       bufptr=buffer;       while((nbytes=read(fd,bufptr,buffer+sizeof(buffer)−bufptr−1))>0)    //完成数据的接收       {               bufptr+=nbytes;  //收取所有的数据,移动指针               if(bufptr[−1]=='\n'||bufptr[−1]=='\r') //判定接收的数据,最后的是以回车或者换行结束                       break; //就可以退出,编码数据接收完毕               }               /*nulterminatethestringandseeifwegotanOKresponse*/               *bufptr='\0';  //将               if(strncmp(buffer,"OK",2)==0)  //将接收到OK,表明设备初始化争取                       return(0);          }               return(−1);} 

2.3、MODEM通信的问题

A、必须关闭本地模式的回显功能(同时设置输出模式为原始输出模式),因为回显的话,会导致MODEM和计算机之间产生循环的反馈。也就是必须设置为:options.c_lflag&=~(ICANON|ECHO|ECHOE|ISIG);  //输入的本地输入是非规范options.c_oflag&=~OPOST; B、当发送MODEM命令的时候,必须以回车键(CR)进行结束,而并不是换行(NL:newline或者lf:linefeed)。回车键的C字符常量在是‘\r’。 C、比特率的问题。确保与MODEM进行通信的波特率是得到支持。一般较为常用的是19200。     A、遇到的奇怪的问题(1)接收返回模式:如果串口没有接收到数据,read()函数不返回。(2)数据接收\n才返回接收的数据,否则read()函数返回0(3)特殊字符解析问题,部分特殊字符接收/发送时,会被屏蔽或者转义。如发送0x0A接收变为0x0A0x0A,0x0D被屏蔽等。(4)接收反馈:如串口接收到数据,立即将该数据发送出去。 A、如何区分232串口的直连线和交叉线   RS232的管脚中,2管脚:RXD,接收数据的管脚;3管脚:TXD,发送数据的管脚。所以在不同的使用功能的区分,就存在直连线和交叉线的区分。直连线:也就是2对2,3对3,这种连接线的接法是用在串口延长线。交叉线:2对3,3对2,这种接法是在电脑和设备之间的连接。直接使他们可以进行数据的通信。   很显然,使用场合的不同,就需要使用不同的连接线。当需要延长串口数据线的时候,很显然必须使用串口的至联系;而当需要进行不同设备之间的数据通信的话,就必须使用交叉线进行连接。   那么如何进行判断,一根串口线是直连线还是交叉线呢?   我们将一个串口线分为A端和B端,那么当这个串口线是直连线的时候,也就是A、B端对应的2口、3口都是在同一个位置的。而当是交叉线的话,A、B段对应的2口和3口是在不同的位置。因此可以通过万用表去帮助测量:当A端的2口与B端的2口是否短接(短路),那么这根串口线就是直连线;而如果A端的2口与B端的3口是短路的话,那么这根串口线则是交叉的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: