用C++ 写一个串口通信小程序
时间: 2023-10-08 08:10:13 浏览: 80
c++串口通信程序
下面是一个使用 C++ 实现串口通信的小程序示例:
```c++
#include <iostream>
#include <Windows.h>
int main()
{
// 打开串口
HANDLE hSerial = CreateFile("\\\\.\\COM1", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hSerial == INVALID_HANDLE_VALUE)
{
std::cout << "无法打开串口" << std::endl;
return 1;
}
// 配置串口参数
DCB dcbSerialParams = { 0 };
dcbSerialParams.DCBlength = sizeof(dcbSerialParams);
GetCommState(hSerial, &dcbSerialParams);
dcbSerialParams.BaudRate = CBR_9600;
dcbSerialParams.ByteSize = 8;
dcbSerialParams.StopBits = ONESTOPBIT;
dcbSerialParams.Parity = NOPARITY;
SetCommState(hSerial, &dcbSerialParams);
// 设置串口超时时间
COMMTIMEOUTS timeouts = { 0 };
timeouts.ReadIntervalTimeout = 50;
timeouts.ReadTotalTimeoutConstant = 50;
timeouts.ReadTotalTimeoutMultiplier = 10;
timeouts.WriteTotalTimeoutConstant = 50;
timeouts.WriteTotalTimeoutMultiplier = 10;
SetCommTimeouts(hSerial, &timeouts);
// 发送数据
char data[] = "Hello, world!";
DWORD bytesWritten = 0;
WriteFile(hSerial, data, sizeof(data), &bytesWritten, NULL);
std::cout << "已发送数据:" << data << std::endl;
// 接收数据
char buffer[1024];
DWORD bytesRead = 0;
ReadFile(hSerial, buffer, sizeof(buffer), &bytesRead, NULL);
std::cout << "已接收数据:" << buffer << std::endl;
// 关闭串口
CloseHandle(hSerial);
return 0;
}
```
上面的代码中,首先使用 `CreateFile()` 函数打开串口,然后使用 `GetCommState()` 和 `SetCommState()` 函数配置串口参数,使用 `SetCommTimeouts()` 函数设置串口超时时间。接着,使用 `WriteFile()` 函数发送数据到串口,使用 `ReadFile()` 函数从串口接收数据。最后,使用 `CloseHandle()` 函数关闭串口。
需要注意的是,串口通信是一种底层的硬件通信方式,需要考虑到很多细节问题,比如串口参数的设置、超时时间的设置、数据的格式等等。因此,开发串口通信程序需要具备一定的硬件基础和底层编程能力。
阅读全文