J'ai réalisé la connexion du port série RS-232 en C++ à l'aide d'un compilateur 16 bits (j'utilisais l'IDE Turbo C++). Il comprenait le fichier d'en-tête bios.h
qui contiennent toutes les fonctions nécessaires à la lecture des valeurs du port. Maintenant je veux lire la valeur du port série en utilisant le compilateur C++ 32-bit Mingw. J'utilise Dev CPP comme IDE. Ici, je n'ai pas pu trouver bios.h
. Existe-t-il des fichiers d'en-tête spéciaux disponibles à cet effet dans Mingw ? J'utilise le compilateur 32 bits maintenant 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. Veuillez m'aider.
Réponses
Trop de publicités?Jetez un coup d'œil ici :
- RS-232 pour Linux et Windows 1)
- Programmation du port série de Windows 2)
- Utilisation des ports série dans Visual C++ 3)
- Communication série sous Windows
1) Vous pouvez l'utiliser aussi bien avec Windows (y compris MinGW) qu'avec Linux. Alternativement, vous ne pouvez utiliser le code qu'à titre d'exemple.
2) Tutoriel étape par étape 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 aucune gestion des erreurs ni aucun paramètre) :
#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);