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 串口编程 /u1/52454/showart_507112.html 在嵌入式Linux中,串口是一个字设备,访问具体的串行端口的编程与读/写文件的操作类似,只需打开相应的设备文件即可操作。串口编程特殊在于串口通信时相关参数与属性的设置。嵌入式Linux的串口编程时应注意,若在根文件中没有串口设备文件,应使用mknod命令创建,这这里假设串口设备是/dev/ttyS0,介绍一下串口的编程过程。 #mknod /dev/ttyS0 c 4 64 1、打开串口 ??? ?? 打开串口设备文件的操作与普通文件的操作类似,都采用标准的I/O操作函数open()。 ?????? fd = open(/dev/ttyS0,O_RDWR|O_NDELAY|O_NOCTTY); ??? open()函数有两个参数,第一个参数是要打开的文件名(此处为串口设备文件/dev/ttyS0);第二个参数设置打开的方式,O_RDWR表示打开的文件可读/写,O_NDELAY表示以非阻塞方式打开,O_NOCTTY表示若打开的文件为终端设备,则不会将终端作为进程控制终端。 2、设置串口属性 ???? 串口通信时的属性设置是串口编程的关键问题,许多串口通信时的错误都与串口的设置相关,所以编程时应特别注意这些设置,最常见的设置包括波特率、奇偶校验和停止位以及流控制等。 ??? 在Linux中,串口被作为终端I/O,它的参数设置需要使用struct termios结构体,这个结构体在termio.h文件中定义,且应在程序中包含这个头文件。 ??? ?? ?? typedef unsigned char?? ?? ?? cc_t ; ??? ?? ?? typedef unsigned int?? ?? ?? ?? speed_t ; ??? ?? ?? typedef unsigned int?? ?? ?? ?? tcflag_t ; ??? ?? ?? struct termios ??? ?? ?? { ??? ?? ?? ?? tcflag_t?? ?? c_iflag ;?? ?? ??? /*输入模式标志*/ ??? ?? ?? ?? tcflag_t?? ?? c_oflag ;?? ?? ?? /*输出模式标志*/ ??? ?? ?? ?? tcflag_t?? ?? c_cflag ;?? ?? ?? ?? /*控制模式标志*/ ??? ?? ?? ?? tcflag_t?? ?? c_lflag ;?? ?? ?? ?? /*本地模式标志*/ ??? ?? ?? ?? tcflag_t?? ?? c_line ;?? ?? ?? ?? /*行规程类型,一般应用程序不使用*/ ??? ?? ?? ?? cc_t?? ?? ?? c_cc[NCC];?? ?? /*控制字符*/ ??? ?? ?? ?? speed_t?? ?? c_ispeed ;?? ?? /*输入数据波特率*/ ??? ?? ?? ?? speed_t?? ?? c_ospeed ;?? ?? /*输出数据波特率*/ ??? ?? }; ??? ?? 串口的设置主要是设置这个结构体的各成员值,然后利用该结构体将参数传给硬件驱动程序。在Linux中,串口以串行终端的方式进行处理,因而,可以使用tcgetattr()/tcsetattr()函数获取/设置串口的参数。 ??? ?? int tcgetattr( int fd, struct termios *termios_p ); ??? ?? int tcsetattr( int fd, int optional_actions , struct termios *termios_p ); ??? ?? 这两个参数都有一个批向termios结构体的指针作为参数,用于返回当前终端的属性或设置该终端的属性。参数fd就是用open()函数打开的终端文件句柄,而串口就是用open()打开的串口设备文件句柄。tcsetattr()函数的optional_action参数用于指定新设定的参数起作用的时间,其设定值可以为: ??? ?? TCSANOW?? ?? ?? 改变立即生效 ??? ?? TCSADRAIN?? ?? 在所有的输出都被传输后改变生效,适用于更改影响输出参数的情况。 ??? ?? TCSAFLUSH ?? 在所有输出都被传输后改变生效,丢弃所有末读入的输入(清空输入缓??? ??? ??? ??? ??? ??? ??? ??? 存)。 (1)设置波特率 ??? ?? 使用cfsetospeed()/cfsetispeed()函数设置波特率,它们分别用于在termios结构体中设置输出和输入的波特率。设置波

文档评论(0)

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

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

1亿VIP精品文档

相关文档