web-dev-qa-db-ja.com

C ++でのシリアルポート(RS -232)接続

16ビットコンパイラを使用してC++でシリアルポートRS-232接続を行いました(Turbo C++ IDEを使用していました)。ポートから値を読み取るために必要なすべての関数を含むヘッダーファイルbios.hが含まれていました。ここで、C++ 32ビットMingwコンパイラを使用してシリアルポートから値を読み取ります。 IDEとしてDev CPPを使用しています。ここではbios.hが見つかりませんでした。 Mingwでこの目的に使用できる特別なヘッダーファイルはありますか?私は大学のプロジェクトで例外処理を使用するようになったため、現在32ビットコンパイラを使用しています。例外処理はTurbo Cではサポートされていないと思われます。

26
iammurtaza

こちらをご覧ください:

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);
_
40
ollo