我已经使用 16 位编译器在 C++ 中完成了串行端口 RS-232 连接(我使用的是 Turbo C++ IDE)。它包括头文件bios.h
,其中包含从端口读取值所需的所有函数。现在我想使用 C++ 32 位 Mingw 编译器从串口读取值。我正在使用 Dev CPP 作为我的 IDE。在这里我找不到bios.h
。Mingw 中是否有任何特殊的头文件可用于此目的?我现在使用的是 32 位编译器,因为在我的大学项目中,我必须使用我猜 Turbo C 不支持的异常处理。请帮帮我。
问问题
179143 次
3 回答
62
请看这里:
1) 您可以在 Windows(包括 MinGW)和 Linux 上使用它。或者,您只能使用代码作为示例。
2) 分步教程如何在windows上使用串口
3) 你可以在 MinGW 上使用它
这是一些非常非常简单的代码(没有任何错误处理或设置):
#include <windows.h>
/* ... */
// Open serial port
HANDLE serialHandle;
serialHandle = CreateFile("\\\\.\\COM1", GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
// Do some basic settings
DCB serialParams = { 0 };
serialParams.DCBlength = sizeof(serialParams);
GetCommState(serialHandle, &serialParams);
serialParams.BaudRate = baudrate;
serialParams.ByteSize = byteSize;
serialParams.StopBits = stopBits;
serialParams.Parity = parity;
SetCommState(serialHandle, &serialParams);
// Set timeouts
COMMTIMEOUTS timeout = { 0 };
timeout.ReadIntervalTimeout = 50;
timeout.ReadTotalTimeoutConstant = 50;
timeout.ReadTotalTimeoutMultiplier = 50;
timeout.WriteTotalTimeoutConstant = 50;
timeout.WriteTotalTimeoutMultiplier = 10;
SetCommTimeouts(serialHandle, &timeout);
现在您可以使用WriteFile()
/ReadFile()
来写入/读取字节。不要忘记关闭您的连接:
CloseHandle(serialHandle);
于 2013-04-03T18:47:21.960 回答
3
对于上面的答案,默认的串口是
serialParams.BaudRate = 9600;
serialParams.ByteSize = 8;
serialParams.StopBits = TWOSTOPBITS;
serialParams.Parity = NOPARITY;
于 2020-05-20T20:46:12.377 回答
3
或者你可以使用boost::asio::serial_port
!
于 2021-09-08T18:01:00.717 回答