最近搞了一个热成像模组,收发数据用来检测体温,找了一下串口收发数据的应用
方法一:
利用VS2019写的C++代码,尝试成功,记录下来,以备不时之需。
代码如下:
1、cap_tem.h文件
#ifndef _WZSERIALPORT_H
#define _WZSERIALPORT_H
#include<iostream>
#include <string>
#include <vector>
using namespace std;
class WZSerialPort
{
public:
WZSerialPort();
~WZSerialPort();
// 打开串口,成功返回true,失败返回false
// portname(串口名): 在Windows下是"COM1""COM2"等,在Linux下是"/dev/ttyS1"等
// baudrate(波特率): 9600、19200、38400、43000、56000、57600、115200
// parity(校验位): 0为无校验,1为奇校验,2为偶校验,3为标记校验
// databit(数据位): 4-8,通常为8位
// stopbit(停止位): 1为1位停止位,2为2位停止位,3为1.5位停止位
// synchronizable(同步、异步): 0为异步,1为同步
//在这里已经对配置进行了初始化,你们可以自己改配置使用
bool open(const char* portname, int baudrate = 115200, char parity = 0, char databit = 8, char stopbit = 1, char synchronizeflag = 1);
//关闭串口,参数待定
void close();
//发送数据或写数据,成功返回发送数据长度,失败返回0
int send(string dat);
//接受数据或读数据,成功返回读取实际数据的长度,失败返回0
string receive();
vector<unsigned char> revcmsg;
private:
int pHandle[16];
char synchronizeflag;
};
#endif
2、cap_tem.cpp
#include "cap_tem.h"
#include <stdio.h>
#include <string.h>
#include <WinSock2.h>
#include <windows.h>
WZSerialPort::WZSerialPort()
{
}
WZSerialPort::~WZSerialPort()
{
}
bool WZSerialPort::open(const char* portname,
int baudrate,
char parity,
char databit,
char stopbit,
char synchronizeflag)
{
this->synchronizeflag = synchronizeflag;
HANDLE hCom = NULL;
if (this->synchronizeflag)
{
//同步方式
hCom = CreateFileA(portname, //串口名
GENERIC_READ | GENERIC_WRITE, //支持读写
0, //独占方式,串口不支持共享
NULL,//安全属性指针,默认值为NULL
OPEN_EXISTING, //打开现有的串口文件
0, //0:同步方式,FILE_FLAG_OVERLAPPED:异步方式
NULL);//用于复制文件句柄,