webentwicklung-frage-antwort-db.com.de

Serielle Schnittstelle (RS-232) Verbindung in C ++

Ich habe eine serielle RS-232-Verbindung in C++ mit einem 16-Bit-Compiler hergestellt (ich habe Turbo C++ IDE verwendet). Es enthielt eine Header-Datei bios.h, Die alle erforderlichen Funktionen zum Lesen von Werten aus dem Port enthält. Jetzt möchte ich den Wert von der seriellen Schnittstelle mit dem C++ - 32-Bit-Mingw-Compiler lesen. Ich benutze Dev CPP als meine IDE. Hier konnte ich bios.h Nicht finden. Gibt es spezielle Header-Dateien für diesen Zweck in Mingw? Ich verwende jetzt 32-Bit-Compiler, weil ich in meinem College-Projekt die Ausnahmebehandlung verwenden muss, die in Turbo C vermutlich nicht unterstützt wird. Bitte helfen Sie mir.

26
iammurtaza

Bitte schauen Sie hier:

1)  Sie können dies sowohl unter Windows (inkl. MinGW) als auch unter Linux verwenden. Alternativ können Sie nur den Code als Beispiel verwenden.

2)  Schritt-für-Schritt-Anleitung zur Verwendung von seriellen Schnittstellen unter Windows

3)  Sie können dies buchstäblich auf MinGW verwenden

Hier ist ein sehr, sehr einfacher Code (ohne Fehlerbehandlung oder Einstellungen):

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

Jetzt können Sie mit WriteFile()/ReadFile() Bytes schreiben/lesen. Vergiss nicht, deine Verbindung zu beenden:

CloseHandle(serialHandle);
40
ollo