嵌入式串口通信设计.docx
嵌入式串口通信设计实践教学兰州理工大学计算机与通信学院2013年春季学期嵌入式系统开发技术课程设计题目:嵌入式串口通信设计专业班级:通信工程四班姓名:学号:指导教师:成绩:摘要嵌入式是以应用为中心,以计算机技术为基础,软件硬件可剪裁,习惯应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。随着嵌入式系统的进展与大规模应用,为了提升系统的整体性能,务必实现PC机与嵌入式计算机之间的通信。在实际开发应用中,串口通信是不可缺少的部分。目前嵌入式系统与PC机之间一种非常重要而且普遍应用的通信方式。本文通过基于241OF的嵌入式串口通信的实现,按照嵌入式系统的软、硬件结构构成,较为全面地介绍了串口通信的硬件电路与软件实现方法。通过与计算机串口间的接,实现在ARM平台上,传输速率115200bps,接收来自串口(通过超级终端)的字符并将接收到的字符发送到超级终端,实现监测。与外部设备通信的基本功能。关键字:嵌入式系统,串口通信,1.inUX系统前言4-一、串口通信概述4-1. 1串口通信的原理5-1.2 串口通信的开发工具5-1.2.1 241OF硬件平台简介5-1.3 串口通信的基本任务8-二、系统分析8-三、串口驱动程序设计16-3.1 串口操作需要的头文件17-3.2 打开串口17-3.3 串口设置17-3.4 串口读写20-3.5 关闭串口22-四、总结22-参考文献23-附录24-嵌入式系统的硬件平台构架、实时嵌入式操作系统的移植,为今后嵌入式系统的后继开发提供了一个嵌入式平台。基于嵌入式系统设计原理的嵌入式开发平台的设计的总体方案,从硬件与软件两个方面讲述了嵌入式系统的设计思想与方法,及其可行性的论证。嵌入式系统硬件平台的设计与调试,着重叙述了硬件平台的整体设计方案,包含各个设计模块的选型与接口电路的设计。随着世界科技水平的进展,嵌入式系统以其小型、专用、易携带、可靠性高的特点,已经在各个领域得到了广泛的应用,如军事国防、消费电子、通信设备、工业操纵等。随着嵌入式系统软硬件技术的飞速进展,其应用领域必将更为广阔,嵌入式系统的研究将会有非常广泛的前景。本课题既能够使电子专业学生对ARM920T的嵌入式串口通信系统的实际应用有深入的熟悉,更重要的是培养了我们的软硬件动手能力,是我们所学专业知识、理论、技能与培养学生独立完成基本科研任务能力的一个综合检验,具有一定的效果与意义。一、串口通信概述所谓串口通信,是指外设与计算机间使用一根数据信号线(另外需要地线),数据在一根数据信号线上一位一位进行传输,每一位数据都占据一个固定的时间长度。串口传输是二进制代码序列在一条信道上以位(元码)为单位,按时间顺序且按位传输的通信方式。串行传输时,发送端按位发送,接收端按位同意,同时还要对所传输的位加以确认,因此收发双方要采取同步措施,否则同意端将不能正确区分出所传输的数据。串口通信不但能实现计算机与嵌入式开发板之间的数据传输,而且还能实现计算机对嵌入式开发板的操纵。若使用普通单片机,对外部设备的访问就需要利用复杂的汇编语言进行编程或者者使用C51自己编写设备的初始化与读写访问程序,这样的过程不仅复杂,而且不利于大规模的开发与设计。ARM与8051等普通单片机相比,具有开发简单、灵活,而且性能稳固、功能易于扩展等一系列优势,因而在汽车电子、手持设备、无线领域与航空航天等嵌入式系统中得到广泛的应用。将1.inUX移植到ARM嵌入式处理器后,能够利用操作系统中提供的系统调用把串口及其他外设当成普通文件进行操作,读写方便,因此进行相应开发能够提高系统编程效率,而且还能够简化调试的复杂程度。1. 1串口通信的原理串行端口的本质功能是作为CPU与串行设备间的编码转换器。当数从CPU通过串行端口发送出去时,字节数据转换为串行的位。在接收数据时.,串行的位被转换为字节数据。串口是系统资源的一部分,应用程序要使用串口进行通信,务必在使用之前向操作系统提出申请要求(打开串口),通信完成后务必释放资源(关闭串口)。1.2 串口通信的开发工具本次开发使用的硬件平台是ARM920T处理器的2410F,开发系统平台是1.inux系统。1.3 .1241OF硬件平台简介2410F是基于三星ARM9嵌入式处理器S3C2410处理器的一款开发平台,“F”指基于2410的第六代开发套件。系统运行在202M的主24IOF是基于三星RM9嵌入式处理器S3C2410处理器频下发挥出色的性能。能够完成MP3,MPG,VOIP等工作。2410资源丰富适合ARM处理器的初学者学习使用。24IOF上面使用的核心模块体积小资源丰富,IO充足还能够应用在二次开发的产品当中。这款设备要紧包含核心板与底板两个部分,核心板使用6层PCB设计、底板使用2层PCB板设计,核心器件是基于目前业内主流使用的SAMSUNGARM9S3C2410处理器,主频202MHz,配套的存储器,网卡等设备;底板要紧是各类型的接口。S3C2410处理器是Samsung公司基于ARM公司的RM920T处理器核,使用0.18Um制造工艺的32位微操纵器。该处理器拥有:独立的16KB指令CaChC与16KB数据CaChe,MMU,支持TFT的1.CD操纵器,NAND闪存操纵器,3路UART,4路DMA,4路带PWM的Timer,I/O,RTC,8路10位DC,TouchSCrCen接口,IIOBUS接口,IIS-BUS接口,2个USB主机,1个USB设备,SD主机与MMC接口,2路SPI。S3C2410处理器最高可运行在203MHz。它是基于ARM920T内核的16/32位RISC处理器,要紧应用于嵌入式系统中。S3C2410拥有强大的数据处理能力,又有着低成本,低功耗等优点,在各类手持及移动设备上的应用越来越广泛,基于其平台的程序功能也越来越复杂。因此,在其平台上架构多线程的操作系统已成为越来越多系统设计者的诉求,本文介绍多线程在S3C2410上的具体实现过程。1.2.2ARM简介ARM(AdvancedRISCMachines),既能够认为是一个公司的名字,也能够认为是对一类微处理器的通称,还能够认为是一种技术的名字。1991年ARM公司成立于英国剑桥,要紧出售芯片设计技术的授权。目前,使用ARM技术知识产权(IP)核的微处理器,即通常所说的ARM微处理器,己遍及工业操纵、消费类电子产品、通信系统、网络系统、无线系统、军用系统等各类产品市场,基于ARM技术的微处理器应用约占据了32位RISC微处理器70%以上的市场份额,ARM技术正在逐步渗入到我们生活的各个方面。ARM公司是专门从事基于RlSC技术芯片设计开发的公司,作为知识产权供应商,本身不直接从事芯片生产,靠转让设计许可,由合作公司生产各具特色的芯片,世界各大半导体生产商从ARM公司购买其ARM微处理器核,根据各自不一致的应用领域,加入适当的外围电路,从而形成自己的ARM微处理器芯片进入市场。目前全世界有几十家大的半导体公司都使用ARM公司的授权,因此既使得ARM技术获得更多的第三方工具、制造、软件的支持,又使整个系统成本降低,使产品更容易进入市场并被消费者所同意,更具有竞争力。ARM微处理器通常具有如下特点:(1)体积小、低功耗、低成本、高性能;(2)支持Thumb(16位)ARM(32位)双指令集,能很好的兼容8/16位器件;(3)大量使用寄存器,指令执行速度更快;(4)大多数数据操作都在寄存器中完成;(5)寻址方式灵活简单,执行效率高;(6)指令长度固定。1.2. 31.inux系统简介1.inux是一类Unix计算机操作系统的统称。1.inux操作系统也是自由软件与开放源代码进展中最著名的例子。1.inux通常有四个要紧部分:内核、ShelK文件结构与有用工具。(1) 1.inux内核内核是系统的心脏,是运行程序与管理像磁盘与打印机等硬件设备的核心程序。它从用户那里同意命令并把命令送给内核去执行。(2) 1.inuxShellShell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。实际上Shell是一个命令解释器,它解释由用户输入的命令同时把它们送到内核。不仅如此,Shell有自己的编程语言用于对命令的编辑,它同意用户编写由shell命令构成的程序。Shell编程语言具有普通编程语言的很多特点,比如它也有循环结构与分支操纵结构等,用这种编程语言编写的Shell程序与其他应用程序具有同样的效果。(3) 1.inux文件结构文件结构是文件存放在磁盘等存储设备上的组织方法。要紧表达在对文件与目录的组织上。目录提供了管理文件的一个方便而有效的途径。我们能够从一个目录切换到另一个目录,而且能够设置目录与文件的权限,设置文件的共享程度。使用1.inux,用户能够设置目录与文件的权限,以便同意或者拒绝其他人对其进行访问。(4) 1.inux有用工具标准的1.inux系统都有一套叫做有用工具的程序,它们是专门的程序,比如编辑器、执行标准的计算操作等。用户也能够产生自己的工具。有用工具可分三类:编辑器:用于编辑文件。过滤器:用于接收数据并过滤数据。交互程序:同意用户发送信息或者接收来自其他用户的信息。1.4 串口通信的基本任务(1)实现数据格式化:由于来自CPU的是普通的并行数据,因此,接口电路应具有实现不一致串行通信方式下的数据格式化的任务。在异步通信方式下,接口自动生成起止式的帧数据格式。在面向字符的同步方式下,接口要在待传送的数据块前加上同步字符。(2)进行串一-并转换:串行传送,数据是一位一位串行传送的,而计算机处理数据是并行数据。因此当数据由计算机送至数据发送器时,首先把串行数据转换为并行数才能送入计算机处理。因此串并转换是串接口电路与的重要任务。(3)操纵数据传输速率:串行通信接口电路应具有对数据传输速率波特率进行先择与操纵的能力。(4)进行错误检测:在发送接口电路对传送的字符数据自动生成奇偶校验位或者其他校验码。在接收时,接口电路检查字符的奇偶校验或者其他检验码,确定是否发生传送错误。(5)进行TT1.与ElA电平转换:CPU与终端均使用TT1.电平及正逻辑,它们与ElA使用的电平及负逻辑不兼容,需在接口电路中进行转换。二、系统分析串行端口的本质功能是作为CPU与串行设备间的编码转换器,通常微机内都配有通信适配器,使计算机能够与其他具有RS-232C串口的计算机或者设备进行通信。本系统要紧目的是实现宿主机与目标机之间的近距离串行通信,使用的宿主机是InIeICentrinO架构的RedHat1.inUX9.03环境PC机,而目标机是ARM架构的开发板。本系统中目标机开发板的内核使用的是三星的S3C2410,该开发板使用核心板加底板的模式,核心板接口使用DIMM200标准连接器,工作非常可靠,可稳固运行在203MHz的时钟频率下。其外设非常丰富,功能强大,完全能够满足设计需要。串口线使用常用的RS-232C型接口模式,能实现计算机与开发板间的数据传输与操纵。嵌入式串口通信使用ElARS-232C标准。2. 1RS-232C标准RS-232C是1969年由电子工业协会(EIA)公布的标准。该标准的用途是定义数据终端设备DTE(DataTerminalEquipment)与数据通信设备DCE(DataCommunicationEquioment)的接口特性。数据终端设备就是连接通信两端设备的连线(如空MoDEM)或者其他设备。RS-232C标准的构架如图2.1所示。(数据终端设备DTE)(数据通信设备DCE)(数据通信设备DCE)(数据终端设备DTE)图2.1RS-232C标准的构架RS-232C标准的一些要紧规范如下。(1)电气特性RS-232C使用非归零、双极性编码,且使用负逻辑规定的逻辑电平:155V规定为逻辑“1”。+5+15V规定为逻辑“0”。信号电平与TT1.电平不兼容,因J示,TTL输入RS-232C输入图2.2RS-232C的电平转换电路(2)引脚定义目前广泛的DB9引脚定义如图2.3所示。信号引脚定义的说明见表2.1o图2. 3 DB9引脚定义表2.1DB9引脚说明9针串口DB9针号功能说明缩写1输入,数据载波检测DCD2输入,接收数据RXD3输出,发送数据TXD4输出,DTE准备就绪DTR5信号地GND6输入,MODEM准备就绪DSR7输出,请求发送RTS8输入,同意发送CTS9输入,振铃指示DE1.1.(3)字符(帧)格式RS-232C使用起止式异步通信协议,其特点是一个字符接着一个字符进行传输,同时传输一个字符总是以起始位开始,以停止位结束,字符之间没有固定的时间间隔要求。其传输格式如图2.4所示,每一个字符的前面都有一位起始位(低电平,逻辑“0”),字符本身有58位数据位,接着字符后面是一位校验码(也能够没有校验码),最后是停止位。停止位后面是不定长度的空闲位。停止位与空闲位都规定为高电平(逻辑值“1”),这样就能保证起始位开始处一定有一个下跳沿,便于同意方识别。校验位(能够停止位起始位没有)/数据的间隔图2.4串行传输的工作原理示意图从图2.4中能够看出,这种格式是靠起始位与停止位来实现字符的界定或者同步的,故称之起止式协议。没有统一的时钟,没有同步字符,依靠起始位与停止位标识每一帧,传输时,数据的地位在前,高位在后。起始位实际上是作为同步信号附加进来的,当它变为低电平常,告诉同意方传输开始,后面接着是数据位;而停止位则标志一个字符的结束。这样就为通信双方提供了何时开始收发、何时结束的标志。传输开始前,收发双方把所使用的字符格式(包含字符的数据位长度、停止位位数、有无校验位与是奇校验还是偶校验等)与数据的传输速率进行统一规定。传输开始后,接收设备不断地检测线路,看是否有起始位到来。当收到一系列的“1”(停止位或者空闲位)之后,检测到一个下跳沿(由“1”变为“0”),说明起始位出现,起始位经确认后,就开始接收所规定的数据位与奇偶校验位与停止位。然后去掉停止位,对数据位进行串并转换,同时经奇偶校验无误后,才算正确地接收到一个字符。一个字符接收完毕,接收设备又继续测试线路,监视“0”电平的到来与下一位字符的开始,直到全部数据传输完毕。(4)握手协议RS-232C标准除了规定的字符格式与通信波特率以外,还在数据终端设备DTE与数据通信设备DCE之间定义了一套握手协议。握手协议的过程如图2.5所示。数据终端设备DTE本地MODEM远程MODEM远程DTEDTR图2.5DTE与DCE的握手协议过程DTR:数据终端设备DTE准备就绪。DTE加电并能正确实现通信时,向DCE发出DTR信号。DSR:数据通信设备DCE准备就绪。MODEM加电并能正确执行通信功能时,DTE发出DSR信号。RTS:请求发送。当DTE有数据需要向另一远程DTE传输时,DTE在检测DSR有效时向本地MODEM发出RTS信号。本地MODEM检测到RTS有效,然后根据目的电话号码向远程MODEM发出呼叫。远程MoDEM收到该呼叫,发出回答载波信号。本地MODEM同意到此载波信号,然后向远程MoDEM发出原载波信号进行确认,同时向DTE发出数据载波信号DCDoDCD:数据载波信号检测。由MODEM发向数据终端设备DTE,表示已检测到对方载波信号。CTS:同意发送,当一个MODEM辨认出对方MODEM已经准备接收时,使用CTS信号通知自己的DTE,表示这个通信通路已经做好数据传输的准备,同意DTE进行数据发送。至此,通信链路建立,能够通信。R1.振铃指示。假如MODEM具有自动应答能力,当对方呼叫传来时,MODEM向DTE发出该信号,指示此呼叫。在电话呼叫振铃结束后,MODEM在DTE已准备好的情况下(即DTR有效),立即向对方自动应答。(5)双机互连方式双机能够利用RS-232C通信接口进行直接互连(数据终端设备DTE到DTE),即空MODEM连接。这种形式在嵌入式系统中应用极为广泛。由于RS-232C标准中有两对硬件握手协议的引线:DTR与DSR、RTS与CTS,根据应用握手协议的机制不一致,可分为3种情况:无硬件握手、DTR与DSR握手、RTS与CTS握手。无硬件握手情况无硬件握手的双机互连如图2.6所示。图2.6无握手的双机互连无硬件握手的连线最简单,只需要3根线,应用比较多。但通信不可靠,接收缓冲区容易溢出。DTR与DSR握手情况DTR与DSR握手的双机互连如图2.7所示。图2.7DTR与DSR握手的双机互使用DTR与DSR握手进行发送与接收数据的过程如下(设计算机A接收,计算机B发送):若计算机A已经准备就绪,则使DTR有效。计算机B通过采集DSR,得知计算机A已经做好接收数据的准备,能够发送数据。若计算机A为准备好,则DTR无效,计算机B通过采集DSR,得知计算机A尚未做好接收数据的准备,停止发送数据。RTS与CTS握手情况RTS与CTS握手的双机互连如图2.8所示。利用RTS与CTS握手进行发送与接收数据的过程如下(设计算机A接收、计算机B发送):若计算机A已经准备就绪,则使RTS有效。计算机B通过采集CTS,得知计算机A已经做好接收数据的准备,能够发送数据。若计算机A未准备好,则RTS无效,计算机B通过采集CTS,得知计算机A尚未做好接收数据的准备,停止发送数据。1.1 2系统硬件结构原理在串口通信的实现过程中,要保证数据传输的可靠性与稳固性,其硬件设计是必不可少的,本文中选用S3C2410芯片作为核心器件。S3C2410芯片是Samgsung公司16/32位的RISC处理器,使用arm920t内核,内部具有2个独立的UART操纵器与分开的16kB的指令Cache与16kB数据Cache,每个操纵器支持的最高波特率可达到230.4kbsoS3C2410芯片的这些特点,为实现在1.inux操作系统下计算机与开发板间的串口通信提供了可靠的保证。基于S3C2410的嵌入式串口通信的硬件结构原理如图2.9所示:宿主机(计算机系统)目标机(开发板)图2.9系统硬件结构原理图宿主机即计算机系统中,在1.inux操作系统下编写好串口通信的程序,通过网络ftp下载至目标机即开发板中,在相应的软件操纵命令下,通过串行接口线即可实现宿主机与目标机间数据的发送与接收。目标机中电源模块提供了开发板系统工作所需的正常电压,各类数据信息能够通过液晶显示模块及时显示出来,还能够通过键盘操纵模块来实现对目标机操作的操纵,外扩存储器模块能够由F1.ASH或者SDRAM构成,当然作为一个完整的系统,还务必配有其他外围电路,以保证系统的正常工作三、串口驱动程序设计由于嵌入式系统是一个受资源限制的系统,因此不能直接在嵌入式系统硬件上进行编程。作为一个完整的嵌入式系统,其软件设计也是一个很重要的方面。本系统软件的实现是通过串口设置与读写串口等操作来完成宿主机与目标机间的串口通信。3.1串口操作需要的头文件在开发嵌入式1.inux串口驱动程序时,需要下列头文件。#include<stdio.h>/*标准输入输出定义*/#include<stdlib.h>/*标准函数库定义*/#include<unisted.h>*UNIX标准函数定义*/#include<systypes.h>#include<sysstat.h>include<fcntl.h>/*文件操纵定义*/include<termios.h>*POSIX终端操纵定义*/#include<errno.h>/*错误号定义*/1.2 打开串口在嵌入式1.inUX系统中,打开一个串口设备与打开普通文件一样。嵌入式1.inUX系统下的串口文件通常位于dev下:串口一为/dev/ttySO;串口二devttyS1。打开串口时通过使用标准的文件函数OPen()来进行操作的,下面假设以读写方式打开串口一。intfd;文件描述符fd=openC7devttySO,O.RDWR);/以读写方式打开串口if(fd=-l)假如不能打开串口一(perror("提示错误!”);)1.3 串口设置在1.inux系统中,设备都是以文件的形式表示的,串口参数通常包含波特率、起始位数量、停止位数量等。下面对这些串口参数进行全面说明。(1)起始位通信线路上没有数据被传送时,处于逻辑“1”状态。当发送字符数数据是首先发送一个逻辑“0”信号,这个逻辑低电平就是起始位。起始位通过通信线路传输到接收端,接收端检测到这个低电平之后,就开始准备接收数据位信号。起始位所起的作用就是使通信双方同步。(2)数据位当接收端收到起始位后,开始接收数据位。数据位的个数能够是58位。在数据传送过程中,数据位从最低有效位开始传送,接收端收到数据后,依次将其转换成并行数据。(3)奇偶校验位数据位发送完后,为了保证数据的可靠性,还要传送一个奇偶校验位。奇偶校验用于差错检测。假如选择偶检验,则数据位与奇偶位的逻辑“1”的个数务必为偶数,相反,假如是奇检验,则数据位与奇偶位的逻辑“1”的个数为奇数。(4)停止位在奇偶位或者数据位(当无奇偶校验时)之后发送停止位。停止位表示一个数据的结束。它能够是12位的低电平。接收端收到停止位后,通信线路便恢复逻辑“1”的状态,直到下一个数据的起始位到来。(5)波特率通信线路上传输的位(码元)信号都务必保持一致的信号持续时间,单位时间内传送码元的数目称之波特率。对大多数嵌入式设备来说,其波特率都设置为115200O访问串行口通过对设备文件的访问来实现,仅需打开相应的设备文件。串口的设置要紧是设置structtermios结构体中的各成员值。#include<termios.h>structtermio*输入模式标志*/ /*输出模式标志*/ /*操纵模式标志*/ /*本地模式标志*/ /*线路规范*/*操纵特征值*/(unsignedshortc_iflag;unsignedshortc_oflag;unsignedshortc-cflag;unsignedshortc_lflag;unsignedcharc_line;unsignedcharc-ccNCC;波特率设置:structtermiosoption;tcgetattr(fd,&option);CfSetiSPeed(&option,Bl15200);/*设置为115200Bps*/cfsetospeed(&option,Bl15200);tcsetattr(fd,TCANOW,&option);检验位设置:无校验8位:options.c_cflag&=PARENBoptions.c_cflag&-CSTOPB;options.c_cflag&=CSIZE;OPtiOns.jcflag=CS8;奇效验(Odd)7位:options.c_cflagI=PARENB;options.c_cflag&=PARODD;options.c_cflag&=CSTOPB;options.c_cflag&=CSIZE;options.c_cflag=CS7;偶校验(EVen)7位:options.c_cflag&=PARENB;options.c_cflag=-OARODD;options.c_cflag&二CSTOPB;options.c_cflag&=CSIZE;options.c_cflag=CS7;Space校验7位:options.c_cflag&=PARENB;OPtions.jcflag&=CSTOPB;options.c_cflag&=&-CSIZE;options.c_cflagI=CS8;停止位设置:1 位:options.c_cflag&=CSTOPB;2 位:OPtions.jcflagI=CSTOPB;模式设置:需要注意的是,假如不是开发终端之类的,只是串口传输数据,而不需要串口来处理,那么使用原始模式(RaWMOde)方式来通讯。options.cjflag&=(ICAN0NIECHOIECHOEIISlG);/*InPUt*/options.c_oflag&=OPOST;/*Output*/3.4 串口读写在1.inUX系统中,对设备与目录的操作都等同于文件的操作,这样大大简化了系统对不一致设备的处理,提高了效率。在程序中,设备与文件都是使用文件描述符来进行操作的。文件描述符是一个非负的整数,是一个索引值,并指向内核中每个进程打开文件的记录表。当打开一个现存的文件或者者是创建一个新文件时,内核就向进程返回一个文件描述符;当需要读写时也需要将文件描述符作为参数传递给相应的函数。在1.inUX系统中,所有的设备文件都位于“/dev”下,其中串口对应的设备名为“/dev/ttySO”,因此对串口的读写就能够像读写(“read”与“write")普通文件一样来读写设备文件,所不一致的是需要对串口的其他参数另做配置。打开串口之后,读写串口就很容易了,把串口当作文件读写就能够了。(1)发送数据charbutter1024;int1.ength=1024;intnByte;nByte=write(fd,buffer,1.ength);(2)读取串口数据使用文件操作read函数读取,假如设置为原始模式(RaWMOde)传输数据,那么read函数返回的字符数是实际串口收到的字符数。读取数据时比较需要技巧的。charbuff1024;int1.en=1024;intrdadByte=read(fd,buff,1.en);也能够使用操作文件的函数来实现异步读取,如fcntl,或者者SeIeCtt等来操作。fd_setrfds;structtimevaltv;intretval;*下面几行设置要监视进行读写操作的文件集*/FD-ZERO(&rfds);文件集清零FD_SET(PortSportNo.handle,&rfds);/向集合中添加一个文件句柄tv.tv_sec=Timeout/l000;设置等待的时间tv.tv-usec=(Timeeout%1000)*1000;retval=select(16,&rfds,NU1.1.,NU1.1.,&tv;)文件所监视的文件集准备好.if(rdtvel)文件集中有文件在等待时间内准备好了.(actuaIRead=read(portsportNo.handle,buf,maxCnt);读取数据下面两个实例给出了串口读与写两个程序部分代码。写串口的程序将在宿主机上运行,读串口程序将在目标板上运行。写串口部分程序:do(Printf("Inputsomewords(entertquit,toexit):");memset(buff,0,BUFFER_SIZE);if(fgets(buff,BUFFER_SIZE,stdin)=NU1.1.)(perror(*fgets,*);break;)write(fd,buff,strlen(buff);Whie(StmCmP(buff,"quit”,4);读串口部分程序:domemset(buff,O,BUFFER_SIZE);if(read(fd,buff,BUFFER_SIZE)>O)printf(4Thereceivedwordsare:%sM,buff);)while(stmcmp(buff,quit,4);3.5 关闭串口在1.inux系统中,对设备与目录的操作都等同于文件的操作,关闭串口就是关闭文件,而设备与文件都是使用文件描述符来进行操作的。文件描述符是一个索引值,指向内核中每个进程打开文件的记录表,因此关闭文件就只要关闭文件描述符就能够了。close(fd);四、总结本文介绍了一种基于嵌入式的串口通信系统,使用S3C2410芯片作为串口通信的操纵核心器件,实现了在1.inux操作系统下宿主机与目标机间串口通信的基本功能。基于嵌入式系统设计原理的嵌入式开发平台的设计的总体方案,从硬件与软件两个方面讲述了嵌入式系统的设计思想与方法,及其可行性的论证。嵌入式系统硬件平台的设计与调试,着重叙述了硬件平台的整体设计方案,包含各个设计模块的选型与接口电路的设计。随着世界科技水平的进展,嵌入式系统以其小型、专用、易携带、可靠性高的特点,已经在各个领域得到了广泛的应用,如军事国防、消费电子、通信设备、工业操纵等。随着嵌入式系统软硬件技术的飞速进展,其应用领域必将更为广阔,嵌入式系统的研究将会有非常广泛的前景。通过这两个周的学习,还是学到了很多的知识!不仅纠正了课程学习过程中出现的许多错误,还在试验中验证了自己的一些猜想。在学习的过程中有失败,当然也有困惑,有成功,当然就有喜悦。尽管只是课程设计,我还是认真对待,能认识到自己的过错与不足不也是一件幸事吗!做学问也是做人,再作学问的过程中体味做人的道理不也是一种收获吗?记得古语中说:“学,然后知不足”!争取在以后的学习中改正自己。参考文献1张思民编著.嵌入式系统设计与应用M.北京:清华大学出版社,2008.2ARM1.imited.ARMDeveloperSuiter(Version1.2),AssembleGuide,ARMDUI0068A,2000.3熊茂华、杨震伦主编.ARM9嵌入式系统设计与开发应用M.北京:清华大学出版社,2008.4刘彦文主编.基于ARMTDMI的S3C44BOX嵌入式微处理器技术M.北京:清华大学出版社,2009.徐磊编著.1.inux系统下C程序开发详解M.北京:电子工业出版社,2008.华清远见嵌入式培训中心编著.嵌入式1.inux系统开发标准教程(第2版)M.北京:人民邮电出版社,2009.罗苑棠编著.嵌入式1.inux驱动程序与系统开发实例精讲M.北京:电子工业出版社,2009.8罗蕾主编.嵌入式实时操作系统及应用开发(第2版)M.北京:北京航空航天大学出版社,2007.华清远见嵌入式培训中心编著.1.inux设备开发详解(第2版)M.北京:人民邮电出版社,2010.10AdvancedProgrammingintheUNIXEnvironmentIM.W.RichardStevens,2000.串口通信程序serial_com.c源代码:/*serial_com.c*/include<string.h>include<unistd.h>ftinclude<fcntl.h>include<errno.h>#include<termios.h>#include<systypes.h>include<sysstat.h>ftinclude<stdlib.h>defineMODEMDEVICEVdev/ttySO"define_POSIX_SOURCE1defineFA1.SEOdefineTRUE1volatileintSTOP=FA1.SE;main()(intfd,n=0,c,BAUDRATE,i,BUFNUMBER=32,READNUMBER二32;charreceivebufBUFNUMBER;structtermiosoldtio,newtio;structstatst;errno=0;fd=open(MODEMDEVICE,O_RDWRO_NOCTTY/*O_NDE1.AYO_NONB1.OCK*/);*打开串口*/if(errno)(Perror(MODEMDEVICE);printf(z,ErrorinopenCOMIn);errno=0;exit(-1);)tcgetattr(fd,&oldtio);bzero(newtio,sizeof(newtio);BAUDRATE=B9600;Cfsetispeed(&newtio,BAUDRATE);/*设置串口输入波特率*/CfsetospeedUnewtio,BAUDRATE);/*设置串口输出波特率*/newtio.c_cflag!=CS81C1.OCA1.CREAD;*设置串口奇偶校验位*/newtio.JifIag=IGNPARTCRN1.;newtio.c_lflag="(ICANONECHO三ECHOEISIG);/newtio.jlflag=(ICANONIECHO/*IEeHoE*/11SlG);newtio.c_ccVINTR=O;newtio.c_ccVQUIT=O;newtio.c_ccVERASE=0;newtio.c_ccVKI1.1.=0;newtio.c_ccVEOF=4;newtio.c_ccVTIME=O;newtio.c_ccVMIN=1;newtio.c_ccVSWTC=O;newtio.c_ccVSTART=O;newtio.cccVSTOP=O;newtio.c_ccVSUSP=0;newtio.c_ccVEO1.=0;newtio.c_ccVREPRINT=0;newtio.c_ccVDISCARD=O;newtio.c_ccVWERASE=0;newtio.CCCV1.NEXT=0;newtio.c_ccVE01.2=0;/c=fcntl(fd,F_SETF1.,FNDE1.AY);c=tcfiush(fd,Tciof1.ush);tcsetattr(fd,TCSANOW,&newtio);/n=0;for(i=0;i<BUFNUMBER;i+)(receivebufi=0;)bzero(receivebuf,BUFNUMBER);printf(,'The1stateofthefile:%dn”,fd);n=read(fd,receivebuf,READNUMBER);*读串口*/printf(,The2stateofthefilen);if(errno)perror(,RED()Failed");/errno=0;printf(z,n=%dn,n);else(printf(zzreadcha