36

我已经使用 16 位编译器在 C++ 中完成了串行端口 RS-232 连接(我使用的是 Turbo C++ IDE)。它包括头文件bios.h,其中包含从端口读取值所需的所有函数。现在我想使用 C++ 32 位 Mingw 编译器从串口读取值。我正在使用 Dev CPP 作为我的 IDE。在这里我找不到bios.h。Mingw 中是否有任何特殊的头文件可用于此目的?我现在使用的是 32 位编译器,因为在我的大学项目中,我必须使用我猜 Turbo C 不支持的异常处理。请帮帮我。

4

3 回答 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 回答