打开串口:
int fd;
fd = open("/dev/ttySAC0", O_RDWR);
if(fd < 0){
//打开失败
}
备份串口配置信息:
用于使用完串口后,将配置信息复原,以便其他使用此串口。
struct termios uart_cfg;
int ret;
ret = tcgetattr(fd, &uart_cfg);
if(ret < 0){
//获得配置信息失败
}
复原串口配置信息:
恢复使用前的串口配置信息。
int ret;
ret = tcsetattr(fd, TCSANOW, &uart_cfg);
if(ret < 0){
//恢复串口配置信息失败
}
配置串口:
struct termios uart_cfg;
int ret;
//先获得配置信息,在获得的配置信息上修改成想要的配置信息
ret = tcgetattr(fd, &uart_cfg);
if(ret < 0){
//获得配置信息失败
}
//设置波特率
tcflush(fd, TCIOFLUSH);
cfsetispeed(&uart_cfg, B9600); //设置为9600
cfsetospeed(&uart_cfg, B9600);
tcflush(fd, TCIOFLUSH);
//数据位
uart_cfg.c_cflag &= ~CSIZE;
uart_cfg.c_cflag |= CS7;
or
uart_cfg.c_cflag |= CS8;
//校验位
无校验
uart_cfg.c_cflag &= ~PARENB;
uart_cfg.c_iflag &= ~INPCK;
uart_cfg.c_oflag &= ~OPOST;
奇校验
uart_cfg.c_cflag |= (PARODD | PARENB);
uart_cfg.c_iflag |= INPCK;
uart_cfg.c_oflag &= ~OPOST;
偶校验
uart_cfg.c_cflag |= PARENB;
uart_cfg.c_cflag &= ~PARODD;
uart_cfg.c_iflag |= INPCK;
uart_cfg.c_oflag &= ~OPOST;
//停止位
1位停止位
uart_cfg.c_cflag &= ~CSTOPB;
2位停止位
uart_cfg.c_cflag |= CSTOPB;
//超时, 回显等设置
uart_cfg.c_lflag &= ~(ECHO | ECHOE | ISIG);
uart_cfg.c_lflag &= ~ICANON;
uart_cfg.c_cc[VTIME] = 1;
uart_cfg.c_cc[VMIN] = 0;
//使之立刻生效
tcflush(fd, TCIOFLUSH);
ret = tcsetattr(fd, TCSANOW, &uart_cfg);
if(ret < 0){
//设置失败
}
关闭串口:
经常在关闭串口前, 将串口配置信息复原到使用前的配置。
ret = close(fd);