如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
linux串口编程HYPERLINK"http://blog.chinaunix.net/u1/52454/showart_507112.html"http://blog.chinaunix.net/u1/52454/showart_507112.html在嵌入式Linux中,串口是一个字设备,访问具体的串行端口的编程与读/写文件的操作类似,只需打开相应的设备文件即可操作。串口编程特殊在于串口通信时相关参数与属性的设置。嵌入式Linux的串口编程时应注意,若在根文件中没有串口设备文件,应使用mknod命令创建,这这里假设串口设备是/dev/ttyS0,介绍一下串口的编程过程。#mknod/dev/ttyS0c4641、打开串口打开串口设备文件的操作与普通文件的操作类似,都采用标准的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,它的参数设置需要使用structtermios结构体,这个结构体在termio.h文件中定义,且应在程序中包含这个头文件。typedefunsignedcharcc_t;typedefunsignedintspeed_t;typedefunsignedinttcflag_t;structtermios{tcflag_tc_iflag;/*输入模式标志*/tcflag_tc_oflag;/*输出模式标志*/tcflag_tc_cflag;/*控制模式标志*/tcflag_tc_lflag;/*本地模式标志*/tcflag_tc_line;/*行规程类型,一般应用程序不使用*/cc_tc_cc[NCC];/*控制字符*/speed_tc_ispeed;/*输入数据波特率*/speed_tc_ospeed;/*输出数据波特率*/};串口的设置主要是设置这个结构体的各成员值,然后利用该结构体将参数传给硬件驱动程序。在Linux中,串口以串行终端的方式进行处理,因而,可以使用tcgetattr()/tcsetattr()函数获取/设置串口的参数。inttcgetattr(intfd,structtermios*termios_p);inttcsetattr(intfd,intoptional_actions,structtermios*termios_p);这两个参数都有一个批向termios结构体的指针作为参数,用于返回当前终端的属性或设置该终端的属性。参数fd就是用open()函数打开的终端文件句柄,而串口就是用open()打开的串口设备文件句柄。tcsetattr()函数的optional_action参数用于指定新设定的参数起作用的时间,其设定值可以为:TCSANOW改变立即生效TCSADRAIN在所有的输出都被传输后改变生效,适用于更改影响输出参数的情况。TCSAFLUSH在所有输出都被传输后改变生效,丢弃所有末读入的输入(清空输入缓存)。(1)设置波特率使用cfsetospeed()/cfsetispeed()函数设置波特率,它们分别用于在termios结构体中设置输出和输入的波特率。设置波特率可以使用波特率常数,其定义为字母“B+速率”,如B19200就是波特率为19200bps,B115200就是波特率为115200bps。intcfsetispeed(structtermios*termios_p,speed_tspeed);//speed为波特率常数intcfsetospeed(structtermios*termios_p,speed_tspeed);例:cfsetispeed(ttys0_opt,B115200);cfsetospeed(ttys0_opt,B115200);(2)设置控制模式标志控制模式标志c_cflag主要用于设置串口对DCD信号状态检测、硬件流控制、字符位宽、停止位和奇偶校验等,常用标志位如下:CLOCAL忽略DCD信号,若不使用MODEM,或没有串口没有CD脚就设置此标志CREAD启用接收装置,可以接收字符CRTSCTS启用硬件流控制,对于许多三线制的串不应使用,需设置~CRTCTSCSIZE字符位数