Seriële poort (RS -232) verbinding in C++

Ik heb een seriële poort RS-232-verbinding gemaakt in C++ met behulp van een 16-bits compiler (ik gebruikte Turbo C++ IDE). Het bevatte header-bestand bios.hdat alle vereiste functies bevat voor het lezen van waarden van de poort. Nu wil ik de waarde van de seriële poort lezen met behulp van C++ 32-bit Mingw-compiler. Ik gebruik Dev CPP als mijn IDE. Hier kon ik bios.hniet vinden. Zijn er speciale header-bestanden beschikbaar voor dit doel in Mingw? Ik gebruik nu een 32-bits compiler omdat ik in mijn universiteitsproject Exception handling moet gebruiken waarvan ik vermoed dat het niet wordt ondersteund in Turbo C. Help me alsjeblieft.


Antwoord 1, autoriteit 100%

Kijk hier eens:

1)Je kunt dit zowel met Windows (incl. MinGW) als Linux gebruiken. Alternatief, je kunt de code alleen als voorbeeld gebruiken.

2)Stap-voor-stap handleiding voor het gebruik van seriële poorten op Windows

3)Je kunt dit letterlijk gebruiken op MinGW

Hier is een zeer, zeer eenvoudige code (zonder enige foutafhandeling of instellingen):

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

Nu kunt u WriteFile()/ ReadFile()gebruiken om bytes te schrijven/lezen.
Vergeet niet je verbinding te sluiten:

CloseHandle(serialHandle);

Antwoord 2, autoriteit 3%

Voor het bovenstaande antwoord is de standaard seriële poort

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

Other episodes