深入浅出串口编程(1)――基本概念

本文涉及的产品
视频直播,500GB 1个月
简介:

深入浅出串口编程(1

――基本概念
宋宝华  [email]21cnbao@21cn.com[/email]

1.引言

       PC机的主板上,有一种类型的接口可能为我们所忽视,那就是RS-232C串行接口,在微软的Windows系统中称其为COM。我们可以通过设备管理器来查看COM的硬件参数设置,如图1
Windows上查看PC串口设置
迄今为止,几乎每一台PC都包含COM。本质而言,COMPC为和外界通信所提供的一种串行数据传输的接口。作为一种物理通信的途径和设备,它和目前风靡的另一种串行接口――USB所提供的功能是一致的。不过RS-232C显然已经开始被后起之秀USB赶超,因为USB的传输速率已经远远超过了RS-232C
尽管如此,RS-232C仍然具有非常广泛的应用,在相对长的一段时间里,难以被USB等接口取代。RS-232C接口(又称EIA RS-232C),1970年由美国电子工业协会(EIA)联合贝尔系统、调制解调器厂家及计算机终端生产厂家共同制定,全名是“数据终端设备(DTE)和数据通讯设备(DCE)之间串行二进制数据交换接口技术标准”。
本文将对这一接口进行硬件原理的介绍,随后我们将逐章学习DOS平台的串口编程,及Windows平台下基于API、控件和第三方类的串口编程,最后本文将给出一个综合实例。
在本文的连载过程中,您可以通过如下方式联系作者(热忱欢迎读者朋友对本文的内容提出质疑或给出修改意见):
作者email[email]21cnbao@21cn.com[/email](可以来信提问,笔者将力求予以回信解答,并摘取其中的典型问题,在本系列文章最后一次连载的《读者反馈》中予以阐述);
作者blog[url]http://blog.donews.com/21cnbao[/url](可以获得笔者的大量原创技术文章,欢迎参与评论)。

2.硬件原理

众所周知,CPU与存储芯片和I/O芯片的通信是并行的(并行传输的最大位数依赖于CPU的字长、数据总线的宽度),一种叫做UART(通用异步收发器,Universal Asynchronous Receiver/Transmitter)的芯片提供了并行数据传输和RS-232C串行数据传输方式的转换。这样的设备通常有如图2所示的管脚分布,当其向外传输数据时,CPU并行的将数据写入这类芯片的寄存器,UART再将寄存器中的数据一位一位地移动并向外传输;当外界向其传输数据时,UART一位一位地接收数据,并将其移位组合为并行数据,CPU再并行地读取这些数据。实际上,由于UART芯片一般以TTL/CMOS电平工作,在UART连接接口之前,还要经过一个TTL/CMOSRS-232C电平的转换。RS-232C规定了其标准的电气特性,逻辑1对应的电压必须在-5-15V之间;逻辑0对应的的电压必须在+5+15V之间。
2 UART/串转换
一个常见的TTL/CMOSRS-232C电平转换芯片如图3
       
常见的TTL/CMOSRS-232C电平转换芯片
RS-232C通常以两类接插件与外界相连,分别称为DB9DB25,如图4所示。
          
4 DB9DB25
而接插件中各个针的定义则如表1
1 DB9DB25引脚定义
DB9
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定义为数据通信设备(DCE)和数据终端设备(DTE)之间的互连,实现上,到现在为止,究竟一个设备属于DCE还是属于DTE已经没有明显的界限,PC即可作为DCE,又可作为DTE。两串口互连,连接方法主要有二:
一种方法是,数据的发送和接收由软件控制,不进行硬件握手,其连接方法如图5(最常用DB9连接示意)和表2DB9DB25三线连接表),真正需要互相连接的是RXDTXDGND
无硬件握手时两串口连接
2 DB9DB25三线连接
 9 针-9
25 针-25
9 针-25
2
3
3
2
2
2
3
2
2
3
3
3
5
5
7
7
5
7
软件握手又称为XON/XOFF,通常以CTRL-S0x13)和CTRL-Q0x11)两个字符来实现流控制。前者用于请求对方暂停发送,后者用于清除暂停传送的请求,继续发送数据。
另一种方法是,数据的发送和接收由硬件控制,进行硬件握手,其连接方法如图6(最常用DB9连接示意),需要连接的信号除RXDTXDGND外,还包括DTRDSRRTSCTS
       硬件握手依赖于RTSCTS信号,当发送设备欲发送数据时,将RTS信号置为有效表示请求发送,接收设备准备好后,置CTS信号有效,接着发送设备通过信号线TXD开始发送串行数据。
这里我们联想开来,RTS/CTS模式在许多领域里都出现过。回忆一下IEEE 802.11无线局域网协议标准,在其MAC协议中就使用了RTS/CTSRTS/CTS抽象开来就是一种请求/应答。笔者曾经在拙作中多次以实例论证计算机领域里许多知识的相通性,这又是一个明证。
有硬件握手时两串口连接
实际上,目前我们经常使用的是方法一,即只连接RXDTXDGND,简单灵活。另外,串口之间互连还有诸多途径,如图7所示。
其它互连方式

3.调试工具

MS-DOS下使用的编程环境是TC 2.0
Windows 2000下的编程环境是VC++ 6.0
借助工具:串口调试助手2.1(图8)。
串口调试助手
串口调试助手是由《Visual C++/Turbo C串口通信编程实践》一书作者龚建伟编写的共享软件,可以方便地进行串口上的数据收发、显示(16进制和ASCII码方式)和串口参数的设置,在串口调试领域应用广泛。
“ 串口调试助手”的开发原理很简单(相信读者看完本文后在相当短的时间之内就能开发出这样的软件),但是作者龚建伟敏锐地抓住了串口调试在业界的需求,使得 自身随这一软件而成名。这一事件或多或少会给程序员们一定的启发。优秀的共享软件不一定要技术含量高,只要有需求,哪怕是开发原理再简单,都能拥有广泛的 使用者。
为了在一台PC上同时搭建DOSWindows平台,我们应该在Windows平台上安装虚拟PC的软件VmWare(9VMware Inc.版权所有,[url]http://www.vmware.com[/url])VMware的确是天才的作品!在同一PC上,利用VmWare几乎可以安装所有的操作系统,而且操作系统之间的切换不需要重新启动电脑,与传统的LILO等多系统引导方式有本质的不同。VM的意义是Virtual Machine,即虚拟出一个逻辑的电脑。
9 VmWare虚拟PC
在虚拟PCMS-DOS操作系统上,我们安装TC 2.0开发环境。
        如果您的PC上没有软驱,为了制作MS-DOS启动软盘,请安装RamDiskNT模拟一个软盘,并在其上安装MS-DOS启动程序。RamDiskNT是一个磁盘模拟软件,其界面如图10所示。
10 磁盘模拟

 本文转自 21cnbao 51CTO博客,原文链接:http://blog.51cto.com/21cnbao/120317,如需转载请自行联系原作者



相关文章
|
5月前
|
Linux API C语言
Qt串口编程探究:理论与实践
Qt串口编程探究:理论与实践
292 1
|
5月前
|
存储 传感器 Linux
Linux应用开发基础知识——I2C应用编程(十二)
Linux应用开发基础知识——I2C应用编程(十二)
187 0
Linux应用开发基础知识——I2C应用编程(十二)
|
网络协议 安全 Java
Java网络编程基础知识详解
网络编程是现代软件开发中不可或缺的一部分,它使我们能够在不同的计算机之间实现数据传输和通信。Java作为一种强大的编程语言,提供了丰富的网络编程库,使开发者能够轻松地创建网络应用程序。本文将介绍Java网络编程的基础知识,面向初学者,详细讨论网络通信的概念、Socket编程、服务器和客户端编程等内容。
194 0
|
5月前
|
网络协议 Linux 网络架构
|
负载均衡 安全 网络协议
网络编程懒人入门(十五):外行也能读懂的网络硬件设备功能原理速成
本文是《网络编程懒人入门》系列文章的第15篇,本篇将继续以通俗易懂的文字,帮你无脑理解各种基础网络硬件设备的功能原理。
119 0
|
IDE Unix Linux
Linux设备驱动基本概念
Linux设备驱动基本概念
嵌入式开发学习之--通讯的基本概念
嵌入式开发学习之--通讯的基本概念
嵌入式开发学习之--通讯的基本概念