|
COM-порты в Windows аналогичны файлам и могут быть задействованы с использованием тех же функций, что и файлы - CreateFile, ReadFile, WriteFile, CloseHandle. Однако в программе используются функции, специфичные для COM-порта в Win32 API – GetCommState, SetCommState.
HANDLE CreateFile(LPCTSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile );
Функция CreateFile открывает или создает файл, файловый поток, директорию, физический диск, раздел, консольный буфер или коммуникационный ресурс. В случае успеха функция возвращает хендл объекта для доступа к нему.
lpFileName – полное имя открываемого файла
dwDesiredAccess – доступ к объекту (чтение, запись или и то, и другое)
dwShareMode – режим разделения доступа к ресурсу
lpSecurityAttributes – указатель на структуру, определяющую возможность наследования хэндла на ресурс дочерними процессами
dwCreationDisposition – действие, которое следует выполнить если ресурс существует или не существует
dwFlagsAndAttributes – атрибуты и флаги файла
hTemplateFile –должен быть NULL
BOOL ReadFile(HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped );
Функция ReadFile читает данные из файла, начиная с позиции, на которой находится указатель на файл. Может быть использована как для синхронного, так и для асинхронного чтения. В данной программе используется второй вариант.
hFile – хэндл файла, из которого производится чтение
lpBuffer – указатель на буфер, в который будет производиться чтение.
nNumberOfBytesRead – количество байт для чтения из файла
lpNumberOfBytesread – указатель на переменную, куда будет записано количество прочитанных байт
lpOverlapped – указатель на структуру, используемую при асинхронном вводе/выводе.
BOOL WriteFile(HANDLE hFile, LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite, LPDWORD lpNumberOfBytesWritten, LPOVERLAPPED lpOverlapped );
Функция WriteFile записывает данные в файл, начиная с позиции, на которой находится указатель на файл. Может быть использована как для синхронной, так и для асинхронной записи. Как и в случае с ReadFile, WriteFile используется для асинхронной записи.
hFile – хэндл файла, в который будет производиться запись
lpBuffer – указатель на буфер, содержащий данные для записи
nNumberOfBytesRead – количество байт для записи в файл
lpNumberOfBytesread – указатель на переменную, куда будет записано количество записанных байт
lpOverlapped – указатель на структуру, используемую при асинхронном вводе/выводе.
BOOL CloseHandle(HANDLE hObject );
Функция CloseHandle закрывает открытый хэндл объекта.
hObject – закрываемый хэндл.
BOOL GetCommState(HANDLE hFile, LPDCB lpDCB );
Функция получает информацию о настройках выбранного коммуникационного устройства.
hFile – хэндл устройства
lpDCB – указатель на DCB-структуру, куда будет записана полученная информация.
BOOL SetCommState(HANDLE hFile, LPDCB lpDCB );
Функция настраивает выбранное коммуникационное устройство в соответствии с DCB-структурой.
hFile – хэндл устройства
lpDCB – указатель на DCB-структуру для получения настроек.
typedef struct _DCB {
DWORD BaudRate;
BYTE ByteSize;
BYTE Parity;
BYTE StopBits;
};
DCB-структура определяет настройки последовательного коммуникационного устройства. Здесь приведены лишь поля структуры, использованные в проекте.
BaudRate – скорость, на которой работает коммуникационное устроство, в бодах.
ByteSize – количество битов в принятых и переданных байтах.
Parity – настройка четности. Может быть одним из заранее предустановленных значений.
StopBits – количество используемых стоповых битов.
Общая схема работы с COM-портом такова:
- Порт открывается для чтения и записи при помощи функций ReadFile и WriteFile.
- Настройки COM-порта сохраняются в DCB-структуре при помощи функции GetCommState.
- В настройки вносятся необходимые изменения, после чего при помощи функции SetCommState структура используется для перенастройки COM-порта.
- При помощи функций WriteFile и ReadFile осуществляется обмен данными между ПК и МК.
- Хэндл COM-порта закрывается при помощи функции CloseHandle.
Дата добавления: 2015-07-16; просмотров: 106 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Описание протокола RS232. | | | Организация настроек Com-port в графическом интерфейсе. |