Подтвердить что ты не робот

Последовательный порт (RS -232) Соединение в С++

Я сделал последовательный порт RS-232 в С++ с использованием 16-битного компилятора (я использовал Turbo С++ IDE). Он включал заголовочный файл bios.h, который содержит все необходимые функции для считывания значений из порта. Теперь я хочу прочитать значение из последовательного порта, используя 32-битный Mingw-компилятор С++. Я использую Dev CPP в качестве моей IDE. Здесь я не мог найти bios.h. Существуют ли какие-либо специальные файлы заголовков для этой цели в Mingw? Я использую 32-битный компилятор сейчас, потому что в моем проекте колледжа мне пришлось использовать обработку исключений, которая, как мне кажется, не поддерживается в Turbo C. Пожалуйста, помогите мне.

4b9b3361

Ответ 1

Пожалуйста, посмотрите здесь:

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