我曾经使用16位编译器(Turbo C++ IDE)通过串口RS-232连接进行了C++开发,包括头文件bios.h
,其中包含了从端口读取值所需的所有函数。现在我想要使用C++ 32位Mingw编译器从串口读取值,我的IDE是Dev CPP。但是在这里我找不到bios.h
,在Mingw中是否有针对此目的的特殊头文件?现在我使用32位编译器,因为在我的学校项目中我需要使用异常处理,而我猜测Turbo C不支持。请帮帮我。
我曾经使用16位编译器(Turbo C++ IDE)通过串口RS-232连接进行了C++开发,包括头文件bios.h
,其中包含了从端口读取值所需的所有函数。现在我想要使用C++ 32位Mingw编译器从串口读取值,我的IDE是Dev CPP。但是在这里我找不到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);
或者您可以直接使用boost::asio::serial_port
!
对于上面的答案, 默认串口是
serialParams.BaudRate = 9600;
serialParams.ByteSize = 8;
serialParams.StopBits = TWOSTOPBITS;
serialParams.Parity = NOPARITY;