串口终端设备的接口属性如下:

struct termios
{tcflag_t c_cflag;   //控制标志tcflag_t c_iflag;   //输入标志tcflag_t c_oflag;   //输出标志tcflag_t c_lflag;   //本地标志tcflag_t c_cc[NCCS];//控制字符
}

其中定义类型如下:

typedef unsigned int tcflag_t;

需要包含的头文件<termios.h>
下面介绍一下各个标志的选项

控制标志c_cflag:

波特率相关:

标志 说明 标志 说明
CBAUD 波特率位屏蔽 B4800 4800 位/秒
B0 0 位/秒(挂起) B9600 9600 位/秒
B110 100 位/秒 B19200 19200 位/秒
B134 134 位/秒 B57600 57600 位/秒
B1200 1200 位/秒 B115200 115200 位/秒
B2400 2400 位/秒 B460800 460800 位/秒

数据位相关:

标志 说明
CSIZE 数据位屏蔽
CS5 5 位数据位
CS6 6 位数据位
CS7 7 位数据位
CS8 8 位数据位

停止位相关:

标志 说明
CSTOPB 2 位停止位,否则为 1 位

校验位:

标志 说明
PARENB 进行奇偶校验
PARODD 奇校验,否则为偶校验

其他:

标志 说明
CREAD 启动接收
HUPCL 最后关闭时断开
CLOCAL 忽略调制调解器状态行

输入标志c_iflag:

标志 说明 标志 说明
INPCK 打开输入奇偶校验 IXOFF 启用/停止输入控制流起作用
IGNPAR 忽略奇偶错字符 IGNBRK 忽略BREAK条件
PARMRK 标记奇偶错字符 INLCR 讲输入的NL转换为CR
ISTRIP 剥除字符第八位 IGNCR 忽略CR
IXON 启用/停止输出控制流起作用 ICRNL 将输入的CR转换为NL

输出标志c_oflag:

标志 说明
BSDLY 退格延迟屏蔽 OLCUC 将输出的小写字符转换为大写字符
CMSPAR 标志或空奇偶性 ONLCR 将 NL 转换为 CR-NL
CRDLY CR 延迟屏蔽 ONLRET NL 执行 CR 功能
FFDLY 换页延迟屏蔽 ONOCR 在 0 列不输出 CR
OCRNL 将输出的 CR 转换为 NL OPOST 执行输出处理
OFDEL 填充符为 DEL,否则为 NULL OXTABS 将制表符扩充为空格
OFILL 对于延迟使用填充符

本地标志c_lflag:

标志 说明 标志 说明
ISIG 启用终端产生的信号 NOFLSH 在中断或退出键后禁用刷清
ICANON 启用规范输入 IEXTEN 启用扩充的输入字符处理
XCASE 规范大/小写表示 ECHOCTL 回送控制字符为(char)
ECHO 进行回送 ECHOPRT 硬拷贝的可见擦除方式
ECHOE 可见擦除字符 ECHOKE Kill 的可见擦除
ECHOK 回送 kill 符 PENDIN 重新打印未决输入
ECHONL 回送 NL TOSTOP 对于后台输出发送 SIGTTOU

控制字符组:

标志 说明 标志 说明
VINTR 中断 VEOL 行结束
VQUIT 退出 VMIN 需读取的最小字节数
VERASE 擦除 VTIME 与“VMIN”配合使用,是指限定的传输或等待的最长时间
VEOF 行结束

示例代码:

#include <stdio.h>
#include <termios.h>
#include <fcntl.h>#define TRUE 1
#define FALSE (-1)int serialAttr(int baudrate, int databit, char paritybit, int stopbit);int main(void)
{serialAttr(9600, 8, 'N', 1);return 0;
}int serialAttr(int baudrate, int databit, char paritybit, int stopbit)
{int fd;fd = open("/dev/ttyx",O_RDWR | O_NOCTTY); //读写方式打开;不作为控制终端if(fd == -1){return FALSE;}/*更改波特率*/int status;struct termios opt;tcgetattr(fd,&opt);//获取终端参数tcflush(fd,TCIOFLUSH);//刷清输入输出缓存cfsetispeed(&opt,baudrate);//设置输入的波特类cfsetospeed(&opt,baudrate);//设置输出的波特类/*数据位、停止位、校验位*/opt.c_cflag |= (CLOCAL | CREAD);opt.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);//原始模式,输入数据不经处理opt.c_oflag &= ~OPOST; //原始输出opt.c_iflag &= ~(BRKINT | ICRNL | ISTRIP | IXON);opt.c_cflag &= ~CSIZE; //数据位清零switch (databit)  //数据位{    case 7:opt.c_cflag |= CS7;break;case 8:opt.c_cflag |= CS8;break;default:fprintf(stderr,"Unsupported data size\n");return (FALSE);}switch (paritybit) //校验位{case 'n': case 'N':opt.c_cflag &= ~PARENB;   // 不校验opt.c_iflag &= ~INPCK;     //关闭输入奇偶校验opt.c_iflag &= ~(ICRNL|IGNCR);opt.c_lflag &= ~(ICANON ); //不规范输入break;case 'o': //奇校验case 'O':opt.c_cflag |= PARENB; //进行奇偶校验opt.c_cflag |= PARODD; //奇校验,否则为偶校验opt.c_iflag |= INPCK;  //打开输入奇偶校验break;case 'e': //偶校验case 'E':opt.c_cflag |= PARENB;     // 进行奇偶校验opt.c_cflag &= ~PARODD;    //偶校验opt.c_iflag |= INPCK;     //打开输入奇偶校验break;case 'S': case 's':  /*as no parity*/opt.c_cflag &= ~PARENB; //不进行奇偶校验opt.c_cflag &= ~CSTOPB; //1 位停止位break;default:fprintf(stderr,"Unsupported parity bit\n");return (FALSE);}switch (stopbit)  //停止位{case 1:opt.c_cflag &= ~CSTOPB;break; //1 位停止位case 2:opt.c_cflag |= CSTOPB;break; //2 位停止位,否则为 1 位default:fprintf(stderr,"Unsupported stop bit\n");return (FALSE);}opt.c_cc[VTIME] = 150; // 等待数据到达的分秒数(秒的 1/10 为分秒)opt.c_cc[VMIN] = 0; // read 调用期望返回的最小字节数tcflush(fd,TCIFLUSH); // 刷清输入缓存区if (tcsetattr(fd,TCSANOW,&opt) != 0) //TCSANOW:不等数据传输完毕就立即改变属性。{perror("Setup serial port fail\n");return FALSE;}else{return TRUE;}
}

串口设置(波特率、数据位、校验位、停止位)相关推荐

  1. vb串口 任意波特率_学习串口参数详解:波特率,数据位,停止位,奇偶校验位...

    串口常用参数,串口是一种非常通用的设备通信的协议(不要与通用串行总线Universal Serial Bus(USB)混淆). 中文名:串口常用参数 属    性:通用设备通信的协议 相    关:通 ...

  2. 串口参数详解:波特率,数据位,停止位,奇偶校验位

    转载自:https://blog.csdn.net/sinat_35705952/article/details/89034455 串口参数详解:波特率,数据位,停止位,奇偶校验位 Winter_Q ...

  3. UART(一)——起始位,停止位,奇偶校验位,数据位等概念

    1. 概念 通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART. 它将要传输的资料在串行通信与并行通信之间加以转换.作为把并 ...

  4. 串口设置波特率linux函数接口,Linux下串口编程之一:基础设置函数

    1,串口操作需要的头文件 #include /* 标准输入输出定义 */ #include /* 标准函数库定义 */ #include /* Unix 标准函数定义 */ #include #inc ...

  5. uart中:起始位,停止位,就校验位,数据位,数据位的位数,波特率,数据通讯的接口定义

    UART简介  通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART.UART通信在工作中相当常见,项目中需要生成uart信号 ...

  6. 协议的起始位,停止位

    关于协议,有起始位,数据位,校验位,停止位等等. 目前,我找到的资料或者网友的结论中都是:起始位默认为0,停止位默认为1.无论是串口通信,还是MODBUS协议等等. 目前调试SMARTGAS传感器中, ...

  7. 老白求助:WZ-H3甲醛传感器,计划配置到STM32F103ZET的PA2,PA3上,WZ-H3通讯配置:波特率9600,数据位8位,停止位1,校验位无;请大神指点,谢谢!

    通讯配置 读气体浓度格式 返回值格式 这里写自定义目录标题 欢迎使用Markdown编辑器 新的改变 功能快捷键 合理的创建标题,有助于目录的生成 如何改变文本的样式 插入链接与图片 如何插入一段漂亮 ...

  8. 串口通信波特率数据错乱

    如图,串口助手有两种模式,分别是hex模式和文本模式,但是我在测试发送数据时,16进制遇见了奇怪的现象. switch(tempbuf){case 0: P2_0=0;//unsigned char ...

  9. QT入门第十四天 串口通信协议+收发数据+波特率+数据位+停止位+奇偶校验+串口识别射频RFID的卡号

    QT入门第十四天 串口通信[QT入门第十四天 串口通信协议+收发数据+波特率+数据位+停止位+奇偶校验+串口识别射频RFID的卡号 第一章 常见的硬件通信接口协议 [1]硬件通信接口协议 [2]使用串 ...

最新文章

  1. Linux 线程学习之条件变量
  2. [转]docker入门(利用docker部署web应用)
  3. java多条件组合查询6_elasticsearch组合多条件查询实现restful api以及java代码实现
  4. createprocess失败代码2_pytest文档57单元测试代码覆盖率(pytestcov)
  5. 【改进】C# WinForm捕获全局异常 SamWang
  6. 【git系列】合并分支进master
  7. 深入浅出 Cocoa 之 Core Data(3)- 使用绑定
  8. 音视频转换器哪个好?嗨格式视频转换器来了
  9. jvm虚拟机及创建对象流程
  10. 【Shiro权限管理】22.Shiro之记住我
  11. golang后台管理系统Iris+Layui框架搭建教程
  12. 【归档】设U是V的子空间,求U + U
  13. Apollo学习(二)appollo安装与部署
  14. BTG遭遇51%攻击,幕后黑手竟是他!
  15. 创新工程-涂鸦移动面试总结
  16. 地推招生是我做过最苦的工作
  17. 高德地图搜索以后生成的marker的点击事件
  18. 为hexo添加hexo-admin组件
  19. 精细化研发提高冲压模具设计与制造的生产力
  20. 少有人走的路1推迟满足感

热门文章

  1. Python 二进制,十进制,十六进制转换
  2. Unity中采用JSON进行存档和读档
  3. 如何用python打开mat文件
  4. EXCEL截取单元格内部分字符串、根据前一列某些字符替换本列的某几个字符的操作
  5. Mysql数据库优点及特点
  6. 关于检测数字人脸操纵
  7. QT中main函数中加载外部字体:OTF
  8. matlab解方程最值点,MATLAB解方程与函数极值
  9. PGRelief使用指南2014(windows版)
  10. RS232电平TTL电平COMS电平