#include <windows.h>
#include <tchar.h>
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <string>
int WindowsSerialSend(unsigned char *message, int len)
{
// 在这里可以进行读写串口的操作
DWORD bytesSent;
for (int i = 0; i < len; i++)
{
printf("%02x", message[i]);
}
printf("\n");
if (!WriteFile(hSerial, message, len, &bytesSent, NULL)) {
std::cout << "Failed to send data" << std::endl;
CloseHandle(hSerial);
return 1;
}
cout << "发送数据成功" << endl;
return 0;
}
int main()
{
DCB dcbSerialParams = { 0 };
COMMTIMEOUTS timeouts = { 0 };
// 打开串口
hSerial = CreateFile(_T("COM1"), GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if (hSerial == INVALID_HANDLE_VALUE) {
// 处理错误
if (GetLastError() == ERROR_FILE_NOT_FOUND) {
// 串口不存在
printf("串口不存在\n");
}
else {
// 其他错误
printf("无法打开串口\n");
}
Sleep(5000);
return 1;
}
printf("串口存在\n");
// 配置串口参数
dcbSerialParams.DCBlength = sizeof(dcbSerialParams);
if (!GetCommState(hSerial, &dcbSerialParams)) {
// 获取串口状态失败
printf("获取串口状态失败\n");
CloseHandle(hSerial);
return 1;
}
dcbSerialParams.BaudRate = CBR_115200; // 波特率
dcbSerialParams.ByteSize = 8; // 数据位
dcbSerialParams.StopBits = ONESTOPBIT; // 停止位
dcbSerialParams.Parity = NOPARITY; // 校验位
if (!SetCommState(hSerial, &dcbSerialParams)) {
// 设置串口状态失败
printf("设置串口状态失败\n");
CloseHandle(hSerial);
return 1;
}
// 设置读写超时时间
timeouts.ReadIntervalTimeout = 50;
timeouts.ReadTotalTimeoutConstant = 50;
timeouts.ReadTotalTimeoutMultiplier = 10;
timeouts.WriteTotalTimeoutConstant = 50;
timeouts.WriteTotalTimeoutMultiplier = 10;
if (!SetCommTimeouts(hSerial, &timeouts)) {
// 设置超时时间失败
printf("设置超时时间失败\n");
CloseHandle(hSerial);
return 1;
}
printf("设置串口成功\n");
char src[] = "hello world";
int SendLen = strlen(src);
//数据发送
ret = WindowsSerialSend(Src, SendLen);
// 关闭串口
CloseHandle(hSerial);
}
c++ windows 串口编程
于 2023-11-25 19:56:29 首次发布