web-dev-qa-db-fra.com

Connexion au port série (RS -232) en C ++

J'ai établi une connexion RS-232 par port série en C++ à l'aide d'un compilateur 16 bits (j'utilisais Turbo C++ IDE). Il incluait le fichier d'en-tête bios.h qui contient toutes les fonctions requises pour lire les valeurs du port. Maintenant, je veux lire la valeur du port série en utilisant le compilateur Mingw C++ 32 bits. J'utilise Dev CPP comme IDE. Ici, je n'ai pas trouvé bios.h. Existe-t-il des fichiers d’en-tête spéciaux disponibles à cet effet dans Mingw? J'utilise maintenant un compilateur 32 bits parce que, dans mon projet universitaire, je dois utiliser la gestion des exceptions qui, je suppose, n'est pas prise en charge par Turbo C. Aidez-moi s'il vous plaît.

26
iammurtaza

S'il vous plaît jeter un oeil ici:

1)  Vous pouvez l'utiliser avec Windows (y compris MinGW) ainsi qu'avec Linux. Alternative, vous pouvez uniquement utiliser le code comme exemple.

2)  Didacticiel pas à pas sur l'utilisation des ports série sous Windows

3)  Vous pouvez l'utiliser littéralement sur MinGW

Voici un code très très simple (sans traitement d’erreur ni paramètres):

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

Vous pouvez maintenant utiliser WriteFile()/ReadFile() pour écrire/lire des octets. N'oubliez pas de fermer votre connexion:

CloseHandle(serialHandle);
40
ollo