linux下的串口通信程序详解.doc
linux下的串口通信程序详解2009-07-1912:37为了说明问题,下面给出测试程序来理解linux下的串口操作流程,例程receive.c用来接收从串口发来的数据,而例程send.c用来发送数据到串口。二者成功建立串口连接后,串口接收端会收到串口发送端发来的字符串数据“Hello,thisisaSerialPorttest!”。1.receive.c程序清单:viewplain1./*******************************************************2.*ilename:receive.c3.*Description:ReceivedatafromSerial_Port4.*Date:5.*******************************************************/6./*********************头文件定义***********************/7.#include8.#include9.#include10.#include11.#include12.#include13.#include14.#include15.#include“math.h“16.#definemax_buffer_size100/*定义缓冲区最大宽度*/17./*********************************************************/18.intfd,s;19.intopen_serial(intk)20.{21.if(k==0)/*串口选择*/22.{23.fd=open(“/dev/ttyUSB0“,O_RDWR|O_NOCTTY);/*读写方式打开串口*/24.perror(“open/dev/ttyUSB0“);25.}26.else27.{28.fd=open(“/dev/ttyS1“,O_RDWR|O_NOCTTY);29.perror(“open/dev/ttyS1“);30.}31.if(fd==-1)/*打开失败*/32.return-1;33.else34.return0;35.}36./********************************************************************/37.intmain()38.{39.charhd[max_buffer_size],*rbuf;/*定义接收缓冲区*/40.intflag_close,retv,i,ncount=0;41.structtermiosopt;42.intrealdata=0;43./*******************************************************************/44.open_serial(0);/*打开串口1*/45./*******************************************************************/46.tcgetattr(fd,47.cfmakeraw(48./*****************************************************************/49.cfsetispeed(/*波特率设置为9600bps*/50.cfsetospeed(51./*******************************************************************/52.tcsetattr(fd,TCSANOW,53.rbuf=hd;/*数据保存*/54.printf(“readyforreceivingdata./n“);55.retv=read(fd,rbuf,1);/*接收数据*/56.if(retv==-1)57.{58.perror(“readbad1“);/*读状态标志判断*/59.}60./*************************开始接收数据******************************/61.while(*rbuf!= /n )/*判断数据是否接收完毕*/62.{63.ncount+=1;64.rbuf++;65.retv=read(fd,rbuf,1);66.if(retv==-1)67.{68.perror(“readbad2“);69.}70.}71./*******************************************************************/72.printf(“Thedatareceivedis:/n“);/*输出接收到的数据*/73.for(i=0;i8.#include9.#include10.#include11.#include12.#include13.#include14.#include15.#definemax_buffer_size100/*定义缓冲区最大宽度*/16./*******************************************/17.intfd;/*定义设备文件描述符*/18.intflag_close;19.intopen_serial(intk)20.{21.if(k==0)/*串口选择*/22.{23.fd=open(“/dev/ttyUSB0“,O_RDWR|O_NOCTTY);/*读写方式打开串口*/24.perror(“open/dev/ttyUSB0“);25.}26.else27.{28.fd=open(“/dev/ttyS1“,O_RDWR|O_NOCTTY);29.perror(“open/dev/ttyS1“);30.}31.if(fd==-1)/*打开失败*/32.return-1;33.else34.return0;35.}36./********************************************************************/37.intmain(intargc,char*argv[])38.{39.charsbuf[]={“Hello,thisisaSerial_Porttest!/n“};/*待发送的内容,以/n为结束标志*/40.intsfd,retv,i;41.structtermiosoption;42.intlength=sizeof(sbuf);/*发送缓冲区数据宽度*/43./*******************************************************************/44.open_serial(0);/*打开串口1*/45./*******************************************************************/46.printf(“readyforsendingdata./n“);/*准备开始发送数据*/47.tcgetat