1、虚拟串口配置,使用虚拟串口助手配置虚拟串口,注:选择一个未被使用的串口进行实验
虚拟串口配置程序下载地址:https://download.csdn.net/download/wangzhiyang925/20395464
模拟串口收发配置程序下载:https://download.csdn.net/download/wangzhiyang925/20395980
COM10发送消息:端口号选择COM10、波特率设置:115200、设置定时发送
再开启一个接收串口,设置端口号:COM11、波特率:115200
以上设置成功后,发送端开始发送,接收端可以正常接收
以下是代码实现数据接收:
#pragma once
#include <stdlib.h>
#include <wtypes.h>
#include <windows.h>
#include <stdio.h>
#include <cstdint>
#include <string>
#include <vector>
using namespace std;
int main() {
/*
//RS485通信,串口接收数据
*/
//查看所有串口信息
vector<string> strCom;
char strTemp[255];
HANDLE hCom;
for (int i = 0; i < 255; i++)
{
//strTemp.Format("\\\\.\\COM%d", i + 1);
sprintf(strTemp, "\\\\.\\COM%d", i + 1);
hCom = CreateFile(strTemp, 0, 0, 0,OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if (INVALID_HANDLE_VALUE == hCom)
continue;
strCom.push_back(strTemp);
CloseHandle(hCom);
}
//打开设备
HANDLE hHandle = CreateFile("\\\\.\\COM11", GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
if (hHandle == INVALID_HANDLE_VALUE) {
printf("Serial=COM11,Error opening port");
return 0;
}
//获取设备属性值+修改+设置
DCB mDCB;
GetCommState(hHandle, &mDCB);
mDCB.Parity = NOPARITY;
mDCB.ByteSize = 8;
mDCB.StopBits = ONESTOPBIT;
mDCB.BaudRate = CBR_115200;
SetCommState(hHandle, &mDCB);
//设置串口写和读的缓冲区大小
SetupComm(&mDCB, 1024, 1024);
//设置超时时间,暂时不设置
//在发送和接收前,清空渡河写的缓冲区域
PurgeComm(&mDCB, PURGE_TXCLEAR | PURGE_RXCLEAR);
//开始接收串口数据
DWORD wCount; //读取的字节数
unsigned char lpInBuffer[1024];
int nCount = 0;
while (1) {
if (!ReadFile(hHandle, lpInBuffer, 1024, &wCount, 0)) {
printf("error:%d\n", GetLastError());
}
else {
if (wCount != 0) {
printf("Info%d:", nCount);
nCount++;
for (int i = 0; i < wCount; i++)
printf("%x ", lpInBuffer[i]);
printf("\n");
}
else {
Sleep(1000);
}
}
}
//关闭设备句柄
CloseHandle(hHandle);
}
接收数据结果:
来源:https://blog.csdn.net/wangzhiyang925/article/details/118964255
如果文章或资源对您有帮助,欢迎打赏作者。一路走来,感谢有您!
txttool.com 说一段 esp56物联 查询128 IP查询