Ответ 1
Пожалуйста, посмотрите здесь:
- RS-232 для Linux и Windows 1)
- Программирование последовательного порта Windows 2)
- Использование последовательных портов в Visual C++ 3)
- Последовательная связь в Windows
1) Вы можете использовать это как с Windows (включая MinGW), так и с Linux. Альтернативно вы можете использовать код только в качестве примера.
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);