串口设置(波特率、数据位、校验位、停止位)
串口终端设备的接口属性如下:
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;}
}
串口设置(波特率、数据位、校验位、停止位)相关推荐
- vb串口 任意波特率_学习串口参数详解:波特率,数据位,停止位,奇偶校验位...
串口常用参数,串口是一种非常通用的设备通信的协议(不要与通用串行总线Universal Serial Bus(USB)混淆). 中文名:串口常用参数 属 性:通用设备通信的协议 相 关:通 ...
- 串口参数详解:波特率,数据位,停止位,奇偶校验位
转载自:https://blog.csdn.net/sinat_35705952/article/details/89034455 串口参数详解:波特率,数据位,停止位,奇偶校验位 Winter_Q ...
- UART(一)——起始位,停止位,奇偶校验位,数据位等概念
1. 概念 通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART. 它将要传输的资料在串行通信与并行通信之间加以转换.作为把并 ...
- 串口设置波特率linux函数接口,Linux下串口编程之一:基础设置函数
1,串口操作需要的头文件 #include /* 标准输入输出定义 */ #include /* 标准函数库定义 */ #include /* Unix 标准函数定义 */ #include #inc ...
- uart中:起始位,停止位,就校验位,数据位,数据位的位数,波特率,数据通讯的接口定义
UART简介 通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART.UART通信在工作中相当常见,项目中需要生成uart信号 ...
- 协议的起始位,停止位
关于协议,有起始位,数据位,校验位,停止位等等. 目前,我找到的资料或者网友的结论中都是:起始位默认为0,停止位默认为1.无论是串口通信,还是MODBUS协议等等. 目前调试SMARTGAS传感器中, ...
- 老白求助:WZ-H3甲醛传感器,计划配置到STM32F103ZET的PA2,PA3上,WZ-H3通讯配置:波特率9600,数据位8位,停止位1,校验位无;请大神指点,谢谢!
通讯配置 读气体浓度格式 返回值格式 这里写自定义目录标题 欢迎使用Markdown编辑器 新的改变 功能快捷键 合理的创建标题,有助于目录的生成 如何改变文本的样式 插入链接与图片 如何插入一段漂亮 ...
- 串口通信波特率数据错乱
如图,串口助手有两种模式,分别是hex模式和文本模式,但是我在测试发送数据时,16进制遇见了奇怪的现象. switch(tempbuf){case 0: P2_0=0;//unsigned char ...
- QT入门第十四天 串口通信协议+收发数据+波特率+数据位+停止位+奇偶校验+串口识别射频RFID的卡号
QT入门第十四天 串口通信[QT入门第十四天 串口通信协议+收发数据+波特率+数据位+停止位+奇偶校验+串口识别射频RFID的卡号 第一章 常见的硬件通信接口协议 [1]硬件通信接口协议 [2]使用串 ...
最新文章
- Linux 线程学习之条件变量
- [转]docker入门(利用docker部署web应用)
- java多条件组合查询6_elasticsearch组合多条件查询实现restful api以及java代码实现
- createprocess失败代码2_pytest文档57单元测试代码覆盖率(pytestcov)
- 【改进】C# WinForm捕获全局异常 SamWang
- 【git系列】合并分支进master
- 深入浅出 Cocoa 之 Core Data(3)- 使用绑定
- 音视频转换器哪个好?嗨格式视频转换器来了
- jvm虚拟机及创建对象流程
- 【Shiro权限管理】22.Shiro之记住我
- golang后台管理系统Iris+Layui框架搭建教程
- 【归档】设U是V的子空间,求U + U
- Apollo学习(二)appollo安装与部署
- BTG遭遇51%攻击,幕后黑手竟是他!
- 创新工程-涂鸦移动面试总结
- 地推招生是我做过最苦的工作
- 高德地图搜索以后生成的marker的点击事件
- 为hexo添加hexo-admin组件
- 精细化研发提高冲压模具设计与制造的生产力
- 少有人走的路1推迟满足感