我在写关于串口通信的程序,在程序中,我一开始打开了com2口,

BYTE bstr[3] = {'A','T','\r'};
DWORD dwBytesTransferred=0;
WriteFile(hComm,bstr,3,&dwBytesTransferred,0);
//这里dwBytesTransferred==3了
char buff[1024];
ret = ReadFile(m_pSerialCom->hComm,buff,1024,&dwBytesTransferred,0);
到这里就没有返回了~一直在读~
为什么会读不出数据呢?
我用超级终端方式输入AT回车后
是有OK返回的啊!

解决方案 »

  1.   

    首先,你如果是用异步方式打开串口的话,你等待字符事件是否是使用WaitCommEvent
    如果是,你是否是判断EV_RXFLAG,这样你就要确定你的dcb.EvtChar是否和你接收的最后一个一样了,如果不一样肯定度不出来,你可以用EV_RXCHAR来取字符,只要串口接收到字符就会响应消息了
      

  2.   

    我没有用MScomm控件,我是直接用的windows API
      

  3.   

    说明你发出去的不是AT,还有注意你的串口是不是正常打开,设置是否正确,hComm和m_pSerialCom->hComm是否是同一个串口设备句柄。
      

  4.   

    串口正常打开了!返回值也是正常的了~ 
    我用程序发送的那个AT后,不能ReadFile到文件
    我停了程序后,打开超级终端,连上后就会收到我发的信息和内容了~
    说明我发的是正确的AT
      

  5.   

    方法有2:
    1. ReadFile(m_pSerialCom->hComm,buff,4,&dwBytesTransferred,0); 只读4个
    2. 设置超时结构为立即返回,看看MSDN的COMMTIMEOUTS结构
      

  6.   

    SetCommState()中的
    typedef struct _DCB {  DWORD DCBlength;  DWORD BaudRate;  DWORD fBinary  :1;  DWORD fParity  :1;  DWORD fOutxCtsFlow  :1;  DWORD fOutxDsrFlow  :1;  DWORD fDtrControl  :2;  DWORD fDsrSensitivity  :1;  DWORD fTXContinueOnXoff  :1;  DWORD fOutX  :1;  DWORD fInX  :1;  DWORD fErrorChar  :1;  DWORD fNull  :1;  DWORD fRtsControl  :2;  DWORD fAbortOnError  :1;  DWORD fDummy2  :17;  WORD wReserved;  WORD XonLim;  WORD XoffLim;  BYTE ByteSize;  BYTE Parity;  BYTE StopBits;  char XonChar;  char XoffChar;  char ErrorChar;  char EofChar;  char EvtChar;  WORD wReserved1;
    } DCB;
    有关,我改了一部分就可以收到了~多谢  smallsword(随风)