封装了一下Linux下的串口操作

头文件:

#ifndef UART_H
#define UART_H#include <string>
#include <termios.h>using std::string;class uart {public:uart();int openUart(const char *  path);int setUart(int speed);int writeData(const void * data, int len);int readData(void * buf, int len, int sec, int msec);int closeUart();virtual ~uart();private:string path;int fd;struct termios  myios;
};#endif /* UART_H */

源文件:

#include "uart.h"
#include <fcntl.h>
#include <sys/select.h>
#include <string.h>
#include <unistd.h>
#include <iostream>uart::uart() {
}uart::~uart() {
}int uart::openUart(const char * path) {fd = open(path, O_RDWR);if (fd == -1) {std::cout<<"open uart fail."<<std::endl;return -1;}return 0;
}int uart::setUart(int _speed) {/*配置串口参数*/speed_t speed;memset(&myios, 0, sizeof (myios));//设置串口工作在本地模式myios.c_cflag |= CLOCAL | CREAD;cfmakeraw(&myios);//波特率switch (_speed) {case 9600:speed = B9600;break;case 19200:speed = B19200;break;case 115200:speed = B115200;break;default:return -1;}cfsetispeed(&myios, speed);cfsetospeed(&myios, speed);//8位数据位myios.c_cflag &= ~CSIZE; /* 用数据位掩码清空数据位设置 */myios.c_cflag |= CS8;//无奇偶校验myios.c_cflag &= ~PARENB;//一个停止位myios.c_cflag &= ~CSTOPB; //一个停止位//设置最小等待时间和最少字符数量myios.c_cc[VTIME] = 0;myios.c_cc[VMIN] = 1;//刷新串口tcflush(fd, TCIOFLUSH);//配置生效tcsetattr(fd, TCSANOW, &myios);return 0;
}int uart::writeData(const void * data, int len) {int value, ret;unsigned char temp[7];//清空串口数据缓存do {value = readData(temp, 7, 0, 0);} while (value);ret = write(fd, data, len);return ret;
}int uart::readData(void * buf, int len, int sec, int msec) {int ret= -1;fd_set read_set;struct timeval tv;FD_ZERO(&read_set);FD_SET(fd, &read_set);tv.tv_sec = sec;tv.tv_usec = msec * 1000;ret = select(fd + 1, &read_set, 0, 0, &tv);switch (ret) {case 0:break;case -1:break;default:if (FD_ISSET(fd, &read_set)) {ret = read(fd, buf, len);}break;}return ret;
}int uart::closeUart() {return close(fd);
}

Linux 串口编程(c++)相关推荐

  1. Linux串口编程_termios

    1.1 Linux串口编程主要是设置structtermios结构体的个成员值.Termios是在POSIX规范中定义的标准接口,表示终端设备(包括虚拟终端丶串口等),串口是一种终端设备,一般通过终端 ...

  2. Linux串口编程详解

    Linux串口编程详解(阻塞模式.非阻塞模式.select函数) 之前一直觉得串口编程很简单,这两天仔细研究后发现串口里的各种参数还挺复杂,稍不注意就容易出错,这里总结一下网上的各种文章及自己的理解与 ...

  3. Linux 串口编程四 串口设备程序开发

    Linux 串口编程和程序相对来说是很简单的,之所以用博客连载来展示,主要是想在学会使用的基础上掌握相关背景,原理以及注意事项.相信在遇到问题的时候,我们就不会对于技术的概念和 API 的使用浅尝辄止 ...

  4. Linux 串口编程三 使用termios与API进行串口程序开发

    在 termios 结构体以及内部终端控制标志中,并非所有的参数对于实际的物理串口都是有效的,在使用过程中也不需要对于所有标志的作用都有所理解.事实上,快速掌握一项技术的核心点也是一种学习能力.对于使 ...

  5. Linux 串口编程二 深入了解 termios

    前言 这一系列串口编程重点在应用层编程,但是在讲解原理与相关概念时需要对驱动框架有个基础的认识.如果只是浅尝辄止,以后在遇到串口驱动与应用层程序调试难免遇到瓶颈.关于 tty驱动架构参见我的其他博客: ...

  6. Linux 串口编程一 一些背景

    在大部分讲解 Linux 编程书籍的时候会发现没有单独的串口编程章节,实际上串口编程已经被概括在了"终端"或者"终端IO"章节里面.在上一篇博客中对经常出现的几 ...

  7. Linux串口编程 —— 发送的数据无法被接收,且被原封不动返回

    Linux串口编程--发送的数据无法被接收,且被原封不动返回 问题描述 使用 #include <fcntl.h> /*文件控制定义*/ #include <termios.h> ...

  8. linux串口编程-termios结构

    linux串口编程简单起来可以十分简单,但是复杂起来,也可以异常复杂.因为linux串口不仅仅是个串口,它跟终端联系起来.一般串口编程,绕不开的是struct termios结构体,其定义如下: #d ...

  9. 嵌入式Linux 串口编程系列2--termios的VMIN和VTIME深入理解

    在上一篇文章中,我们介绍了串口的一些基本知识.串口配置接口 termios结构体的概念,串口的配置参数有n多个,这里面不用都背下来,什么时候使用,翻看手册即可,但是有两个 参数是一定要理解的,就是VM ...

  10. 嵌入式Linux 串口编程系列3——通过VTIM、VMIN、select实现串口不定长数据接收功能

    上一篇文章中,我们详细分析了VTIM和VMIN的功能, <嵌入式Linux 串口编程系列2--termios的VMIN和VTIME深入理解> 也明白了这两个参数设计的初衷和使用方法,接下来 ...

最新文章

  1. 关于职业目标规划的一点讨论
  2. 基于Android的浮动组件,可以用于应用中的新功能展示等等。
  3. 流式计算框架Storm网站访问来源实时统计及存储到redis代码示例
  4. Ubuntu无法正常输入英文单引号符号 + 误删除package导致系统设置异常(解决方案)...
  5. 高亮显示 html_友达10.1寸超低温高亮工业液晶屏G101STN01.C
  6. spring学习(39):注入map类型
  7. 51nod--1212 最小生成树
  8. 全局光照---光线跟踪方法
  9. 操作系统---页面置换算法
  10. 剑指offer面试题17. 打印从1到最大的n位数
  11. libtorch下载
  12. 【Java面试题】40 你所知道的集合类都有哪些?主要方法?
  13. linux设置自动关机命令,Linux中Shutdown命令实现定时自动关机
  14. 单片机c语言串口中断函数,12手把手教你学单片机的C语言程序设计_中断服务函数.pdf...
  15. qpython3下载不了_qpython3手机版
  16. 3 非齐次线性微分方程与无量纲化
  17. 做软件销售在中国有前途吗?
  18. 轻量级的双向绑定工具 —— ukulelejs
  19. apktool解包和打包apk
  20. matlab2012a到期重新激活

热门文章

  1. 数据结构之线性表——(二、链式存储结构)[c语言]
  2. 高效会议---海滩球模型会议法
  3. hive优化处理大量小文件
  4. 用python写一个对会议室座位进行抽奖,并显示座位图,中奖座位变色显示,人工按开始,再按停的的程序...
  5. ingress 400 Bad Request The plain HTTP request was sent to HTTPS port
  6. ubuntu/Linux的i386平台和amd64平台区别?
  7. PlayBlock,可能是引爆下一代区块链游戏的开端
  8. tp5点击事件显示弹窗
  9. iOS开发——开发者官网注册新设备
  10. python自动化爬取淘宝商品数据导出execl表格