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

Serial Port (RS -232) Connection in C++

本文关键字:连接 c++ RS -232 串口      更新时间:2023-10-16

我使用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串口编程2)
  • 在Visual c++中使用串口3)
  • Windows中的串行通信

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

对于上面的答案,默认的串行端口是

        serialParams.BaudRate = 9600;
        serialParams.ByteSize = 8;
        serialParams.StopBits = TWOSTOPBITS;
        serialParams.Parity = NOPARITY;

或者直接使用boost::asio::serial_port !