c++ - C++ 中的串行端口 (RS -232) 连接

标签 c++ serial-port mingw

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

最佳答案

请看这里:

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);

关于c++ - C++ 中的串行端口 (RS -232) 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15794422/

相关文章:

c++ - 在句子中寻找单词

windows - Windows PC 上的 COM 端口表示比特率,还是波特率?

c++ - Mingw libgcc_s_sjlj-1.dll 丢失

opencv - 制作失败 98% Linking CXX shared module ..\..\lib\cv2.pyd

c++ - SIGSEGV为什么不使过程崩溃?

c++ - xcode:添加链接器标志和 "link binary with libraries"之间的区别

c++ - 从字符串中读取十六进制值并将它们存储到 c/c++ 中的整数数组中

c++ - `stat()` 的一些奇怪行为

linux - fconfigure 拒绝将波特率设置为 921600

c# - 查找串行设备 COM 端口