头文件

#ifndef SERIALCOM_H
#define SERIALCOM_H
#include <sys/select.h>#include <stdio.h>
class SerialCom
{
public:SerialCom();~SerialCom();int openCom(char *pcom,int baud);int sent_to(char *pstr,int len);int recv_from(char *precvBuf);void closeCom();int set_opt(int fd,int nSpeed, int nBits, char nEvent, int nStop);
private:int comHandle;fd_set m_stRfds;
};#endif // SERIALCOM_H

源文件

#include "serialcom.h"#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>
#include <termios.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>SerialCom::SerialCom()
{comHandle = 0;
}
SerialCom::~SerialCom()
{if(comHandle)closeCom();comHandle = 0;
}int SerialCom::set_opt(int fd,int nSpeed, int nBits, char nEvent, int nStop)
{struct termios newtio,oldtio;if  ( tcgetattr( fd,&oldtio)  !=  0) { perror("SetupSerial 1");g_MainCoreLog->LogError("[%s][%s]()-[%d]SetupSerial  ", __FILE__, __FUNCTION__, __LINE__);return -1;}bzero( &newtio, sizeof( newtio ) );newtio.c_cflag  |=  CLOCAL | CREAD;newtio.c_cflag &= ~CSIZE;switch( nBits ){case 7:newtio.c_cflag |= CS7;break;case 8:newtio.c_cflag |= CS8;break;}switch( nEvent ){case 'O':newtio.c_cflag |= PARENB;newtio.c_cflag |= PARODD;newtio.c_iflag |= (INPCK );break;case 'E': newtio.c_iflag |= (INPCK);newtio.c_cflag |= PARENB;newtio.c_cflag &= ~PARODD;break;case 'N':  newtio.c_cflag &= ~PARENB;break;}switch( nSpeed ){case 2400:cfsetispeed(&newtio, B2400);cfsetospeed(&newtio, B2400);break;case 4800:cfsetispeed(&newtio, B4800);cfsetospeed(&newtio, B4800);break;case 9600:cfsetispeed(&newtio, B9600);cfsetospeed(&newtio, B9600);break;case 115200:cfsetispeed(&newtio, B115200);cfsetospeed(&newtio, B115200);break;case 460800:cfsetispeed(&newtio, B460800);cfsetospeed(&newtio, B460800);break;default:cfsetispeed(&newtio, B9600);cfsetospeed(&newtio, B9600);break;}if( nStop == 1 ){newtio.c_cflag &=  ~CSTOPB;}else if ( nStop == 2 ){newtio.c_cflag |=  CSTOPB;}    newtio.c_cc[VTIME]  = 1;///* 设置超时10 seconds*/newtio.c_cc[VMIN] = 8;tcflush(fd,TCIFLUSH);if((tcsetattr(fd,TCSANOW,&newtio))!=0){perror("com set error");g_MainCoreLog->LogError("[%s][%s]()-[%d]com set error  ", __FILE__, __FUNCTION__, __LINE__);return -1;}return 0;
}
int SerialCom::openCom(char *pcom,int baud)
{struct termios termios;g_MainCoreLog->LogInfo("[%s][%s]()-[%d]openCom  ", __FILE__, __FUNCTION__, __LINE__);bzero(&termios,sizeof(termios));comHandle = open(pcom,O_RDWR|O_NOCTTY); //|O_NOCTTY|O_NONBLOCKif(comHandle < 0){g_MainCoreLog->LogError("[%s][%s]()-[%d]com open failed  ", __FILE__, __FUNCTION__, __LINE__);return -1;}g_MainCoreLog->LogInfo("[%s][%s]()-[%d]opecom open successed,COM %d Baud:%d ", __FILE__, __FUNCTION__, __LINE__,comHandle,baud);set_opt(comHandle, baud, 8, 'N', 1);return 0;
}
int SerialCom::sent_to(char *pstr,int len)
{if(comHandle <= 0)return -1;if (write(comHandle, pstr, len) != len){g_MainCoreLog->LogError("[%s][%s]()-[%d]send cmd failed ", __FILE__, __FUNCTION__, __LINE__);return -1;}return 0;}
int SerialCom::recv_from(char *precvBuf)
{if(comHandle <= 0){printf("failed comHandle <= 0 \r\n");g_MainCoreLog->LogError("[%s][%s]()-[%d]failed comHandle <= 0 ", __FILE__, __FUNCTION__, __LINE__);return -1;}int rlen = 0;//for(int i=0;i<8;i++){// printf("start recv 1 byte \r\n");tcflush(comHandle,TCIFLUSH);int iNum = read(comHandle,(void*)precvBuf,8);// int iNum = read(comHandle,(void*)precvBuf,8);//printf("iNum:%d \r\n",iNum);rlen+=iNum;}return rlen;
}
void SerialCom::closeCom()
{if(comHandle <= 0)return;close(comHandle);
}

C++ RS232串口通信相关推荐

  1. 主板rs232接口测试软件,简洁的RS232串口通信电路与串口通信测试程序

    RS232串口通信电路往往是采用专用的串口传输芯片MAX232(5V)或MAX3232(3.3V),芯片起到驱动.匹配.隔离.保护等作用,这种电路常用于实际系统中的远距离串口通信.多数爱好者搭建串口通 ...

  2. 程控电源CANoe上位机面板(CAN\ETH测试、RS232串口通信、编写设计思路)

    程控电源CANoe上位机面板 编写此面板的目的 编写思路 一.通讯方式 1.RS232串口连接 2.CANoe与RS232串口相关的函数 3.帧格式命令字 4.校验码 二.面板设计 1.所需文件说明 ...

  3. 单片机实验八 RS232串口通信实验(接收与发送)

    实验八 RS232串口通信实验(接收与发送) 一.实验目的 1.熟悉实验软件和硬件,进行正确的接线: 2.通过实验了解串口的基本原理及使用,理解并掌握对串口进行初始化: 3.使用串口调试助手做为上位机 ...

  4. RS232串口通信详解

    RS232串口通信详解http://www.21ic.com/jichuzhishi/datasheet/RS232/jiekou/184659.html 串口是计算机上一种非常通用的设备通信协议. ...

  5. RS232串口通信(UART的接收部分)

    RS232串口通信(UART的接收部分) 置顶 新人博主,创作不易,波形图手绘,请给个点赞关注吧,非常感谢! 串口简介 ​ 串口作为常用的三大低速总线(UART.SPI.IIC)之一,在设计众多通信接 ...

  6. php接收232通讯接口数据,RS232串口通信的传输格式和接收过程

    串口是计算机上一种非常通用设备通信的协议(不要与通用串行总线Universal Serial Bus或者USB混淆).大多数计算机包含两个基于RS232的串口.串口同时也是仪器仪表设备通用的通信协议: ...

  7. pic常用子程序c语言,手把手教你使用PIC单片机做RS232串口通信实验(C语言版)

    这一期,我们将一起来学习一下PIC单片机如何与PC机进行通信,一起来完成一个简单的RS232通信实例,我们不做太多的理论,从实例出发,相信能够给大家一个比较通俗.透彻地认识,掌握了它的原理,那你就可以 ...

  8. 单片机实验(十二)RS232串口通信

    80S52:RS232双工串口通信模块 功能:和PC机通信说骚话 模块介绍 串口通信主要四个要点 SBUF寄存 SBUF主要用来储存从PC接收的信息和准备向PC发送的信息,大小为8位 波特率匹配 要与 ...

  9. RS485/RS232串口通信实现源码

    之前贴出了代码,但是本地源码已经找不到了:本篇补充了一些使用说明 一.参考代码 1.不方便下载的同学可以参考贴出来的源代码链接:RS485 2.工程链接:RS485 二.基本知识 1.RS485通信讲 ...

  10. 【记录】RS-232串口通信个人理解

    RS232串口线运用于设备间的串行通讯,适用面很广泛,是常用的异步传输标准接口. 主要运用:台式机连接各类串口设备,如电脑与税控机.数码机床.PDA,  Modem.机顶盒.条形码机.工业仪表等串口设 ...

最新文章

  1. 前端培训_backbone
  2. 累计占比_全国ETC用户累计突破1亿!广东占比超过1/10
  3. reviewboard搭建
  4. 什么东西都要用一句话总结出来:这是最重要的
  5. 华润燃气各大区总经理_华润燃气助力空港国际新城,全面打造国家级智慧能源临空经济示范区...
  6. mac php 超时,PHP---Mac上开启php错误提示
  7. Linux笔记-centos7配置网卡及iftop的使用
  8. PHP的$_SERVER['HTTP_HOST']获取服务器地址功能详解
  9. 315.计算右侧小于当前元素的个数
  10. vue中动态加载图片路径
  11. CMM与ISO9000
  12. 漫步者头戴式蓝牙耳机一边有声音一边没声音
  13. ADAMS学习视频强力推荐--《Adams/ view从入门到提高》ftc正青春制作
  14. LCD驱动芯片ST7789V
  15. excel中的联系方式导入手机电话簿
  16. oracle的多个exclude,记录一下expdp exclude的用法
  17. 中文编程入门(Lua5.4中文版)第一个 Lua 程序,世界,你好!
  18. session_unset和session_distory
  19. 汪延谈王志东离职问题 (转)
  20. Chart.js绘图,数据图

热门文章

  1. 一篇文章让你瞬间知道Mybatis框架是如何使用的
  2. windows局域网远程访问桌面+资源复制粘贴
  3. 360 电脑重装系统服务器,360系统重装大师
  4. katalon 学习笔记(三)
  5. hprose-java-1.4.0.jar;,Hprose for Java 1.0 正式版发布
  6. C/C++游戏开发:打造炫酷的3D跑酷游戏,小时候玩过的游戏还记得吗?
  7. Matplotlib 库柱形图设置颜色
  8. EndNote:中英文参考文献混排问题
  9. .SCI-HUB搜索引擎(强大无比,只要有网就能下载你要的文献,无需购买数据库)http://sci-hub.tw/
  10. WCDMA的R99版本网络结构