设置串口属性通常有以下几个步骤:
1. 包含头文件:
#include <stdio.h> /*标准输入输出定义*/
#include <stdlib.h> /*标准函数库定义*/
#include <unistd.h> /*Unix 标准函数定义*/
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h> /*文件控制定义*/
#include <termios.h> /*POSIX 终端控制定义*/
#include <errno.h> /*错误号定义*/
#include <string.h> /*字符串功能函数*/
2. termios 结构体
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]; /* 控制字符*/
};
3. 设置波特率
struct termios opt;
tcgetattr(fd, &Opt);//设置前先获取属性
tcflush(fd, TCIOFLUSH);
cfsetispeed(&stOpt, DEVICE);//cfgetispeed 获取波特率
cfsetospeed(&stOpt, DEVICE);//cfgetospeed
tcsetattr(fd,TCSANOW,&options);//设置属性
4. 配置串口属性(包括:数据位、校验位、停止位等)
struct termios options;
tcgetattr(iCom, & options);//设置前先获取
tcflush(fd,TCIFLUSH);//清空缓存数据
tcsetattr(fd,TCSANOW,&options);//设置属性
校验位:
奇校验:options.c_cflag |= (PARODD | PARENB);//
options.c_iflag |= INPCK;//
偶校验:options.c_cflag |= PARENB;
options.c_cflag &= ~PARODD;
options.c_iflag |= INPCK;
无校验:options.c_cflag &= ~PARENB;