Linux下,串口编程的参数配置

Linux 系统下,诸如串口、触摸屏、GPIO、ADC 等等各种设备的操作,都是
通过访问其对应的设备节点进行控制。相应地,串口通过访问 /dev/ttyS0、
/dev/ttyS1、/dev/ttyS2... 对其进行配置与控制。
串口配置的参数包括:波特率,数据位,校验位,停止位与流控。
串口的配置主要是通过配置 struct termios 结构体,其原型如下:
#include<termios.h>
struct termio
{
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 为需要设置的串口传输速
率,取值与波特率对应关系见表:
宏定义 波特率(单位:bit/s) 
B0 0 
B50 50 
B75 75 
B110 110 
B134 134 
B150 150 
B200 200 
B300 300 
B600 600 
B1200 1200
B1800 1800   
B2400 2400   
B4800 4800   
B9600 9600    
B19200 19200  
B38400 38400  
B57600 57600  
B115200 115200
B230400 230400
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;
termios_p.c_iflag |= INPCK;
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;

你可能感兴趣的:(Linux下,串口编程的参数配置)