Linux下串口编制【转】 (2)

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

#include <stdio.h>    //头文件定义

........

........

.......

struct termios opt;           /*定义指向termios 结构类型的指针opt*/

 

/***************以下设置通讯波特率****************/

cfsetispeed(&opt,B9600 ); /*指定输入波特率,9600bps*/

cfsetospeed(&opt,B9600);/*指定输出波特率,9600bps*/

/************************************************/

.........

..........

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

3.      串口属性配置

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

#define NCCS 19

struct 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结构的指针

函数返回值:成功返回0,失败返回-1。

2).int tcgetattr(int fd,*ptr)

该函数用来获取终端控制属性,它把串口的默认设置赋给了termios数据数据结构,其参数说明如下:

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

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

函数返回值:成功返回0,失败返回-1。

4.      打开串口

在前面已经提到linux下的串口访问是以设备文件形式进行的,所以打开串口也即是打开文件的操作。函数原型可以如下所示:

int open(“DE_name”,int open_Status)

参数说明:

1).DE_name:要打开的设备文件名

比如要打开串口1,即为/dev/ttyS0。

2).open_Status:文件打开方式,可采用下面的文件打开模式:

l          O_RDONLY:以只读方式打开文件

l          O_WRONLY:以只写方式打开文件

l          O_RDWR:以读写方式打开文件

l          O_APPEND:写入数据时添加到文件末尾

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzzyjz.html