首页 > 系统 > Linux > 正文

浅谈linux下的串口通讯开发

2019-11-02 16:47:23
字体:
来源:转载
供稿:网友

串行口是计算机一种常用的接口,具有连接线少,通讯简单,得到广泛的使用。常用的串口是RS-232-C接口(又称EIA RS-232-C)它是在1970年由美国电子工业协会(EIA)联合贝尔系统、调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标准。串口通讯指的是计算机依次以位(bit)为单位来传送数据,串行通讯使用的范围很广,在嵌入式系统开发过程中串口通讯也经常用到通讯方式之一。

Linux对所有设备的访问是通过设备文件来进行的,串口也是这样,为了访问串口,只需打开其设备文件即可操作串口设备。在linux系统下面,每一个串口设备都有设备文件与其关联,设备文件位于系统的/dev目录下面。如linux下的/ttyS0,/ttyS1分别表示的是串口1和串口2。下面来详细介绍linux下是如何使用串口的:

1. 串口操作需要用到的头文件

#include /*标准输入输出定义*/

#include /*标准函数库定义*/

#include /*Unix 标准函数定义*/

#include

#include

#include /*文件控制定义*/

#include /*POSIX 终端控制定义*/

#include /*错误号定义*/

#include /*字符串功能函数*/

2. 串口通讯波特率设置

波特率的设置定义在,其包含在头文件里。

常用的波特率常数如下:

B0-------à0 B1800-------à1800

B50-----à50 B2400------à2400

B75-----à75 B4800------à4800

B110----à110 B9600------à9600

B134----à134.5 B19200-----à19200

B200----à200 B38400------à38400

B300----à300 B57600------à57600

B600----à600 B76800------à76800

B1200---à1200 B115200-----à115200

假定程序中想要设置通讯的波特率,使用cfsetispeed( )和cfsetospeed( )函数来操作,获取波特率信息是通过cfgetispeed()和cfgetospeed()函数来完成的。比如可以这样来指定串口通讯的波特率:

#include //头文件定义.......................struct termios opt; /*定义指向termios 结构类型的指针opt*//***************以下设置通讯波特率****************/cfsetispeed(&opt,B9600 ); /*指定输入波特率,9600bps*/cfsetospeed(&opt,B9600);/*指定输出波特率,9600bps*//************************************************/...................

一般来说,输入、输出的波特率应该是一致的。

3. 串口属性配置

在程序中,很容易配置串口的属性,这些属性定义在结构体struct termios中。为在程序中使用该结构体,需要包含文件,该头文件定义了结构体struct termios。

该结构体定义如下:

#define NCCS 19struct termios {tcflag_t c_iflag; /* 输入参数 */tcflag_t c_oflag; /* 输出参数 */tcflag_t c_cflag; /* 控制参数*/tcflag_t c_ispeed; /* 输入波特率 */tcflag_t c_ospeed; /* 输出波特率 */cc_t c_line; /* 线控制 */cc_t c_cc[NCCS]; /* 控制字符*/};

其中成员c_line在POSIX(Portable Operating System Interface for UNIX)系统中不使用。对于支持POSIX终端接口的系统中,对于端口属性的设置和获取要用到两个重要的函数是:

(1).int tcsetattr(int fd,int opt_DE,*ptr)

该函数用来设置终端控制属性,其参数说明如下:

l fd:待操作的文件描述符

l opt_DE:选项值,有三个选项以供选择:

TCSANOW: 不等数据传输完毕就立即改变属性

TCSADRAIN:等待所有数据传输结束才改变属性

TCSAFLUSH:清空输入输出缓冲区才改变属性

l *ptr:指向termios结构的指针

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表