Linux串口编程分析.docVIP

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Linux串口编程分析

Linux串口编程分析 这个话题,大家可能再熟悉不过了,网上资料很多,因为这是linux下编程比较重要的一个方面,懂这方面的人很多;这里我只是想给初学者简单的介绍下这方面的知识: 串口编程其实说白了, 是拿根串口线把电脑和所要控制的机器连接起来,然后在通过编程的方式对下位机进行发送指定的数据或进行控制,或进行传输,然后在接受下位机反馈回来的信息提示是否已经正确。是不是好俗! 串口是计算机上一种非常通用设备通信的协议,常用PC机上包含的是RS232规格的串口,当然,除了RS232 ,还有RS485和RS422两种规格,用于不同的设备通信;这里主要是介绍RS232串口编程。 在串口编程中, 比较重要的是串口的设置,我们要设置的部分包括 波特率,数据位,停止位,奇偶校验位;要注意的是,每台机器的串口默认设置可能是不同的,如果你没设置这些,仅仅按照默认设置进行发送数据,很可能出现n 多异想不到而又查不出来的情况;所以,在真正通讯前,我们必须设置这些: 下面就开始介绍这些基本设置的函数,(其实都是些固定框架,程序中稍微改改就行)~o~ 1.设置波特率 注 意每台机器都有输出和输入接受信息的速度 ,所以用cfsetispeed 和cfsetospeed来分别设置;注意到struct termios 这样一个结构,它包括了串口端所有的设置,下面还要用到。它在termios.h中被定义。。还有一个地方比较难以理解,为什么设置了speed_arr 和name_arr两个数组,这是因为在linuxe下,系统为波特率专门准备了一张表用B38400,B19200......代替,而我们实际上传进 去的只能是38400,19200这些值,所以我们拿我们传进去的和name_arr进行比较,如果相等则从系统对照表中取出相应值进行设置,如果不等证 明传的值在系统对照表中没有,则不进行设置。 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; int 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(fd, TCSANOW, Opt); //这是立刻把bote rates设置真正写到串口中去 if(status != 0) perror(tcsetattr fd1); //设置错误 return; } tcflush(fd,TCIOFLUSH); //同上 } } 2。设置奇偶校验,数据,停止位 这三个参数通常放在一起设置,databits是数据位,stopbits是停止位,parity是校验位。 串 口的这些设置是很复杂很复杂的,Termios成员中共定义c_cflag 控制项 c_lflag 线路项 c_iflag 输入项 c_oflag 输出项 c_cc 控制字符c_ispeed 输入波特 c_ospeed 输出波特 那么多项 ,对于每一项都有很多的设置,这里我们不讲的那么复杂,就一个通用的串口框架进行解释,主要进行奇偶校验,数据,停止位的设置。而其他的一些控制项,在程 序中用到时穿插讲解: int set_Parity(int fd,int databits,int stopbits,int parity) { struct termios options; //定义一个结构 if( tcgetattr( fd,options)!=0) //首先读取系统默认设置options中,必须 { perror(SetupSerial 1); return(FALSE); } options.c_cflag = ~CSIZE; //这

文档评论(0)

yaobanwd + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档