Please take a look here:
- RS-232 for Linux and Windows 1)
- Windows Serial Port Programming 2)
- Using the Serial Ports in Visual C++ 3)
- Serial Communication in Windows
1) You can use this with Windows (incl. MinGW) as well as Linux. Alternative you can only use the code as an example.
2) Step-by-step tutorial how to use serial ports on windows
3) You can use this literally on MinGW
Here’s some very, very simple code (without any error handling or settings):
#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);
Now you can use WriteFile()
/ ReadFile()
to write / read bytes. Don’t forget to close your connection:
CloseHandle(serialHandle);