WEB开发网
开发学院软件开发VC Win32串口编程 阅读

Win32串口编程

 2007-03-17 22:00:53 来源:WEB开发网   
核心提示: 参数lpStat指向一个COMSTAT结构,该结构返回串口状态信息,Win32串口编程(10), COMSTAT结构 COMSTAT结构包含串口的信息,结构定义如下:typedef struct _COMSTAT { // cstDWORD fCtsHold : 1; // Tx wait

参数lpStat指向一个COMSTAT结构,该结构返回串口状态信息。 COMSTAT结构 COMSTAT结构包含串口的信息,结构定义如下:typedef struct _COMSTAT { // cst 
  DWORD fCtsHold : 1;  // Tx waiting for CTS signal
  DWORD fDsrHold : 1;  // Tx waiting for DSR signal
  DWORD fRlsdHold : 1; // Tx waiting for RLSD signal
  DWORD fXoffHold : 1; // Tx waiting, XOFF char rec''d
  DWORD fXoffSent : 1; // Tx waiting, XOFF char sent
  DWORD fEof : 1;    // EOF character sent
  DWORD fTxim : 1;   // character waiting for Tx
  DWORD fReserved : 25; // reserved
  DWORD cbInQue;    // bytes in input buffer
  DWORD cbOutQue;    // bytes in output buffer
} COMSTAT, *LPCOMSTAT;
本文只用到了cbInQue成员变量,该成员变量的值代表输入缓冲区的字节数。

最后用PurgeComm函数清空串口的输入输出缓冲区。

这段代码用WaitForSingleObject函数来等待OVERLAPPED结构的hEvent成员,下面我们再演示一段调用GetOverlappedResult函数等待的异步读串口示例代码:

char lpInBuffer[1024];
DWORD dwBytesRead=1024;
  BOOL bReadStatus;
  DWORD dwErrorFlags;
  COMSTAT ComStat;
OVERLAPPED m_osRead;
  ClearCommError(hCom,&dwErrorFlags,&ComStat);
  if(!ComStat.cbInQue)
    return 0;
  dwBytesRead=min(dwBytesRead,(DWORD)ComStat.cbInQue);
  bReadStatus=ReadFile(hCom, lpInBuffer,dwBytesRead,
    &dwBytesRead,&m_osRead);
  if(!bReadStatus) //如果ReadFile函数返回FALSE
  {
    if(GetLastError()==ERROR_IO_PENDING)
    {
      GetOverlappedResult(hCom,
        &m_osRead,&dwBytesRead,TRUE);
      // GetOverlappedResult函数的最后一个参数设为TRUE,
      //函数会一直等待,直到读操作完成或由于错误而返回。
      return dwBytesRead;
    }
    return 0;
  }
  return dwBytesRead;
异步写串口的示例代码:char buffer[1024];
DWORD dwBytesWritten=1024;
  DWORD dwErrorFlags;
  COMSTAT ComStat;
OVERLAPPED m_osWrite;
  BOOL bWriteStat;
  bWriteStat=WriteFile(hCom,buffer,dwBytesWritten,
    &dwBytesWritten,&m_OsWrite);
  if(!bWriteStat)
  {
    if(GetLastError()==ERROR_IO_PENDING)
    {
      WaitForSingleObject(m_osWrite.hEvent,1000);
      return dwBytesWritten;
    }
    return 0;
  }
  return dwBytesWritten;
(4)、关闭串口

利用API函数关闭串口非常简单,只需使用CreateFile函数返回的句柄作为参数调用CloseHandle即可:

上一页  5 6 7 8 9 10 

Tags:Win 串口 编程

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接