всё это описано в
Serial Communication in Win32, если вы программируете микроконтроллеры, то с литературой на английском уже встречались
#if defined(USE_OVERLAPPED)
memset(&frame.bufRecv, 0xaa, 10);
//Sleep(mem_ops_delay);
overlapped.hEvent = CreateEvent(NULL, true, true, NULL);
SetCommMask(FHandle, EV_RXCHAR);
//ожидать события приёма байта (это и есть перекрываемая операция)
DWORD mask = 0;
WaitCommEvent(FHandle, &mask, &overlapped);
signal = WaitForSingleObject(overlapped.hEvent, 2000);//приостановить поток до прихода байта
if(signal == WAIT_OBJECT_0) //если событие прихода байта произошло
{
if(GetOverlappedResult(FHandle, &overlapped, &temp, true)) //проверяем, успешно ли завершилась
{
//перекрываемая операция WaitCommEvent
if((mask & EV_RXCHAR)!=0) //если произошло именно событие прихода байта
{
Sleep(200);
ClearCommError(FHandle, &temp, &comstat); //нужно заполнить структуру COMSTAT
btr = comstat.cbInQue; //и получить из неё количество принятых байтов
if(btr) //если действительно есть байты для чтения
{
//ReadFile(COMport, bufrd, btr, &temp, &overlapped); //прочитать байты из порта в буфер программы
//ReadFile(FHandle, &frame.bufRecv, btr, (unsigned long*)&BufferLength, &overlapped);
ReadFile(FHandle, &frame.bufRecv, frame.nMustRecv, (unsigned long*)&BufferLength, &overlapped);
int len = BufferLength;
frame.nRecv = BufferLength;
}
}
}
}
BOOL bRes = CloseHandle(overlapped.hEvent);//перед выходом из потока закрыть объект-событие
#else
Sleep(mem_ops_delay);
memset(&frame.bufRecv, 0xaa, 10);
ReadFile(FHandle, &frame.bufRecv, 64, (unsigned long*)&BufferLength, NULL);
int len = BufferLength;
sprintf(buf, "TxRx: data received -> %d bytes", len);
WriteDebugLog(buf);
sprintf(buf, "TxRx: data received -> ");
for(int i=0; i
{
sprintf(buf2, "%2x ", frame.bufRecv[i]);
strcat(buf, buf2);
}
WriteDebugLog(buf);
frame.nRecv = BufferLength;
#endif
для настроек порта в компоненте имеются соответствующие свойства:
__property TBaudRate BaudRate ={read=FBaudRate,write=SetBaudRate,default=br9600};
__property TParity Parity ={ read=FParity,write=SetParity,default=paNone};
__property TStopBits StopBits ={ read=FStopBits,write=SetStopBits,default=sb10};
__property TDataBits DataBits ={ read=FDataBits,write=SetDataBits,default=da8};
где
enum TBaudRate {br110, br300, br600, br1200, br2400, br4800, br9600, br14400,
br19200, br38400, br56000, br57600, br115200, br128000, br256000};
enum TParity {paNone, paOdd, paEven, paMark, paSpace};
enum TStopBits { sb10, sb15, sb20};
enum TDataBits {da4, da5, da6, da7, da8};