1. ホーム
  2. c++

[解決済み] C++によるシリアルポート(RS -232)接続

2022-03-08 02:30:24

質問

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

どのように解決するのですか?

こちらをご覧ください。

1) Linuxだけでなく、Windows(MinGWを含む)でも使用可能です。また、このコードは例としてのみ使用することができます。

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