linux串口编程

linux串口编程有一个非常重要的结构体,主要用来设置串口的一些参数。

struct termios
{

unsigned short c_iflag; /* 输入模式标志*/
unsigned short c_oflag; /* 输出模式标志*/
unsigned short c_cflag; /* 控制模式标志*/
unsigned short c_lflag; /*区域模式标志或本地模式标志或局部模式*/
unsigned char c_line; /*行控制line discipline */
unsigned char c_cc[NCC]; /* 控制字符特性*/
};

    其中最重要的是c_cflag,它主要用来我们在串口中常用参数的配置,比如波特率,数据位数,停止位,奇偶校验位等等。

主要包含有:

CBAUD :(不属于 POSIX) 波特率掩码 (4+1 位)。  
CBAUDEX :(不属于 POSIX) 扩展的波特率掩码 (1 位),包含在 CBAUD 中。  
(POSIX 规定波特率存储在 termios 结构中,并未精确指定它的位置,而是提供了函数 cfgetispeed() 和 cfsetispeed() 来存取它。一些系统使用 c_cflag 中 CBAUD 选择的位,其他系统使用单独的变量,例如 sg_ispeed 和 sg_ospeed 。)  
CSIZE:字符长度掩码(传送或接收字元时用的位数)。取值为 CS5(传送或接收字元时用5bits), CS6, CS7, 或 CS8。  
CSTOPB :设置两个停止位,而不是一个。  
CREAD :打开接受者。  
PARENB :允许输出产生奇偶信息以及输入的奇偶校验(启用同位产生与侦测)。  
PARODD :输入和输出是奇校验(使用奇同位而非偶同位)。  
HUPCL :在最后一个进程关闭设备后,降低 modem 控制线 (挂断)。(?)  
CLOCAL :忽略 modem 控制线。  
LOBLK :(不属于 POSIX) 从非当前 shell 层阻塞输出(用于 shl )。(?)  
CIBAUD :(不属于 POSIX) 输入速度的掩码。CIBAUD 各位的值与 CBAUD 各位相同,左移了 IBSHIFT 位。  
CRTSCTS :(不属于 POSIX) 启用 RTS/CTS (硬件) 流控制。


一切理论终归于实践,接下来就写个简单的实例。

一、首先是一些头文件的包含和全局变量的定义:

linux串口编程_第1张图片

二、打开串口的设备驱动文件并初始化,跟普通文件的打开方法一样,用open函数。linux串口编程_第2张图片

linux串口编程_第3张图片


三、串口的发送函数,使用write函数。

linux串口编程_第4张图片


四、串口的接收函数,用read函数并且使用了select方法进行监听。linux串口编程_第5张图片


五、主函数

linux串口编程_第6张图片


         这里主要就是做个简单的介绍,大家如果想了解更多关于linux串口的知识,可以上网查阅资料,但是对于简单的问题,以上程序以足够用。

你可能感兴趣的:(linux相关)