Linux下串口通信.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Linux下串口编程 Linux 系统下,诸如串口、触摸屏、GPIO、ADC 等等各种设备的操作,都是通过访问其对应的设备节点进行控制。相应地,串口通过访问/dev/ttyS0、/dev/ttyS1、/dev/ttyS2...对其进行配置与控制。 串口配置的参数包括:波特率,数据位,校验位,停止位与流控。 串口的配置主要是通过配置struct termios结构体,其原型如下: #include termios.h struct ermios { unsigned short c_iflag; /*输入模式标志*/ unsigned short c_oflag; /*输出模式标志*/ unsigned short c_cflag; /*控制模式标志*/ unsigned short c_lfag; /*本地模式标志*/ unsigned short c_line; /*line discipline*/ unsigned short c_cc[NCC]; /*control characters*/ }; 其中,通过对c_cflag与c_iflag的赋值,可以设置波特率、数据位、奇偶校验位、停止位、流控。 1、波特率配置 串口通过函数cfsetispeed和cfsetospeed设置端口的输入/输出波特率: int cfsetispeed(struct termios *termios_p, speed_t speed); int cfsetospeed(struct termios *termios_p, speed_t speed); 其中termios_p为串口结构体termios指针变量;speed 为需要设置的串口传输速率,取值与波特率对应关系见表一: 表一 2、数据位配置 串口数据位的配置通过修改termios结构体成员c_cflag实现,CS5、CS6、CS7和CS8分别表示数据位为5、6、7和8。在设置数据位前,先使用CSIZE 做位屏蔽: termios_p.c_cflag= ~CSIZE; termios_p.c_cflag |= CS5; /*配置为5数据位*/ 3、校验位配置 校验位包括:无校验、奇校验、偶校验、空格等: 无校验: termios_p.c_cflag= ~PARENB; termios_p.c_iflag= ~INPCK; 奇校验: termios_p.c_cflag|= (PARODD | PARENB); termios_p.c_iflag|= INPCK; 偶校验: termios_p.c_cflag |= PARENB; termios_p.c_cflag= ~PARODD; termios_p.c_iflag|= INPCK; 空格: termios_p.c_cflag= ~PARENB; termios_p.c_cflag= ~CSTOPB; 4、停止位配置 串口停止位通过激活c_cflag的CSTOPB 控制,具体方法如下: 1个停止位: termios_p.c_cflag= ~CSTOPB; 2个停止位: termios_p.c_cflag |= CSTOPB; 5、流控配置 流控用于标识数据的开始与结束,流控的种类包括硬件流、软件流与不使用流控。 不使用流控: termios_p.c_cflag= ~CRTSCTS; 硬件流: termios_p.c_cflag |= CRTSCTS; 软件流: termios_p.c_cfalg |= IXON | IXOFF | IXANY; 6.串口编程中常用的函数原型 1)tcgetattr()函数用于获取与终端相关的参数。 int tcgetattr(intfd, structtermios *termios_p); 参数fd为终端的文件描述符,返回的结果保存在termios结构体中。 2)tcsetattr()函数用于设置终端参数。 int tcsetattr(intfd, intoptional_actions, conststructtermios *termios_p); 函数在成功的时候返回0,失败的时候返回-1,并设置errno的值。参数fd为打开的终端文件描述符,参数optional_actions用于控制修改起作用的时间,而结构体termios_p中保存了要修改的参数。optional_actions可以取如下的值。 TCSANOW:不等数据传输完毕就立即改变属性。 TCSADRAIN:等待所有数据传输结束才改变属性。 TCSAFLUSH:清空输入输出缓冲区才改变属性。 错误信息: EBADF:非法的文件描述符。 EINTR:tcsetattr函数调用被信号中断。 EINVAL:参数option

文档评论(0)

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

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

1亿VIP精品文档

相关文档