C++ 中的串行端口 (RS -232) 连接
Posted
技术标签:
【中文标题】C++ 中的串行端口 (RS -232) 连接【英文标题】:Serial Port (RS -232) Connection in C++ 【发布时间】:2013-04-03 17:48:54 【问题描述】:我已经使用 16 位编译器在 C++ 中完成了串行端口 RS-232 连接(我使用的是 Turbo C++ IDE)。它包括头文件bios.h
,其中包含从端口读取值所需的所有函数。现在我想使用 C++ 32 位 Mingw 编译器从串口读取值。我正在使用 Dev CPP 作为我的 IDE。在这里我找不到bios.h
。 Mingw 中是否有任何特殊的头文件可用于此目的?我现在使用的是 32 位编译器,因为在我的大学项目中,我必须使用我猜 Turbo C 不支持的异常处理。请帮帮我。
【问题讨论】:
我认为您将无法像在请看这里:
RS-232 for Linux and Windows 1) Windows Serial Port Programming 2) Using the Serial Ports in Visual C++ 3) Serial Communication in Windows1)您可以在 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);
【讨论】:
你说你也可以在Linux上使用它,但是你'#include对于上面的答案,默认串口是
serialParams.BaudRate = 9600;
serialParams.ByteSize = 8;
serialParams.StopBits = TWOSTOPBITS;
serialParams.Parity = NOPARITY;
【讨论】:
【参考方案3】:或者你可以使用boost::asio::serial_port
!
【讨论】:
以上是关于C++ 中的串行端口 (RS -232) 连接的主要内容,如果未能解决你的问题,请参考以下文章