C++ 从串口读取数据
时间: 2023-09-06 20:07:42 浏览: 104
以下是C++从串口读取数据的示例代码:
```c++
#include <Windows.h>
#include <iostream>
// 定义串口句柄
HANDLE hSerial;
// 打开串口
bool OpenSerialPort()
{
hSerial = CreateFile("COM1", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hSerial == INVALID_HANDLE_VALUE)
{
return false;
}
// 配置串口参数
DCB dcbSerialParams = { 0 };
if (!GetCommState(hSerial, &dcbSerialParams))
{
CloseHandle(hSerial);
return false;
}
dcbSerialParams.BaudRate = CBR_9600;
dcbSerialParams.ByteSize = 8;
dcbSerialParams.StopBits = ONESTOPBIT;
dcbSerialParams.Parity = NOPARITY;
if (!SetCommState(hSerial, &dcbSerialParams))
{
CloseHandle(hSerial);
return false;
}
// 配置串口超时
COMMTIMEOUTS timeouts = { 0 };
timeouts.ReadIntervalTimeout = 50;
timeouts.ReadTotalTimeoutConstant = 50;
timeouts.ReadTotalTimeoutMultiplier = 10;
timeouts.WriteTotalTimeoutConstant = 50;
timeouts.WriteTotalTimeoutMultiplier = 10;
if (!SetCommTimeouts(hSerial, &timeouts))
{
CloseHandle(hSerial);
return false;
}
return true;
}
// 关闭串口
void CloseSerialPort()
{
CloseHandle(hSerial);
}
int main()
{
// 打开串口
if (!OpenSerialPort())
{
std::cout << "Open Serial Port Failed!" << std::endl;
return -1;
}
// 读取串口数据
char buf[1024];
DWORD dwBytesRead;
if (ReadFile(hSerial, buf, sizeof(buf), &dwBytesRead, NULL))
{
// 处理读取到的数据
// ...
}
// 关闭串口
CloseSerialPort();
return 0;
}
```
注:以上示例代码仅供参考,实际使用时需要根据具体情况进行修改。