我用pc串口和dsp通信
dsp自己收发环回没问题的。dsp收,pc发也没问题dsp发,pc收就会丢少量的数据。我开始怀疑是rts流控制没做好,用示波器抓数据,没发现rts信号激活,就是说没有流控的问题,所以很奇怪。pc我用同步阻塞模式,设置如下,哪位大侠帮我看看: GetCommState(hCom, &dcb ) ; //读串口原来的参数设置 
dcb.BaudRate = 115200; 
dcb.ByteSize =8; 
dcb.Parity = NOPARITY; 
dcb.StopBits = ONESTOPBIT ;
dcb.fBinary = TRUE ;
dcb.fParity = FALSE; 
dcb.fRtsControl = RTS_CONTROL_HANDSHAKE; // 流控制打开

解决方案 »

  1.   

    原来丢的都是0x0d, 0x0a,回车换行
    哈哈哈,我代码如下,怎么解决这个问题
    hCom = CreateFile("COM2",GENERIC_READ | GENERIC_WRITE,
    0,
    NULL,
    OPEN_EXISTING,
    //FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,
    FILE_ATTRIBUTE_NORMAL,
    NULL); if(hCom == INVALID_HANDLE_VALUE) 
    return 0;    SetupComm( hCom, 4096, 4096 ) ;
        PurgeComm( hCom, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR ) ; COMMTIMEOUTS CommTimeOuts ; 
        CommTimeOuts.ReadIntervalTimeout = 0xFFFFFFFF ;
        CommTimeOuts.ReadTotalTimeoutMultiplier = 0; 
        CommTimeOuts.ReadTotalTimeoutConstant = 1000; // 读取数据延时的时间 
    CommTimeOuts.WriteTotalTimeoutMultiplier = 0;
    CommTimeOuts.WriteTotalTimeoutConstant = 1000 ; SetCommTimeouts( hCom, &CommTimeOuts ) ;//设置读写操作所允许的超时  DCB dcb ; 
    GetCommState(hCom, &dcb ) ; //读串口原来的参数设置 
    dcb.BaudRate = 115200; 
    dcb.ByteSize =8; 
    dcb.Parity = NOPARITY; 
    dcb.StopBits = ONESTOPBIT ;
    dcb.fBinary = TRUE ;
    dcb.fParity = FALSE; 
    dcb.fRtsControl = RTS_CONTROL_HANDSHAKE;
    SetCommState(hCom, &dcb ) ;
      

  2.   

    unsigned int ReadUart(byte* buf)
    {
    unsigned long len; ReadFile(hCom, buf, 1024, &len, NULL);

    return len;
    }