C++ 串口编程 打开串口 关闭串口 设置串口参数 读写串口函数 参考程序

使用Windows API函数操作串口比较简单,只需要掌握下面几个函数:
CreateFile 打开串口
GetCommState 获取串口参数(波特率、数据位、效验位等)
SetCommState 设置串口参数
ReadFile 读串口数据
WriteFile 写串口数据
CloseHandle 关闭串口
下面给出一些简单的参考代码:
// 打开串口
  HANDLE hCom;  //全局变量,串口句柄  
  hCom=CreateFile("COM1",//COM1口  
  GENERIC_READ|GENERIC_WRITE, //允许读和写  
  0, //独占方式  
  NULL,  
  OPEN_EXISTING, //打开而不是创建  
  0, //同步方式  
  NULL);  
  if(hCom==(HANDLE)-1)  
  {  
    AfxMessageBox("打开COM失败!");  
    return FALSE;  
  }  
  return TRUE; 
// 写串口
     char lpOutBuffer[100];  
     DWORD dwBytesWrite=100;  
     COMSTAT ComStat;  
     DWORD dwErrorFlags;  
     BOOL bWriteStat;  
     ClearCommError(hCom,&dwErrorFlags,&ComStat);  
     bWriteStat=WriteFile(hCom,lpOutBuffer,dwBytesWrite,&dwBytesWrite,NULL);  
     if(!bWriteStat)  
      {  
          AfxMessageBox("写串口失败!");  
     }  
// 读串口
    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;


发表于:2013-05-01 09:03:14

原文链接(转载请保留): http://www.multisilicon.com/blog/a23160815.html

友情链接: MICROIC
首页