Win32下COM口通信控制

这段时间做兼职帮做了一个COM口单片机监控控制程序, 学习了些Win32下COM口的控制.

下面是与COM口控制有关的部分示例代码.

//打开COM1
hCOM=CreateFile(
  "COM1",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);
if (hCOM==INVALID_HANDLE_VALUE) {
  MessageBox(
    GetForegroundWindow(),"无法打开串口!","操作失败",MB_ICONINFORMATION);
  return;
}

//设置DCB
DCB dcb;
if (!GetCommState(hCOM,&dcb)) {
  MessageBox(
    GetForegroundWindow(),"无法获取串口状态!","操作失败",MB_ICONINFORMATION);
    hCOM=INVALID_HANDLE_VALUE;
    return;
}

dcb.BaudRate=9600;
dcb.ByteSize=8;
dcb.Parity=NOPARITY;
dcb.StopBits=ONESTOPBIT;
if (!SetCommState(hCOM,&dcb)) {
  MessageBox(
    GetForegroundWindow(),"无法设置串口状态!","操作失败",MB_ICONINFORMATION);
  hCOM=INVALID_HANDLE_VALUE;
  return;
}

//设置COMMTIMEOUTS
COMMTIMEOUTS communication_timeout;
communication_timeout.ReadIntervalTimeout=MAXDWORD;
communication_timeout.ReadTotalTimeoutMultiplier=0;
communication_timeout.ReadTotalTimeoutConstant=0;
communication_timeout.WriteTotalTimeoutMultiplier=0;
communication_timeout.WriteTotalTimeoutConstant=0;
if (!SetCommTimeouts(hCOM,&communication_timeout)) {
  MessageBox(
    GetForegroundWindow(),"无法设置串口超时!","操作失败",MB_ICONINFORMATION);
  hCOM=INVALID_HANDLE_VALUE;
  return;
}

//向串口写入ABC三个字符
ULONG nBytesWritten;
WriteFile(hCOM,"ABC",3,&nBytesWritten,NULL);

//从串口读入三个字符至str
char str[3];
ULONG bytes_read_num;
ReadFile(hCOM,str,3,&bytes_read_num,NULL);

Eric Zhiqiang Ma

Eric is interested in building high-performance and scalable distributed systems and related technologies. The views or opinions expressed here are solely Eric's own and do not necessarily represent those of any third parties.

Leave a Reply

Your email address will not be published. Required fields are marked *