嵌入式串口通信的设计讲解_第1页
嵌入式串口通信的设计讲解_第2页
嵌入式串口通信的设计讲解_第3页
嵌入式串口通信的设计讲解_第4页
嵌入式串口通信的设计讲解_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、*实践教学*兰州理工大学计算机与通信学院2013年春季学期嵌入式系统开发技术课程设计题 目:嵌入式串口通信的设计专业班级:通信工程三班姓 名:学 号:指导教师:张玺君成 绩:随着In ternet的发展和后PC时代的到来,嵌入式系统以其可靠性强、体积 小、专用性、成本低等特性得到日益广泛的应用。目前嵌入式系统技术已经成为了最热门的技术之一。与此同时,一个独立的嵌入式系统的功能缺陷也逐渐暴露 出来。新一代嵌入计算系统的功能集成和应用模式使之迅速向网络化嵌入计算的 方向发展,标准和统一的TCP/IP通信协议是独立于任何厂家的硬件的,因此嵌 入环境下的实时网络通信成为嵌入计算技术研究的重点和热点。本

2、文通过基于 2410F的嵌入式串口通信的实现,按照嵌入式系统的软、硬件结构组成,较为详细 地介绍了串口通信的硬件电路和软件实现方法。关键词:嵌入式 串口通信 2410F目录前言 1一、串口通信概述 21.1串口通信的原理 21.2串口通信的开发工具 21.2.1 CC2530 功耗 21.2.2 ARM 简介 31.2.3 Linux 系统简介 31.3串口通信的基本任务 41.4串口通信协议及实现 4二、RS-232C标准 62.1引脚定义 62.2字符(帧)格式 72.3握手协议 82.4 双机互连方式 102.4.1无硬件握手情况 102.4.2 DTR 和 DSRB手情况 10三、串口

3、驱动程序设计 123.1串口操作需要的头文件 123.2打开串口 123.3串口设置 123.4串口读写 153.5关闭串口 16四、源程流程图 18五、源程序代码 19参考文献 20总结 22、八 、-前言 嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可定制, 适用于不同应用 场合,对功能,可靠性,成本,体积,功耗有严格要求的专用计算机系统。它一般由嵌入式 微处理器,外围硬件设备,嵌入式操作系统,用户应用程序 4 个部分组成。用于实现对其他 设备的控制,监视或管理等功能。嵌入式系统已经广泛应用于科学研究,工业控制,军事技 术,交通通信,医疗卫生,消费娱乐等领域,人们常用的手机,PDA

4、汽车,智能家电,GPS等均是嵌入式系统的典型代表。串口通信是简单嵌入式系统的一个应用, 串口通信是指外设和计算机间, 通过数据信号 线 、地线、控制线等,按位进行传输数据的一种通讯方式。这种通信方式使用的数据线少, 在远距离通信中可以节约通信成本,但其传输速度比并行传输低。一、串口通信概述所谓串口通信,是指外设和计算机间使用一根数据信号线(另外需要地线),数据在一 根数据信号线上一位一位地进行传输,每一位数据都占据一个固定的时间长度。串口传输是二进制代码序列在一条信道上以位(元码)为单位,按时间顺序且按位传输 的通信方式。串行传输时,发送端按位发送,接收端按位接受,同时还要对所传输的位加以 确

5、认,所以收发双方要采取同步措施,否则接受端将不能正确区分出所传输的数据。串口通信不但能实现计算机与嵌入式开发板之间的数据传输,而且还能实现计算机对嵌 入式开发板的控制。若采用普通单片机,对外部设备的访问就需要利用复杂的汇编语言进行编 程或者使用C51自己编写设备的初始化以及读写访问程序,这样的过程不仅复杂,而且不利于 大规模的开发和设计。ARM与8051等普通单片机相比,具有开发简单、灵活,而且性能稳定、 功能易于扩展等一系列优势,因而在汽车电子、手持设备、无线领域和航空航天等嵌入式系统 中得到广泛的应用。将Linux移植到ARM嵌入式处理器后,可以利用操作系统中提供的系统调用把串口及其 他外

6、设当成普通文件进行操作,读写方便,因此进行相应开发可以提高系统编程效率,而且还 可以简化调试的复杂程度。1.1串口通信的原理串行端口的本质功能是作为CPU和串行设备间的编码转换器。当数从 CPU经过串行端口 发送出去时,字节数据转换为串行的位。在接收数据时,串行的位被转换为字节数据。串口 是系统资源的一部分,应用程序要使用串口进行通信,必须在使用之前向操作系统提出申请要 求(打开串口),通信完成后必须释放资源(关闭串口)。1.2串口通信的开发工具本次开发采用的硬件平台是利用 OURS-IOTV2-253实验箱和C语言来实现本次系统的 开发。1.2.1 CC2530 功耗CC2530使用不同的运

7、行模式或功耗模式以允许低功耗运行。超低功耗是通过关闭模块电 源以避免静态功耗以及通过使用时钟门控和关闭振荡器来减少动态功耗而获得的。CC2530有4个功耗模式,被称为PM0 PM1 PM2和 PM3 PM0是激活模式而PM3具有最低功耗。PM0全功能模式。连接到数字内核的电压调整器打开。16MHz RCS荡器或32MHz晶体振荡器运行或者它们同时运行。32.753KHz RC振荡器或32.768KHZ晶体振荡器运行。PM1连接到数字部分的电压调整器打开。16MHzC振荡器和32MHz晶体振荡器都不运行。 32.753KHz RC振荡器或32.768KHz晶体振荡器运行。在产生复位、外部中断或当

8、睡眠定时器 到期时系统将返回到PM0PM2连接到数字内核的电压调整器关闭。16MHz RC振荡器和32MHz晶体振荡器都不运 行。32.753KHZ RC振荡器或32.768KHZ晶体振荡器运行。在产生复位、外部中断或当睡眠定 时器到期时系统将返回到PM0PM3连接到数字内核的电压调整器关闭。没有振荡器运行。在产生复位或外部中断时系 统将返回到PM0PM0是全功能模式,在该模式下,CPU片内外设和RF收发器都处于激活状态,数字电 压调整器打开。该模式也被称为激活模式时。1.2.2 ARM 简介ARM(Advaneed RISC Machines),既可以认为是一个公司的名字,也可以认为是对一类

9、 微处理器的通称,还可以认为是一种技术的名字。1991年ARM公司成立于英国剑桥,主要出售芯片设计技术的授权。目前,采用 ARM技术知识产权(IP)核的微处理器,即通常所说的 ARMS处理器,已遍及工业控制、消费类电子产品、通信系统、网络系统、无线系统、军用 系统等各类产品市场,基于 ARM技术的微处理器应用约占据了 32位RISC微处理器70%以 上的市场份额,ARM技术正在逐步渗入到我们生活的各个方面。ARM公司是专门从事基于RISC 技术芯片设计开发的公司,作为知识产权供应商,本身不直接从事芯片生产,靠转让设计许 可,由合作公司生产各具特色的芯片, 世界各大半导体生产商从 ARM公司购买

10、其ARM微处理 器核,根据各自不同的应用领域,加入适当的外围电路,从而形成自己的ARM微处理器芯片进入市场。目前全世界有几十家大的半导体公司都使用 ARM公司的授权,因此既使得ARM技 术获得更多的第三方工具、制造、软件的支持,又使整个系统成本降低,使产品更容易进入 市场并被消费者所接受,更具有竞争力。ARM微处理器一般具有如下特点:(1) 体积小、低功耗、低成本、高性能;(2) 支持Thumb(16位)/ARM(32位)双指令集,能很好的兼容 8/16位器件;(3) 大量使用寄存器,指令执行速度更快;(4) 大多数数据操作都在寄存器中完成;(5) 寻址方式灵活简单,执行效率高;(6) 指令长

11、度固定。1.2.3 Linux 系统简介Linux是一类Unix计算机操作系统的统称。Linux操作系统也是自由软件和开放源代 码发展中最著名的例子。Linux 一般有四个主要部分:内核、Shell、文件结构和实用工具。(1) Linux 内核内核是系统的心脏,是运行程序和管理像磁盘和打印机等硬件设备的核心程序。它从用 户那里接受命令并把命令送给内核去执行。(2)Linux ShellShell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输 入的命令并把它送入内核去执行。实际上Shell是一个命令解释器,它解释由用户输入的命令并且把它们送到内核。不仅 如此,Shell有

12、自己的编程语言用于对命令的编辑,它允许用户编写由shell命令组成的程序。Shell编程语言具有普通编程语言的很多特点,比如它也有循环结构和分支控制结构等,用这种编程语言编写的Shell程序与其他应用程序具有同样的效果。(3)Linux文件结构文件结构是文件存放在磁盘等存储设备上的组织方法。主要体现在对文件和目录的组织 上。目录提供了管理文件的一个方便而有效的途径。我们能够从一个目录切换到另一个目录,而且可以设置目录和文件的权限,设置文件的共享程度。使用Linux,用户可以设置目录和文件的权限,以便允许或拒绝其他人对其进行访问。(4)Linux实用工具标准的Linux系统都有一套叫做实用工具的

13、程序,它们是专门的程序,例如编辑器、执 行标准的计算操作等。用户也可以产生自己的工具。1.3串口通信的基本任务(1)实现数据格式化:因为来自CPU的是普通的并行数据,所以,接口电路应具有实现不 同串行通信方式下的数据格式化的任务。 在异步通信方式下,接口自动生成起止式的帧数据格 式。在面向字符的同步方式下,接口要在待传送的数据块前加上同步字符。(2)进行串-并转换:串行传送,数据是一位一位串行传送的,而计算机处理数据是并行 数据。所以当数据由计算机送至数据发送器时,首先把串行数据转换为并行数才能送入计算机 处理。因此串并转换是串接口电路和的重要任务。(3) 控制数据传输速率:串行通信接口电路应

14、具有对数据传输速率-波特率进行先择 和控制的能力。(4)进行错误检测:在发送接口电路对传送的字符数据自动生成奇偶校验位或其他校验 码。在接收时,接口电路检查字符的奇偶校验或其他检验码,确定是否发生传送错误。(5)进行TTL与EIA电平转换:CPU和终端均采用TTL电平及正逻辑,它们与EIA采用 的电平及负逻辑不兼容,需在接口电路中进行转换。1.4串口通信协议及实现串行端口的本质功能是作为 CPU和串行设备间的编码转换器,一般微机内都配有通信适 配器,使计算机能够与其他具有 RS-232C串口的计算机或设备进行通信。本系统主要目的是实现宿主机与目标机之间的近距离串行通信,采用的宿主机是In te

15、l Centrino架构的RedHat Linux 9.03环境PC机,而目标机是ARM架构的开发板。本系统中目标机开发板的内核采用的是三星的S3C2410 ,该开发板采用核心板加底板的模式,核心板接口采用DIMM200标准连接器,工作非常可靠,可稳定运行在203 MHz的时钟频 率下。其外设非常丰富,功能强大,完全可以满足设计需要。串口线采用常用的RS-232C型接口模式,能实现计算机与开发板间的数据传输与控制。嵌入式串口通信采用EIA RS-232C标准。RS-232C 标准RS-232C是1969年由电子工业协会(EIA)公布的标准。该标准的用途是定义数据终端设备 DTE (Data T

16、erminal Equipment )与数据通信设备 DCE(Data Communication Equioment)的接口特性。数据终端设备就是连接通信两端设备的连线(如空MODEM)或其他设备。RS-232C标准的构架如图2.1所示。(数据终端设备DTE (数据通信设备DCE (数据通信设备DCE (数据终端设备DTE计算机A1 MMO通信线路ODDEEMMRS-232CRS-232CC忑/ylj 丫 巴 口 | o图2.1 RS-232C标准的构架计算机B电气特性RS-232C采用非归零、双极性编码,且使用负逻辑规定的逻辑电平: 辑“1 ”。+5+15V规定为逻辑“ 0 ”。信号电平与

17、TTL电平不兼容,-15-5V规定为逻所以需要电平转换电路(通常使用MAX3232转换)。电平转换电路如图2.2所示。图2.2 RS-232C的电平转换电路2.1引脚定义目前广泛的DB9引脚定义如图2.3所示。信号引脚定义的说明见表 2.1GND5DTR 4TXD 3RXD 2DCD 19 RIO8 CTSO7 RTSO6 DSR图2.3 DB9引脚定义9针串口 DB9针号功能说明缩写1输入,数据载波检测DCD2输入,接收数据RXD3输出,发送数据TXD4输出,DTE准备就绪DTR5信号地GND6输入,MODE准备就绪DSR7输出,请求发送RTS8输入,允许发送CTS9输入,振铃指示DELL表

18、2.1 DB9引脚说明2.2字符(帧)格式RS-232C采用起止式异步通信协议,其特点是一个字符接着一个字符进行传输,并且传输一个字符总是以起始位开始,以停止位结束,字符之间没有固定的时间间隔要求。其传输格式如图2.4所示,每一个字符的前面都有一位起始位(低电平,逻辑“ 0”),字符本身有58位数据位,接着字符后面是一位校验码(也可以没有校验码),最后是停止位。停止位后面是不定长度的空闲位。停止位和空闲位都规定为高电平(逻辑值“1”),这样就能保证起始位开始处一定有一个下跳沿,便于接受方识别。校验位(可以 没有)的间隔图2.4串行传输的工作原理示意图从图2.4中可以看出,这种格式是靠起始位和停

19、止位来实现字符的界定或同步的, 故称为起止式协议。没有统一的时钟,没有同步字符,依靠起始位和停止位标识每一帧,传 输时,数据的地位在前,高位在后。起始位实际上是作为同步信号附加进来的,当它变为低电平时,告诉接受方传输开始, 后面接着是数据位;而停止位则标志一个字符的结束。这样就为通信双方提供了何时开始收发、何时结束的标志。传输开始前,收发双方把所采用的字符格式(包括字符的数据位长度、 停止位位数、有无校验位以及是奇校验还是偶校验等)和数据的传输速率进行统一规定。传 输开始后,接收设备不断地检测线路,看是否有起始位到来。当收到一系列的“T(停止位或空闲位)之后,检测到一个下跳沿(由“1”变为“

20、0”),说明起始位出现,起始位经确认后,就开始接收所规定的数据位和奇偶校验位以及停止位。然后去掉停止位,对数据位进 行串并转换,并且经奇偶校验无误后,才算正确地接收到一个字符。一个字符接收完毕,接 收设备又继续测试线路,监视“0”电平的到来和下一位字符的开始,直到全部数据传输完毕 2.3握手协议RS-232C标准除了规定的字符格式和通信波特率以外,还在数据终端设备DTE和数据通信设备DCE之间定义了一套握手协议。握手协议的过程如图2.5所示。数据终端设备 DTE 本地MODEM远程MODEM远程DTE 图2.5 DTE与DCE的握手协议过程 DTR数据终端设备DTE准备就绪。DTE加电并能正确

21、实现通信时,向 DCE发出DTR 信号。 DSR数据通信设备DCE准备就绪。MODE加电并能正确执行通信功能时,DTE发出 DSR言号。 RTS请求发送。当DTE有数据需要向另一远程DTE传输时,DTE在检测DSR有效 时向本地MODE发出RTS信号。本地MODE检测到RTS有效,然后根据目的电话号码向远程 MODE发出呼叫。远程MODE收到该呼叫,发出回答载波信号。本地 MODE接受到此载波信 号,然后向远程MODE发出原载波信号进行确认,同时向 DTE发出数据载波信号DCD DCD数据载波信号检测。由MODE发向数据终端设备DTE表示已检测到对方载 波信号。 CTS允许发送,当一个 MOD

22、E辨认出对方MODE已经准备接收时,使用 CTSB号通知自己的DTE表示这个通信通路已经做好数据传输的准备,允许DTE进行数据发送。至此,通信链路建立,可以通信。 RI :振铃指示。如果MODE具有自动应答能力,当对方呼叫传来时, MODE向 DTE 发出该信号,指示此呼叫。在电话呼叫振铃结束后, MODE在DTE已准备好的情况下(即DTR 有效),立即向对方自动应答。2.4 双机互连方式双机可以利用RS-232C通信接口进行直接互连(数据终端设备 DTE到DTE,即空MODEM 连接。这种形式在嵌入式系统中应用极为广泛。由于RS-232C标准中有两对硬件握手协议的引线:DTR和DSR RTS

23、和CTS根据应用握手协议的机制不同,可分为 3种情况:无硬件握手、DTR和DSRg手、RTS和 CTS握手。 2.4.1无硬件握手情况DTETXDRXD计GND算机B无硬件握手的双机互连如图2.6所示。DTETXD计RXD算GND机A图2.6无握手的双机互连无硬件握手的连线最简单,只需要 3根线,应用比较多。但通信不可靠,接收缓冲区容 易溢出。2.4.2 DTR和DSF握手情况DTR和DSRg手的双机互连如图2.7所示若计算机A已经准备就绪,则使DTR有效。计算机B通过采集DS算机A图2.7 DTR和 DSRB手的双机互连已经做好接收数据的准备,可以发送数据。若计算机A为准备好,则DTR无效,

24、计算机B通过采集DSR得知计算机A尚未做好接收数据的准备,停止发送数据。2.4.3RTS和CTS握手情况RTS和CTSB手的双机互连如图2.8所示。DTE计算 机ATXD RXD GNDRTSCTSDTETXDRXD计GND算算机RTSBCTS图2.8 RTS和CTS握手的双机互连计算机B通过采集CTS得知计算机A已 A未准备好,则RTS无效,计算机B通过 停止发送数据。利用RTS和CTS握手进行发送和接收数据的过程如下 (设计算机A接收、计算机B发 送):若计算机A已经准备就绪,则使RTS有效 经做好接收数据的准备,可以发送数据。若计算机 采集CTS得知计算机A尚未做好接收数据的准备,三、串

25、口驱动程序设计由于嵌入式系统是一个受资源限制的系统,因此不能直接在嵌入式系统硬件上进行编程。 作为一个完整的嵌入式系统,其软件设计也是一个很重要的方面。本系统软件的实现是通过串 口设置和读写串口等操作来完成宿主机与目标机间的串口通信。3.1串口操作需要的头文件在开发嵌入式Linux串口驱动程序时,需要以下头文件。#include /* 标准输入输出定义*/#include /* 标准函数库定义 */#include /*UNIX 标准函数定义 */#in clude #i nclude #include vfcntl.h /* 文件控制定义 */#include /*POSIX终端控制定义 *

26、/#include /* 错误号定义 */3.2打开串口在嵌入式Linux系统中,打开一个串口设备和打开普通文件一样。嵌入式Linux系统下的串口文件通常位于/dev下:串口一为/dev/ttySO ;串口二为/dev/ttyS1 。打开串口时通过使用标准的文件函数 open()来进行操作的,下面假设以读写方式打 开串口一。int fd;/文件描述符fd=open( “/dev/ttyS0 ”,O_RDWR);以读写方式打开串口if(fd=-1)/如果不能打开串口一perror(“提示错误!” );3.3串口设置在Linux系统中,设备都是以文件的形式表示的,串口参数一般包括波特率、起始位数量

27、、 停止位数量等。下面对这些串口参数进行详细说明。起始位通信线路上没有数据被传送时,处于逻辑“T状态。当发送字符数数据是首先发送一个逻辑“0”信号,这个逻辑低电平就是起始位。起始位通过通信线路传输到接收端,接收端检 测到这个低电平之后,就开始准备接收数据位信号。起始位所起的作用就是使通信双方同步。数据位当接收端收到起始位后,开始接收数据位。数据位的个数可以是58位。在数据传送过程中,数据位从最低有效位开始传送,接收端收到数据后,依次将其转换成并行数据。奇偶校验位数据位发送完后,为了保证数据的可靠性,还要传送一个奇偶校验位。奇偶校验用于差 错检测。如果选择偶检验,则数据位和奇偶位的逻辑“1”的个

28、数必须为偶数,相反,如果是奇检验,则数据位和奇偶位的逻辑“ 1”的个数为奇数。停止位在奇偶位或数据位(当无奇偶校验时)之后发送停止位。停止位表示一个数据的结束。它可以是12位的低电平。接收端收到停止位后,通信线路便恢复逻辑“1”的状态,直到下一个数据的起始位到来。波特率通信线路上传输的位(码元)信号都必须保持一致的信号持续时间,单位时间内传送码 元的数目称为波特率。对大多数嵌入式设备来说,其波特率都设置为115200。访问串行口通过对设备文件的访问来实现,仅需打开相应的设备文件。串口的设置主要 是设置struct termios结构体中的各成员值。#i ncludestruct termiou

29、n sig ned short c_iflag; /*un sig ned short c_oflag;un sig ned short c_cflag;un sig ned short c_lflag; /*un sig ned char c_li ne;/*un sig ned char c_ccNCC; /* 波特率设置:输入模式标志*/*输出模式标志*/*控制模式标志*/本地模式标志*/ 线路规范*/ 控制特征值*/设置为 115200Bps*/struct termios opti on; tcgetattr(fd,&optio n); cfsetispeed(&optio n,B1

30、15200);/* cfsetospeed(&opti on ,B115200); tcsetattr(fd,TCANOW,&optio n); 检验位设置:无校验8位:optio ns.c_cflag &=PARENBoptio ns.c_cflag &=CSTOPB;opti on s.c_cflag &=CSIZE;opti on s.c_cflag| =CS8;奇效验(Odd)7位:optio ns.c_cflag| =PARENB;optio ns.c_cflag &=PARODD;optio ns.c_cflag &=CSTOPB;opti on s.c_cflag &=CSIZE

31、;opti on s.c_cflag| =CS7;偶校验(Even)7位:optio ns.c_cflag &=PARENB;optio ns.c_cflag| =OARODD;optio ns.c_cflag &= CSTOPB;opti on s.c_cflag &=CSIZE;opti on s.c_cflag| =CS7;Space校验7位:optio ns.c_cflag &= PARENB;optio ns.c_cflag &=CSTOPB;opti on s.c_cflag &二&CSIZE;opti on s.c_cflag| =CS8; 停止位设置:1 位:optio ns.

32、c_cflag &=CSTOPB;2 位:optio ns.c_cflag| =CSTOPB; 模式设置:需要注意的是,如果不是开发终端之类的,只是串口传输数据,而不需要串口来处理,那么 使用原始模式(Raw Mode)方式来通讯。options.c_lflag &=(ICANON| ECHO ECHOE ISIG);/*Input*/optio ns.c_oflag &=OPOST;/*Output*/3.4串口读写在Linux系统中,对设备和目录的操作都等同于文件的操作,这样大大简化了系统对不同设备的处理,提高了效率。在程序中,设备和文件都是使用文件描述符来进行操作的。文 件描述符是一个非

33、负的整数,是一个索引值,并指向内核中每个进程打开文件的记录表。当打 开一个现存的文件或者是创建一个新文件时,内核就向进程返回一个文件描述符;当需要读写 时也需要将文件描述符作为参数传递给相应的函数。在Linux系统中,所有的设备文件都位于“ / dev”下,其中串口对应的设备名为“ / dev/ ttySO ” ,因此对串口的读写就可以像读写(“read”和“ write ”)普通文件一样来读写设备 文件,所不同的是需要对串口的其他参数另做配置。打开串口之后,读写串口就很容易了,把串口当作文件读写就可以了。(1) 发送数据char butter1024;int Len gth=1024;int

34、 n Byte;n Byte=write(fd,buffer,Le ngth);(2) 读取串口数据使用文件操作read函数读取,如果设置为原始模式(RawMode传输数据,那么read函数 返回的字符数是实际串口收到的字符数。读取数据时比较需要技巧的。char buff1024;int Len=1024;int rdadByte=read(fd,buff,Le n);也可以使用操作文件的函数来实现异步读取,如fcntl,或者selectt等来操作。fd_set rfds;struct timeval tv;int retval;/*下面几行设置要监视进行读写操作的文件集*/FD-ZERO (

35、&rfds); / 文件集清零FD_SET(portsportNo.ha ndle,&rfds); /向集合中添加一个文件句柄tv.tv_sec=Timeout/1000; /设置等待的时间tv.tv_usec=(Timeeout%1000)*1000;retval=select(16,&rfds,NULL,NULL,&tv;) /文件所监视的文件集准备好.if(rdtvel) /文件集中有文件在等待时间内准备好了.actualRead=read(portsportNo.ha ndle,buf,maxC nt); /读取数据下面两个实例给出了串口读和写两个程序部分代码。写串口的程序将在宿主机上

36、运行,读串口程序将在目标板上运行。写串口部分程序:doprintf(“Input some words(enter quit to exit):” );memset(buff, O,BUFFER_SIZE);if(fgets(buff,BUFFER_SIZE,stdi n)=NULL)perror(“fgets ” );break;write(fd,buff,strle n(buff);whie(strncmp(buff, ” quit ” ,4);读串口部分程序:domemset(buff,0,BUFFER_SIZE);if(read(fd,buff,BUFFER_SIZE)0)printf

37、(“The received words are:%s ” ,buff);while(strncmp(buff, ” quit ” ,4);3.5关闭串口在Linux系统中,对设备和目录的操作都等同于文件的操作,关闭串口就是关闭文件,而设备和文件都是使用文件描述符来进行操作的。文件描述符是一个索引值,指向内核中每个 进程打开文件的记录表,因此关闭文件就只要关闭文描述符就可以了五、源程序代码/*serial_com.c*/#i nclude #in elude #in elude vfen tl.h#in elude verrno .h#i nclude #in clude #i nclude #i nclude #define MODEMDEVICE /dev/ttySO#defi ne _POSIX_SOURCE 1#define FALSE 0#defi ne TRUE 1volatile int STOP=FALSE;mai n()int fd,n=0,c,BAUDRATE,i,BUFNUMBER=32,READNUMBER=32;char receivebufBUFNUMBER;stru

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论