网站大量收购闲置独家精品文档,联系QQ:2885784924

Linux环境串口通信.ppt

  1. 1、本文档共54页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Linux环境串口通信

c_lflag成员 Flag Description ISIG 当接收到字符INTR,QUIT,SUSP或DSUSP时,产生相应的信号. XCASE (不属于POSIX;LINUX下不支持)如果同时设置了ICANON,终端只有大写。输入被转换为小写,除了以\前缀的字符。输出时,大写字符被前缀\,小写字符被转换成大写。 ECHO 回显输入字符。 ECHOE 如果同时设置了ICANON,字符ERASE擦除前一个输入字符,WERASE擦除前一个词。 ECHOK 如果同时设置了ICANON,字符KILL删除当前行。 ECHONL 如果同时设置了ICANON,回显字符NL,即使没有设置ECHO。 * 串口配置详解 保存原先串口设置 为了安全起见和以后调试程序方便,可以先保存原先串口的配置,在这里可以使用函数tcgetattr(fd, old_cfg)。该函数得到由fd指向的终端的配置参数,并将它们保存于termios结构变量old_cfg中。该函数还可以测试配置是否正确、该串口是否可用等。若调用成功,函数返回值为0,若调用失败,函数返回值为?1 示例: if (tcgetattr(fd, old_cfg) != 0) { perror(tcgetattr); return -1; } * 串口配置详解 激活选项 CLOCAL和CREAD分别用于本地连接和接受使能,因此,首先要通过位掩码的方式激活这两个选项。 newtio.c_cflag |= CLOCAL | CREAD; 调用cfmakeraw()函数可以将终端设置为原始模式,在后面的实例中,采用原始模式进行串口数据通信。 cfmakeraw(new_cfg); * 串口配置详解 设置波特率 设置波特率有专门的函数,用户不能直接通过位掩码来操作。设置波特率的主要函数有:cfsetispeed()和cfsetospeed()。 示例: cfsetispeed(new_cfg, B115500); cfsetospeed(new_cfg, B115500); * 串口配置详解 设置字符大小 与设置波特率不同,设置字符大小并没有现成可用的函数,需要用位掩码。一般首先去除数据位中的位掩码,再重新按要求设置 示例: new_cfg.c_cflag = ~CSIZE; /* 用数据位掩码清空数据位设置 */ new_cfg.c_cflag |= CS8; * 串口配置详解 设置奇偶校验位 设置奇偶校验位需要用到termios中的两个成员:c_cflag和c_iflag。首先要激活c_cflag中的校验位使能标志PARENB和是否要进行校验,这样会对输出数据产生校验位,而输入数据进行校验检查。同时还要激活c_iflag中的对于输入数据的奇偶校验使能(INPCK)。 示例: 奇校验 new_cfg.c_cflag |= (PARODD | PARENB); new_cfg.c_iflag |= INPCK; 偶校验 new_cfg.c_cflag |= PARENB; new_cfg.c_cflag = ~PARODD; new_cfg.c_iflag |= INPCK; * 串口配置详解 设置停止位 设置停止位是通过激活c_cflag中的CSTOPB而实现的。若停止位为一个,则清除CSTOPB,若停止位为两个,则激活CSTOPB。 示例: new_cfg.c_cflag = ~CSTOPB; /* 将停止位设置为一个比特 */ new_cfg.c_cflag |= CSTOPB; /* 将停止位设置为两个比特 */ * 串口配置详解 设置最少字符和等待时间 在对接收字符和等待时间没有特别要求的情况下,可以将其设置为0,则在任何情况下read()函数立即返回,此时串口操作会设置为非阻塞方式。 示例: new_cfg.c_cc[VTIME] = 0; new_cfg.c_cc[VMIN] = 0; * 串口配置详解 清除串口缓冲 由于串口在重新设置之后,需要对当前的串口设备进行适当的处理,这时就可调用在termios.h中声明的tcdrain()、tcflow()、tcflush()等函数来处理目前串口缓冲中的数据。 原型: int tcflush(int fd, int queue_selector); /* 用于清空输入/输出缓冲区*/ tcflush()函数,对于在缓冲区中的尚未传输的数据,或者收到的但是尚未读取的数据,其处理方法取决于queue_selector的值,它可能的取值有以下几种。 ? TCIFLUSH:对接收到而未被读取的数据进行清空处理。 ? TCOFLUSH:对尚未传送成功的输出数据

文档评论(0)

qiwqpu54 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档