浅谈linux下的串口通讯开发

2019-10-13 11:20:14王冬梅

其中成员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:写入数据时添加到文件末尾

l O_CREATE:如果文件不存在则产生该文件,使用该标志需要设置访问权限位mode_t

l O_EXCL:指定该标志,并且指定了O_CREATE标志,如果打开的文件存在则会产生一个错误

l O_TRUNC:如果文件存在并且成功以写或者只写方式打开,则清除文件所有内容,使得文件长度变为0

l O_NOCTTY:如果打开的是一个终端设备,这个程序不会成为对应这个端口的控制终端,如果没有该标志,任何一个输入,例如键盘中止信号等,都将影响进程。

l O_NONBLOCK:该标志与早期使用的O_NDELAY标志作用差不多。程序不关心DCD信号线的状态,如果指定该标志,进程将一直在休眠状态,直到DCD信号线为0。

函数返回值:

成功返回文件描述符,如果失败返回-1

例如假定以可读写方式打开/dev/ttyS0设备,就可以这样操作:

#include //头文件包含

......

......

int fd; /* 文件描述符 */

fd = open("/dev/ttyS0", O_RDWR | 0_NOCTTY); /*以读写方式打开设备*/

if(fd == -1)

perror("Can not open Serial_Port 1/n!");/*打开失败时的错误提示*/

........

........

5. 串口读操作(接收端)