C++ 中的串行端口 (RS -232) 连接
我已经使用 16 位编译器在 C++ 中完成了串行端口 RS-232 连接(我使用的是 Turbo C++ IDE).它包括头文件 bios.h
,其中包含从端口读取值所需的所有函数.现在我想使用 C++ 32 位 Mingw 编译器从串口读取值.我正在使用 Dev CPP 作为我的 IDE.在这里我找不到 bios.h
.Mingw 中是否有任何特殊的头文件可用于此目的?我现在使用的是 32 位编译器,因为在我的大学项目中,我必须使用我猜 Turbo C 不支持的异常处理.请帮帮我.
I have done serial port RS-232 connection in C++ using 16-bit compiler (I was using Turbo C++ IDE). It included header file bios.h
which contain all the required functions for reading values from the port. Now I want to read value from serial port using C++ 32-bit Mingw compiler. I am using Dev CPP as my IDE. Here I could not find bios.h
. Are there any special header files available for this purpose in Mingw? I am using 32-bit compiler now because in my college project I got to use Exception handling which I guess is not supported in Turbo C. Please help me out.
推荐答案
请看这里:
- 适用于 Linux 和 Windows 的 RS-232 1)
- Windows 串口编程 2)
- 在 Visual C++ 中使用串行端口 3)
- Windows 中的串行通信
1) 您可以在 Windows(包括 MinGW)以及 Linux 上使用它.或者你只能以代码为例.
2) 如何在windows上使用串口的分步教程
3) 你可以在 MinGW 上直接使用它
这里有一些非常非常简单的代码(没有任何错误处理或设置):
Here's some very, very simple code (without any error handling or settings):
#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()
来写入/读取字节.不要忘记关闭您的连接:
Now you can use WriteFile()
/ ReadFile()
to write / read bytes.
Don't forget to close your connection:
CloseHandle(serialHandle);
相关文章