Linux下串口通信

2019-04-15 22:28

Linux下串口编程

Linux 系统下,诸如串口、触摸屏、GPIO、ADC 等等各种设备的操作,都是通过访问其对应的设备节点进行控制。相应地,串口通过访问/dev/ttyS0、/dev/ttyS1、/dev/ttyS2...对其进行配置与控制。

串口配置的参数包括:波特率,数据位,校验位,停止位与流控。 串口的配置主要是通过配置struct termios结构体,其原型如下: #include 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:参数optional_actions使用了非法值,或参数termios中使用了非法值。

ENCTTY:非终端的文件描述符。

3)tcflush()函数用于刷清(扔掉)输入缓存(终端驱动法度已接管到,但用户法度尚未读)或输出缓存(用户法度已经写,但尚未发送).

int tcflush(intfd,intquene) 参数fd为打开的终端文件描述符; quene数该当是下列三个常数之一: *TCIFLUSH 刷清输入队列 *TCOFLUSH 刷清输出队列

*TCIOFLUSH 同时刷清收到的数据但是不读,并且刷清写入的数据但是不传送。


Linux下串口通信.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:园林施工组织方案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: