caiyehua
主要目标:在本机通过com1串口对数据进行读写,可是怎么也接收不到数据,望高人指点......
发送按钮的代码如下:
   m_strPort = "COM1";
   hCom=CreateFile(m_strPort,GENERIC_READ|GENERIC_WRITE,
                    0,NULL,OPEN_EXISTING,
                    FILE_ATTRIBUTE_NORMAL,//|FILE_FLAG_OVERLAPPED,
                    NULL);

   if(hCom==INVALID_HANDLE_VALUE) 
   { 
        AfxMessageBox(_T("打开通信端口错误!"), MB_OK, 0);
        return false; 
   }
   UpdateData(true);

   
    // 对已经打开的串口进行设置
    SetupComm(hCom,1024,1024);
    // 全部清空发送缓冲区和接收缓冲区
    PurgeComm(hCom, PURGE_TXCLEAR|PURGE_RXCLEAR);
    COMMTIMEOUTS Timeouts;
    //DCB dcb;
    Timeouts.ReadIntervalTimeout=50;
    Timeouts.ReadTotalTimeoutConstant=2000;
    Timeouts.ReadTotalTimeoutMultiplier=0;
    Timeouts.WriteTotalTimeoutConstant=2000;
    Timeouts.WriteTotalTimeoutMultiplier=0;
    SetCommTimeouts(hCom,&Timeouts);
    m_nSetupbt = 9600;
    GetCommState(hCom,&dcb);
    dcb.BaudRate=m_nSetupbt;
    dcb.ByteSize=8;
    dcb.StopBits=ONESTOPBIT;
    dcb.Parity=NOPARITY;
    dcb.fBinary = TRUE;
    dcb.fParity = FALSE;
    if(!SetCommState(hCom,&dcb)) 
     { 
         AfxMessageBox(_T("通信端口设置错误!"), MB_OK, 0);
         CloseHandle(hCom); 
         return false; 
     }  
    UpdateData(false);

    // 开始传送数据
    DWORD length;
    //unsigned send[10];
    BOOL bWriteStat;
    //send[0]=m_sSend;
    char send[6]={"china"};
   


    for   (int   i=0;   i<sizeof(send);   i++)
    {
    bWriteStat = WriteFile(hCom,(LPSTR)&send[i],1,&length,m_LpOverlappedWrite);
    /*unsigned accept[10] = {0};
    bReadStatus = ReadFile(hCom, accept,5,&length,m_OverlappedRead);*/
    if( !bWriteStat && ( GetLastError() == ERROR_IO_PENDING ) ){
        if( WaitForSingleObject( m_OverlappedWrite.hEvent, 1000 ) ) length = 0;
        else{
            GetOverlappedResult( hCom, &m_OverlappedWrite, &length, FALSE );
            m_OverlappedWrite.Offset += length;
            }
    }
      length++;
    }

    return( TRUE );
然后接收是按钮的代码如下:
UpdateData(true);

    DWORD length;
    //unsigned accept[10] = {0};
    char accept[6];
    //char accept[20];
    UpdateData(false);
    // 接收已经写入串口的数据
   
    bReadStatus = ReadFile(hCom, &accept,5,&length,m_LpOverlappedRead);
   
    if (!bReadStatus)
    {
        if(GetLastError()==ERROR_IO_PENDING)
        {
            WaitForSingleObject(m_OverlappedRead.hEvent,1000);
            return ((int)length);
        }
        return(0);
    }

分类:

技术点:

相关文章: