Linux串口通信方式讲解,linux下的串口通信程序详解.doc

41528d3028836879cd698677c3999917.giflinux下的串口通信程序详解.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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值