电脑的开发板上的串口是公口,而现在在用的ADI SHARC21479评估板是母口,这就需要一个一端是公口一端是母口的串口线,实验室里全都是两端母口的线,没办法,只能自己制作一条串口线了。
在网上搜了一些制作串口线的方法,说什么交叉连线(2-3,3-2)我就照着做了,结果发现调不通,很郁闷,后来把我接的线变成了(2-2,3-3)就好了,这是为什么呢?难道网上说的不对?
后来在网上又找了一些信息,发现串口线有交叉线和直连线两种,但是什么时候用交叉线什么时候用直连线呢?其实这不重要,关键是要把开发板的RXD连计算机的TXD,开发板的TXD连计算机的RXD。这才是最关键的!
电脑的串口如图所示
计算机端是按照普通定义来的,2对应RXD,3对应TXD
关键要看自己下位机的串口定义规则!
这是我用的瑞泰试验箱上串口的定义(公口):
其中2对应RXD,3对应TXD,这时候用到的串口线就应该是交叉式的了!
而用的ADI开发板的串口定义是这样的(母口):
这时候再看电路图,其中2对应TXD,3对应RXD,所以用的串口线就应该是直连式的了。
这就是为什么我做的串口线应该是直连式而不是交叉式。
在制作电路板的过程中为了与约定相匹配如果电路板上安装的是公口则2----------RXD,3-------------------TXD
如果电路板上安装的是母口则2----------TXD,3-------------------RXD
比如如果电路板装的是公口但是装反了2-TXD,3-RXD也不是不行,但市面上卖的两端都是母口的连接线是交叉式的,不能用,只能自己做,不利于通用性 。(市面上卖的串口线两端相同的是交叉式的,两端不同的是直连式的)。串口电平是负逻辑:当电压为正的时候为逻辑“0”状态,当电压为负的时候为逻辑“1”状态。一种判断串口芯片好坏的方法是测量TX引脚,一般情况下是-10V。
下面再介绍下9针串口其他几个引脚的作用(可能有不对的地方)
RS-232的设备可以分为数据终端设备(DTE)和数据通信设备(DCE)两类,这种分类定义了不同的线路用来发送和接受信号。一般来说,计算机和终端 设备有DTE连接器,调制解调器和打印机有DCE连接器。
数据终端设备(DTE,Data Terminal Equipment, For example, PC)
数据通信设备(DCE,Data Communication Equipment)
发送数据(Transmitted data-TxD)——通过TxD终端将串行数据发送到MODEM,(DTE→DCE)。
接收数据(Received data-RxD)——通过RxD线终端接收从MODEM发来的串行数据,(DCE→DTE)。
DTR和RTS是DTE设备(数据终端设备,PC机)发出的,DSR、CTS和DCD是DCE设备(数据通信设备,在实际中就是各种基带MODEM)发出的。
DTR和DSR是一对(DTE设备准备好/DCE设备准备好):
DSR(data set ready),数据准备就绪。是RS232中的一握手信号。当调制/解调器启动时,在经过自身检测后,用DSR来声明已经准本就绪。它是调制/解调器(DCE)的输出,同时也是DTE(数据终端设备)的输入。引脚高电平时,通知计算机(DTE)此时Modem(DCE)已经准备好,可以进行数据通讯了。
DTR( Data Terminal Ready )数据终端就绪。在串行通信中使用的一个信号,通过计算机(DTE)发送到调制解调器(DCE)上,此引脚高电平时,通知调制/解调器(DCE)可以进行数据传输,计算机(DTE)已经准备好。
RTS和CTS是一对(请求发送/清除发送):
CTS(Clear to send),清除发送信号。
RTS( request to send), 请求发送信号。
当DTE决定向DCE发数据时,先有效RTS,表示DTE希望向DCE发送,一般DCE不能马上转换收发状态,DTE就通过监测CTS是否有效来判断可否发送,这样避免了DTE在DCE未准备好时发送所导致的数据丢失。
RTS/CTS 提供的是一种PC 和Modem 之间控制数据流的方法,当Modem 准备接收数据时, 使CTS为ON(1), 当Modem 不能接收更多数据时, 使CTS为OFF(0), 类似的,当PC 可以接收数据时,RTS 为ON (1), 不能接收数据时,RTS 为OFF(0).
DTR/DSR : PC开启DTR信号告诉MODEN, PC 机已经准备通信, Modem通常开启DSR来应答,让PC机知道 Modem 准备应答.
DCD (Data Carrier Detection),载波检测。
DCD是modem或者串口设备的有信号状态(通常是通知PC应该接收数据了),对应用程序来说可有可无,
但他提供了一种协议机制,一些设备可能在发送数据到你串口时,设置了DCD,你的程序可能是需要等到DCD有信号才会去接收数据,当DCD断开后,你的程序将永远不会主动去接收数据.
而现在大多数通用串口程序是主动监控串口,如果有数据将主动接收数据,超级终端也是这样,因此这种监控加主动接收数据方式不需要借助别的信号线,(比如DCD)只需要3条串口通讯必需的信号线就可以了。由此可见在做一般的单片机和上位机通信中是用不到这些引脚的,