
Linux串口通讯.ppt
76页Linux开发基础 © 2005 博创科技北北 京京 博博 创 兴 业 科科 技技 有有 限限 公公 司司BEIJNG UNIVERSAL PIONEERING TECHNOLOGY Co . , LTD博创科技 嵌入互动博创科技 嵌入互动© 2005 博创科技教学大纲教学大纲nLinux系统入门基础nLinux程序设计基础—C环境nLinux Shell编程n任务管理、同步与通信n嵌入式Linux的串口通信 © 2005 博创科技北北 京京 博博 创 兴 业 科科 技技 有有 限限 公公 司司BEIJNG UNIVERSAL PIONEERING TECHNOLOGY Co . , LTD博创科技 嵌入互动第第5讲讲 嵌入式嵌入式Linux下的串口通信下的串口通信1 13 32 24 4串行串行I/O的基本概念和分类的基本概念和分类串行串行接口的物理接口标准接口的物理接口标准串行接口的软件协议串行接口的软件协议RS-232C串口规范串口规范5 5编写串口通信程序编写串口通信程序博创科技 嵌入互动© 2005 博创科技5.1 串行I/O的基本概念³串行通讯:一条信息的各位数据被逐位按顺序传送的通讯方式称为串行通讯。
³串行通讯的特点是:²数据位传送,传按位顺序进行,最少只需一根传输线即可完成²成本低但送速度慢串行通讯的距离可以从几米到几千米博创科技 嵌入互动© 2005 博创科技串行通信的分类³根据信息的传送方向²单工,信息只能单向传送²半双工,信息能双向传送但不能同时双向传送²全双工,信息能够同时双向传送³根据同步方式²同步通信±分面向字符、面向比特以及面向字节计数三种²异步通信博创科技 嵌入互动© 2005 博创科技5.2 串行接口的物理接口标准串行通信物理接口的基本任务(1/3)³实现数据格式化:因为来自CPU的是普通的并行数据,所以,接口电路应具有实现不同串行通信方式下的数据格式化的任务在异步通信方式下,接口自动生成起止式的帧数据格式在面向字符的同步方式下,接口要在待传送的数据块前加上同步字符³进行串-并转换:串行传送,数据是一位一位串行传送的,而计算机处理数据是并行数据所以当数据由计算机送至数据发送器时,首先把串行数据转换为并行数才能送入计算机处理因此串并转换是串行接口电路的重要任务博创科技 嵌入互动© 2005 博创科技串行通信物理接口的基本任务(2/3)³控制数据传输速率:串行通信接口电路应具有对数据传输速率——波特率进行选择和控制的能力。
³进行错误检测:在发送时接口电路对传送的字符数据自动生成奇偶校验位或其他校验码在接收时,接口电路检查字符的奇偶校验或其他校验码,确定是否发生传送错误博创科技 嵌入互动© 2005 博创科技串行通信物理接口的基本任务(3/3)³进行TTL与EIA电平转换:CPU和终端均采用TTL电平及正逻辑,它们与EIA采用的电平及负逻辑不兼容,需在接口电路中进行转换³提供EIA-RS-232C接口标准所要求的信号线:远距离通信采用MODEM时,需要9根信号线;近距离零MODEM方式,只需要3根信号线这些信号线由接口电路提供,以便与MODEM或终端进行联络与控制博创科技 嵌入互动© 2005 博创科技串行通信接口电路的组成³串行通信接口电路一般由可编程的串行接口芯片、波特率发生器、EIA与TTL电平转换器以及地址译码电路组成³串行接口芯片主要分为USAR和UART:(Universal Asynchronous Receiver and Transmitter)博创科技 嵌入互动© 2005 博创科技UART博创科技 嵌入互动© 2005 博创科技有关串行通信的物理标准³传输率²所谓传输率就是指每秒传输多少位,也常叫波特率²国际上规定了一个标准波特率系列,是最常用的波特率,系列为110、300、600、1200、4800、9600和19200³电特性³信号名称和接口标准²RS-232-C标准对两个方面作了规定,即信号电平标准和控制信号线的定义博创科技 嵌入互动© 2005 博创科技波特率波特率波特率(bps)1 号电缆传输距离(英尺)号电缆传输距离(英尺)2 号电缆传输距离(英尺)号电缆传输距离(英尺)110500030003005000300012003000300024001000500480010002509600250250博创科技 嵌入互动© 2005 博创科技5.3 串行通信协议³所谓通信协议是指通信双方的一种约定。
约定包括对数据格式、同步方式、传送速度、传送步骤、检纠错方式以及控制字符定义等问题做出统一规定,通信双方必须共同遵守³属于ISO'S OSI七层参考模型中的数据链路层博创科技 嵌入互动© 2005 博创科技流控制³流控制在串行通讯中的作用 ²“流” 是指数据流数据在两个串口之间传输时,常常会出现丢失数据的现象,或者两台计算机的处理速度不同,如台式机与单片机之间通讯,接收端数据缓冲区已满,则此时继续发送来的数据就会丢失²流控制能解决这个问题,当接收端数据处理不过来时,就发出“不再接收”的信号,发送端就停止发送,直到收到“可以继续发送”的信号再发送数据因此流控制可以防止数据的丢失 ³PC机中常用的两种流控制²硬件流控制(包括RTS/CTS、DTR/CTS等)²软件流控制XON/XOFF(继续/停止)博创科技 嵌入互动© 2005 博创科技硬件流控制 ³RTS/CTS(请求发送/清除发送)流控制²数据终端设备(如计算机)使用RTS来起始调制解调器或其它数据通讯设备的数据流²数据通讯设备(如调制解调器)则用CTS来起动和暂停来自计算机的数据流³DTR/DSR(数据终端就绪/数据设置就绪)流控制 博创科技 嵌入互动© 2005 博创科技软件流控制 ³一般通过XON/XOFF来实现软件流控制²当接收端的输入缓冲区内数据量超过设定的高位时,就向数据发送端发出XOFF字符(十进制的19或Control-S),发送端收到XOFF字符后就立即停止发送数据;²当接收端的输入缓冲区内数据量低于设定的低位时,就向数据发送端发出XON字符(十进制的17或Control-Q),发送端收到XON字符后就立即开始发送数据。
²一般可以从设备配套源程序中找到发送的是什么字符 博创科技 嵌入互动© 2005 博创科技软/硬流控制的关系³由于电缆线的限制,我们在普通的控制通讯中一般不用硬件流控制,而用软件流控制³若传输的是二进制数据,标志字符也有可能在数据流中出现而引起误操作,这是软件流控制的缺陷,而硬件流控制不会有这个问题博创科技 嵌入互动© 2005 博创科技奇偶校验³奇校验:所有传送的数位(含字符的各数位和校验位)中,“1”的个数为奇数,如:²1 0110,0101²0 0110,0001³偶校验:所有传送的数位(含字符的各数位和校验位)中,“1”的个数为偶数,如:²1 0100,0101²0 0100,0001³奇偶校验能够检测出信息传输过程中的部分误码(奇数误码能检出,偶数误码不能检出),同时,它不能纠错在发现错误后,只能要求重发但由于其实现简单,仍得到了广泛使用博创科技 嵌入互动© 2005 博创科技博创科技 嵌入互动© 2005 博创科技异步通信方式³起止式异步通信的特点是:²一个字符一个字符地传输,每个字符一位一位地传输,并且传输一个字符时,总是以“起始位”开始,以“停止位”结束,字符之间没有固定的时间间隔要求。
²每一个字符的前面都有一位起始位(低电平,逻辑值),字符本身由5-7位数据位组成,接着字符后面是一位校验位(也可以没有校验位),最后是一位或一位半或二位停止位,停止位后面是不定长的空闲位停止位和空闲位都规定为高电平(逻辑值1),这样就保证起始位开始处一定有一个下跳沿博创科技 嵌入互动© 2005 博创科技正逻辑或负逻辑³ 逻辑0 逻辑1³ 正逻辑 低电平 高电平³负逻辑 高电平 低电平³ 博创科技 嵌入互动© 2005 博创科技异步通信的信息格式³起始位 逻辑0 1位³数据位 逻辑0或1 5位、6位、7位、8位³校验位 逻辑0或1 1位或无³停止位 逻辑1 1位,1.5位或2位³空闲位 逻辑1 任意数量博创科技 嵌入互动© 2005 博创科技应用举例³传送8位数据45H(0100,0101B),奇校验,1个停止位,则信号线上的波形图³异步通信的速率:若9600bps,每字符8位,1起始,1停止,无奇偶,则实际每字符传送10位,则960字符/秒博创科技 嵌入互动© 2005 博创科技异步通信的发送过程³发送端以“发送时钟”和“波特率因子”决定一位的时间长度。
²当初始化后,或者没有信息需要发送时,发送端输出逻辑1,即空闲位,空闲位可以有任意数量²当需要发送时,发送端首先输出逻辑0,作为起始位²接着,发送端首先发送D0位,直到各数据位发送完²如果需要的话,发送端输出校验位²最后,发送端输出停止位(逻辑1)²如果没有信息需要发送时,发送端输出逻辑1,即空闲位,空闲位可以有任意数量如果还有信息需要发送,转入第(2)步博创科技 嵌入互动© 2005 博创科技异步通信的接收过程(1/2)³接收端以“接收时钟”和“波特率因子”决定一位的时间长度³下面以波特率因子等于16(接收时钟每16个时钟周期,使接收移位寄存器移位一次)、正逻辑为例说明异步通信的接收过程²(1)开始通信时,信号线为空闲(逻辑1),当检测到由1到0的跳变时,开始对“接收时钟”计数 ²(2)当计到8个时钟时,对输入信号进行检测,若仍为低电平,则确认这是“起始位”B,而不是干扰信号博创科技 嵌入互动© 2005 博创科技异步通信的接收过程(2/2)³(3)接收端检测到起始位后,隔16个接收时钟,对输入信号检测一次,把对应的值作为D0位数据若为逻辑1, 作为数据位1;若为逻辑0,作为数据位0³(4)再隔16个接收时钟,对输入信号检测一次,把对应的值作为D1位数据。
…直到全部数据位都输入³(5)检测校验位P(如果有的话)³(6)接收到规定的数据位个数和校验位后,通信接口电路希望收到停止位S(逻辑1),若此时未收到逻辑1,说明出现了错误,在状态寄存器中置“帧错误”标志若没有错误,对全部数据位进行奇偶校验,无校验错时,把数据位从移位寄存器中送数据输入寄存器若校验错,在状态寄存器中置奇偶错标志³(7)本幀信息全部接收完,把线路上出现的高电平作为空闲位³(8)当信号再次变为低时,开始进入下一幀的检测博创科技 嵌入互动© 2005 博创科技以上发送、接收过程应注意³接收端总是在每个字符的头部(即起始位)进行一次重新定位,因此发送端可以在字符之间插入不等长的空闲位,不影响接收端的接收³发送端的发送时钟和接收端的接收时钟,其频率允许有一定差异,当频率差异在一定范围内,不会引起接收端检测错位,能够正确接收并且这种频率差异不会因多个字符的连续接收而造成误差累计(因为每个字符的开始(起始位处)接收方均重新定位)只有当发送时钟和接收时钟频率差异太大,引起接收端采样错位,才造成接收错误³起始位、校验位、停止位、空闲位的信号,由“发送移位寄存器”自动插入在接收方,“接收移位寄存器”接收到一帧完整信息(起始、数据、校验、停止)后,仅把数据的各位送至“数据输入寄存器”,即CPU从“数据输入寄存器”中读得的信息,只是有效数字,不包含起始位、校验位、停止位信息博创科技 嵌入互动© 2005 博创科技同步通信方式³同步通信时,许多字符组成一个信息组(通常称为帧) ²在每组信息的开始要加上同步字符²在没有信息要传输时,要填上空字符,因为同步传输不允许有间隙²一个字符可以对应5~8位。
对同一个传输过程,所有字符对应同样的数位,比如说n位²传输时,按每n位划分为一个时间片,发送端在一个时间片中发送一个字符,接收端则在一个时间片中接收一个字符博创科技 嵌入互动© 2005 博创科技同步通信过程³同步传输时²一个信息帧中包含许多字符²每个信息帧用同步字符作为开始,一般将同步字符和空字符用同一个代码³在整个系统中,由一个统一的时钟控制发送端的发送接收端当然是应该能识别同步字符的,当检测到有一串数位和同步字符相匹配时,就认为开始一个信息帧,于是,把此后的数位作为实际传输信息来处理博创科技 嵌入互动© 2005 博创科技面向字符的同步协议(IBM的BSC)³协议规定了10个特殊字符(称为控制字符)²SYN:同步字符(Synchronous character),每帧可加1个(单同步)或2个(双同步)同步字符 ²SOH:标题开始(Start of Header)²标题:Header,包含源地址(发送方地址)、目的地址(接收方地址)、路由指示²STX:正文开始(Start of Text)²数据块:正文(Text),由多个字符组成²ETB:块传输结束(end of transmission block), 标识本数据块结束。
(全文分为若干块传输)²ETX:全文结束(end of text)²块校验:对从SOH开始,直到ETB/ETX的检验码 博创科技 嵌入互动© 2005 博创科技面向bit的同步协议(ISO的HDLC)³一帧信息可以是任意位,用位组合标识帧的开始和结束 帧格式为:²F场:标志场;作为一帧的开始和结束,标志字符为8位,01111110 ²A场:地址场,规定接收方地址,可为8的整倍位接收方检查每个地址字节的第1位,如果为"0",则后边跟着另一个地址字节若为"1",则该字节为最后一个地址字节²C场:控制场指示信息场的类型,8位或16位若第1字节的第1位为0,则还有第2个字节也是控制场²I场:信息场要传送的数据²FC场:帧校验场16位循环冗余校验码CRC除F场和自动插入的"0"位外,均参加CRC计算博创科技 嵌入互动© 2005 博创科技点对点协议PPP³PPP帧格式和HDLC的相似,PPP帧的前3个字段和最后两个字段和HDLC的格式是一样的。
PPP不是面向比特的,因而所有的PPP帧的长度都是整数个字节³与HDLC不同的是多了一个2个字节的协议字段当协议字段为0X0021时,信息字段就是IIP数据报若为0XC021,则信息字段是链路控制数据,而0X8021表示这是网络控制数据博创科技 嵌入互动© 2005 博创科技同步通信的"0位插入和删除技术"³在同步通信中,一帧信息以一个(或几个)特殊字符开始,例如,F场=01111110B但在信息帧的其他位置,完全可能出现这些特殊字符,为了避免接收方把这些特殊字符误认为帧的开始,发送方采用“0位插入技术",相应地,接收方采用"0位删除技术"²发送方的0位插入:除了起始字符外,当连续出现5个1时,发送方自动插入一个0使得在整个信息帧中,只有起始字符含有连续的6个1²接收方的"0位删除技术":接收方收到连续6个1,作为帧的起始,把连续出现5个1后的0自动删除博创科技 嵌入互动© 2005 博创科技同步通信的"字节填充技术"³设需要传送的原始信息帧为:SOT DATA EOT³字节填充技术采用字符替换方式,使信息帧的DATA中不出现起始字符SOT和结束字符EOT ³设按下表方式进行替换:²DATA中的原字符 替换为²SOT ESC X²EOT ESC Y²ESC ESC Z³其中,ESC=1AH,X、Y、Z可指定为任意字符(除SOT、EOT、ESC外)。
博创科技 嵌入互动© 2005 博创科技异步通信和同步通信的比较³异步通信简单,双方时钟可允许一定误差同步通信较复杂,双方时钟的允许误差较小³异步通信只适用于点<--> 点,同步通信可用于点<--> 多³通信效率:异步通信低,同步通信高博创科技 嵌入互动© 2005 博创科技5.4 RS-232C串口规范³RS-323C标准是美国EIA(电子工业联合会)与BELL等公司一起开发的1969年公布的通信协议它适合于数据传输速率在0~20000b/s范围内的通信³RS-232C标准(协议)的全称是EIA-RS-232C标准,其中EIA代表美国电子工业协会,RS(Recommeded Standard)代表推荐标准,232是标识号,C代表RS232的最新一次修改(1969),在这之前,有RS232B、RS232A它规定连接电缆和机械、电气特性、信号功能及传送过程目前微机通信接口中广泛采用博创科技 嵌入互动© 2005 博创科技两项说明³RS-232-C标准最初是远程通信连接数据终端设备DTE(Data Terminal Equipment)与数据通信设备DCE(Communication)而制定的。
但目前它又广泛地被借来用于计算机接口与终端或外设之间的近端连接标准故RS-232C标准与计算机不兼容的地方³RS-232C标准中所提到的“发送”和“接收”,都是站在DTE立场上来定义的由于在计算机系统中,往往是CPU和I/O设备之间传送信息,两者都是DTE,因此双方都能发送和接收博创科技 嵌入互动© 2005 博创科技电气特性³EIA-RS-232C对电器特性、逻辑电平和各种信号线功能都作了规定³物理特征: DB-25 DB-15 DB-9 ³在TxD和RxD上:²逻辑1(MARK) =-3V~-15V²逻辑0(SPACE)=+3~+15V³在RTS、CTS、DSR、DTR和DCD等控制线上²信号有效(接通,ON状态,正电压)=+3V~+15V²信号无效(断开,OFF状态,负电压) = -3V~-15V博创科技 嵌入互动© 2005 博创科技TTL RS232转换芯片³EIA-RS-232C是用正负电压来表示逻辑状态,与TTL以高低电平表示逻辑状态的规定不同因此,为了能够同计算机接口或终端的TTL器件连接,必须在EIA-RS-232C与TTL电路之间进行电平和逻辑关系的变换。
实现这种变换的方法可用分立元件,也可用集成电路芯片³目前较为广泛地使用集成电路转换器件,如MC1488、SN75150芯片可完成TTL电平到EIA电平的转换,而MC1489、SN75154可实现EIA电平到TTL电平的转换MAX232芯片可完成TTL←→EIA双向电平转换博创科技 嵌入互动© 2005 博创科技连接器的机械特性 ³连接器:由于RS-232C并未定义连接器的物理特性,因此,出现了DB-25、DB-15和DB-9各种类型的连接器,其引脚的定义也各不相同博创科技 嵌入互动© 2005 博创科技DB-25³PC和XT机采用DB-25型连接器DB-25连接器定义了25根信号线,分为4组:²异步通信的9个电压信号(含信号地SG)2,3,4,5,6,7,8,20,22²20mA电流环信号 9个(12,13,14,15,16,17,19,23,24)²空6个(9,10,11,18,21,25)²保护地(PE)1个,作为设备接地端(1脚)博创科技 嵌入互动© 2005 博创科技DB-9³在AT机及以后,不支持20mA电流环接口,使用DB-9连接器,作为提供多功能I/O卡或主板上COM1和COM2两个串行接口的连接器。
它只提供异步通信的9个信号³电缆长度:在通信速率低于20kb/s时,RS-232C所直接连接的最大物理距离为15m(50英尺)博创科技 嵌入互动© 2005 博创科技串口通信基本接线方法 9 9针串口(针串口(DB9DB9)) 2525针串口(针串口(DB25DB25)) 针号功能说明缩写针号功能说明缩写1数据载波检测DCD8数据载波检测DCD2接收数据RXD3接收数据RXD3发送数据TXD2发送数据TXD4数据终端准备DTR20数据终端准备DTR5信号地GND7信号地GND6数据设备准备好DSR6数据准备好DSR7请求发送RTS4请求发送RTS8清除发送CTS5清除发送CTS9振铃指示DELL22振铃指示DELL博创科技 嵌入互动© 2005 博创科技RS-232C的接口信号——DSR DTR³RS-232C规标准接口有25条线,4条数据线、11条控制线、3条定时线、7条备用和未定义线,常用的只有9根,它们是:³(1)联络控制信号线:²数据装置准备好(Data set ready-DSR)——有效时(ON)状态,表明通信装置处于可以使用的状态²数据终端准备好(Data Terminal ready-DTR)——有效时(ON)状态,表明数据终端可以使用。
²这两个信号有时连到电源上,一上电就立即有效这两个设备状态信号有效,只表示设备本身可用,并不说明通信链路可以开始进行通信了,能否开始进行通信要由下面的控制信号决定博创科技 嵌入互动© 2005 博创科技RS-232C的接口信号——RTS CTS³请求发送(Request to send-RTS)——用来表示DTE请求DCE发送数据,即当终端要发送数据时,使该信号有效(ON状态),向MODEM请求发送它用来控制MODEM是否要进入发送状态³允许发送(Clear to send-CTS)——用来表示DCE准备好接收DTE发来的数据,是对请求发送信号RTS的响应信号当MODEM已准备好接收终端传来的数据,并向前发送时,使该信号有效,通知终端开始沿发送数据线TxD发送数据³这对RTS/CTS请求应答联络信号是用于半双工MODEM系统中发送方式和接收方式之间的切换在全双工系统中作发送方式和接收方式之间的切换在全双工系统中,因配置双向通道,故不需要RTS/CTS联络信号,使其变高博创科技 嵌入互动© 2005 博创科技RS-232C的接口信号——DCD RI³接收线信号检出(Received Line detection-RLSD)——用来表示DCE已接通通信链路,告知DTE准备接收数据。
当本地的MODEM收到由通信链路另一端(远地)的MODEM送来的载波信号时,使RLSD信号有效,通知终端准备接收,并且由MODEM将接收下来的载波信号解调成数字两数据后,沿接收数据线RxD送到终端此线也叫做数据载波检出(Data Carrier dectection-DCD)线³振铃指示(Ringing-RI)——当MODEM收到交换台送来的振铃呼叫信号时,使该信号有效(ON状态),通知终端,已被呼叫博创科技 嵌入互动© 2005 博创科技RS-232C的接口信号——TxD RxD³(2)数据发送与接收线:²发送数据(Transmitted data-TxD)——通过TxD终端将串行数据发送到MODEM,(DTE→DCE)²接收数据(Received data-RxD)——通过RxD线终端接收从MODEM发来的串行数据,(DCE→DTE)³(3)地线²有两根线SG、PG——信号地和保护地信号线,无方向博创科技 嵌入互动© 2005 博创科技计算机串口的引脚说明博创科技 嵌入互动© 2005 博创科技实际应用AB博创科技 嵌入互动© 2005 博创科技 2 41432NULL MORDEM 的标准接法的标准接法博创科技 嵌入互动© 2005 博创科技NULL MORDEM 的标准接法5博创科技 嵌入互动© 2005 博创科技计算机串口通信常用连接最简连接简单连接完全连接博创科技 嵌入互动© 2005 博创科技5.5 编写串口通信程序³串口操作需要的头文件²#include
³串口的设置主要是设置 struct termio 结构体的各成员值 struct termio{unsigned short c_iflag; /* 输入模式标志 */unsigned short c_oflag;/* 输出模式标志 */unsigned short c_cflag;/* 控制模式标志*/unsigned short c_lflag;/* local mode flags */unsigned char c_line; /* line discipline */unsigned char c_cc[NCC]; /* control characters */};博创科技 嵌入互动© 2005 博创科技Control OptionsConstantDescriptionConstantDescriptionB0Bit mask for baud ratePARODDUse odd parity instead of evenB5050 baud…………HUPCLHangup (drop DTR) on last closeB115200115,200 baudEXTAExternal rate clockCLOCALLocal line - do not change "owner" of portEXTBExternal rate clockCSIZEBit mask for data bitsLOBLKBlock job control outputCS55 data bitsCNEW_RTSCTS CRTSCTSEnable hardware flow control (not supported on all platforms)CS66 data bitsCS77 data bitsCS88 data bitsCSTOPB2 stop bits (1 otherwise)CREADEnable receiverPARENBEnable parity bit博创科技 嵌入互动© 2005 博创科技波特率设置struct termios Opt;tcgetattr(fd, &Opt);cfsetispeed(&Opt,B19200); /*设置为19200Bps*/cfsetospeed(&Opt,B19200);tcsetattr(fd,TCANOW,&Opt);The TCSANOW constant specifies that all changes should occur immediately without waiting for output data to finish sending or input data to finish receiving.博创科技 嵌入互动© 2005 博创科技Constants for tcsetattrConstant Description TCSANOW Make changes now without waiting for data to complete TCSADRAIN Wait until everything has been transmitted TCSAFLUSH Flush input and output buffers and make the change 博创科技 嵌入互动© 2005 博创科技设置波特率的例子函数int speed_arr[] = { B38400, B19200, B9600, B4800, B2400, B1200, B300,B38400, B19200, B9600, B4800, B2400, B1200, B300, };int name_arr[] = {38400, 19200, 9600, 4800, 2400, 1200, 300, 38400, 19200, 9600, 4800, 2400, 1200, 300, };void set_speed(int fd, int speed){int i, status; struct termios Opt;tcgetattr(fd, &Opt); for ( i= 0; i < sizeof(speed_arr) / sizeof(int); i++) { if (speed == name_arr[i]) { tcflush(fd, TCIOFLUSH); cfsetispeed(&Opt, speed_arr[i]); cfsetospeed(&Opt, speed_arr[i]); status = tcsetattr(fd1, TCSANOW, &Opt); if (status != 0) { perror("tcsetattr fd1"); return; } tcflush(fd,TCIOFLUSH); } }}博创科技 嵌入互动© 2005 博创科技设置校验位(1/2)³无效验 8位 Option.c_cflag &= ~PARENB; // No ParityOption.c_cflag &= ~CSTOPB;Option.c_cflag &= ~CSIZE; /* Mask the character size bits */Option.c_cflag |= CS8; /* Select 8 data bits */³奇效验(Odd) 7位 Option.c_cflag |= ~PARENB;Option.c_cflag &= ~PARODD;Option.c_cflag &= ~CSTOPB;Option.c_cflag &= ~CSIZE;Option.c_cflag |= CS7; 博创科技 嵌入互动© 2005 博创科技设置校验位(2/2)³偶效验(Even) 7位 Option.c_cflag &= ~PARENB;Option.c_cflag |= ~PARODD;Option.c_cflag &= ~CSTOPB;Option.c_cflag &= ~CSIZE;Option.c_cflag |= CS7; ³Space效验 7位 Option.c_cflag &= ~PARENB;Option.c_cflag &= ~CSTOPB;Option.c_cflag &= &~CSIZE;Option.c_cflag |= CS8; 博创科技 嵌入互动© 2005 博创科技设置硬件流控制³If the CNEW_RTSCTS or CRTSCTS constants are defined on your system then hardware flow control is probably supported. ³Do the following to enable hardware flow control: ²options.c_cflag |= CNEW_RTSCTS; /* Also called CRTSCTS */³Similarly, to disable hardware flow control: ²options.c_cflag &= ~CNEW_RTSCTS;博创科技 嵌入互动© 2005 博创科技设置软件流控制³Software flow control is enabled using the IXON, IXOFF , and IXANY constants: ²options.c_iflag |= (IXON | IXOFF | IXANY);³To disable software flow control simply mask those bits: ²options.c_iflag &= ~(IXON | IXOFF | IXANY);²The XON (start data) and XOFF (stop data) characters are defined in the c_cc array described below博创科技 嵌入互动© 2005 博创科技设置停止位³1位停止位options.c_cflag &= ~CSTOPB;³2位停止位options.c_cflag |= CSTOPB;博创科技 嵌入互动© 2005 博创科技Local Options (for c_lflag) Constant Description ISIG Enable SIGINTR, SIGSUSP, SIGDSUSP, and SIGQUIT signals ICANON Enable canonical input (else raw) XCASE Map uppercase \lowercase (obsolete) ECHO Enable echoing of input characters ECHOE Echo erase character as BS-SP-BS ECHOK Echo NL after kill character ECHONL Echo NL NOFLSH Disable flushing of input buffers after interrupt or quit characters IEXTEN Enable extended functions ECHOCTL Echo control characters as ^char and delete as ~? ECHOPRT Echo erased character as character erased ECHOKE BS-SP-BS entire line on line kill FLUSHO Output being flushed PENDIN Retype pending input at next read or input char TOSTOP Send SIGTTOU for background output 博创科技 嵌入互动© 2005 博创科技通讯模式³如果只是串口传输数据,而不需要串口来处理,那么使用原始模式(Raw Mode)方式来通讯,设置方式如下: ²options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); /*Input*/³否则,选择经典模式²options.c_lflag |= (ICANON | ECHO | ECHOE);博创科技 嵌入互动© 2005 博创科技Input Options (for c_iflag)Constant Description INPCK Enable parity check IGNPAR Ignore parity errors PARMRK Mark parity errors ISTRIP Strip parity bits IXON Enable software flow control (outgoing) IXOFF Enable software flow control (incoming) IXANY Allow any character to start flow again IGNBRK Ignore break condition BRKINT Send a SIGINT when a break condition is detected INLCR Map NL to CR IGNCR Ignore CR ICRNL Map CR to NL IUCLC Map uppercase to lowercase IMAXBEL Echo BEL on input line too long 博创科技 嵌入互动© 2005 博创科技Output Options (for c_oflag)Constant Description OPOST Postprocess output (not set = raw output) OLCUC Map lowercase to uppercase ONLCR Map NL to CR-NL OCRNL Map CR to NL NOCR No CR output at column 0 ONLRET NL performs CR function OFILL Use fill characters for delay OFDEL Fill character is DEL NLDLY Mask for delay time needed between lines NL0 No delay for NLs NL1 Delay further output after newline for 100 milliseconds CRDLY Mask for delay time needed to return carriage to left column CR0 No delay for CRs CR1 Delay after CRs depending on current column position CR2 Delay 100 milliseconds after sending CRs CR3 Delay 150 milliseconds after sending CRs TABDLY Mask for delay time needed after TABs TAB0 No delay for TABs TAB1 Delay after TABs depending on current column position TAB2 Delay 100 milliseconds after sending TABs TAB3 Expand TAB characters to spaces BSDLY Mask for delay time needed after BSs BS0 No delay for BSs BS1 Delay 50 milliseconds after sending BSs VTDLY Mask for delay time needed after VTs VT0 No delay for VTs VT1 Delay 2 seconds after sending VTs FFDLY Mask for delay time needed after FFs FF0 No delay for FFs FF1 Delay 2 seconds after sending FFs 博创科技 嵌入互动© 2005 博创科技输出模式³Choosing Processed Output²options.c_oflag |= OPOST;²Of all the different options, you will only probably use the ONLCR option which maps newlines into CR-LF pairs. The rest of the output options are primarily historic and date back to the time when line printers and terminals could not keep up with the serial data stream! ³Choosing Raw Output²options.c_oflag &= ~OPOST;²When the OPOST option is disabled, all other option bits in c_oflag are ignored. 博创科技 嵌入互动© 2005 博创科技Control Characters (For c_cc )Constant Description Key VINTR Interrupt CTRL-C VQUIT Quit CTRL-Z VERASE Erase Backspace (BS) VKILL Kill-line CTRL-U VEOF End-of-file CTRL-D VEOL End-of-line Carriage return (CR) VEOL2 Second end-of-line Line feed (LF) VMIN Minimum number of characters to read VTIME Time to wait for data (tenths of seconds) 博创科技 嵌入互动© 2005 博创科技读写串口操作³发送数据:char buffer[1024];int Length=1024;int nByte;nByte = write(fd, buffer ,Length)³读取串口数据char buff[1024];int Len=1024;int readByte = read(fd, buff, Len);³关闭串口close(fd);博创科技 嵌入互动© 2005 博创科技举例/**********************************************************************代码说明:使用串口二测试的,发送的数据是字符,但是没有发送字符串结束符号,所以接收到后,后面加上了结束符号。
我测试使用的是单片机发送数据到第二个串口,测试通过/#define FALSE -1#define TRUE 0/*********************************************************************/int OpenDev(char *Dev){intfd = open( Dev, O_RDWR ); //| O_NOCTTY | O_NDELAYif (-1 == fd){ perror("Can't Open Serial Port");return -1;}elsereturn fd;}博创科技 嵌入互动© 2005 博创科技int main(int argc, char **argv){int fd; int nread;char buff[512]; char *dev = "/dev/ttyS1"; //串口二fd = OpenDev(dev);set_speed(fd,19200);if (set_Parity(fd,8,1,'N') == FALSE) {printf("Set Parity Error");exit (0);} while (1) { //循环读取数据 while { ((nread = read(fd, buff, 512))>0) printf("Len %d",nread); buff[nread+1] = ''; printf( "%s", buff); } }//close(fd); // exit (0);}博创科技 嵌入互动© 2005 博创科技 串口程序流程博创科技 嵌入互动© 2005 博创科技进一步学习³http://digilander.libero.it/robang/rubrica/serial.htm²《Serial Programming Guide for POSIX Operating Systems》 © 2005 博创科技北北 京京 博博 创 兴 业 科科 技技 有有 限限 公公 司司BEIJNG UNIVERSAL PIONEERING TECHNOLOGY Co . , LTD博创科技 嵌入互动谢 谢 各 位。












