紧急求助:WinCE串口奇怪的问题,能发不能收
在wince5.0,用的是EVC进行操作,初始化串口后,能发送数据,但是收不到数据,找了几天了,没有找到问题,请各位大侠帮忙分析一下,谢谢!
串口初始化函数
DWORD dwReadErrors;
COMSTAT cmState;
if(m_hComm==INVALID_HANDLE_VALUE)
{
m_hComm=CreateFile(Port,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);
if(m_hComm==INVALID_HANDLE_VALUE )
{
AfxMessageBox(_T("无法打开端口!请检查是否已被占用。"));
return FALSE;
}
GetCommState(m_hComm,&dcb);
dcb.BaudRate=BaudRate;
dcb.ByteSize=DataBits;
dcb.Parity=Parity;
dcb.StopBits=StopBits;
dcb.fParity=FALSE;
dcb.fBinary=TRUE;
dcb.fOutX=dcb.fInX=dcb.fTXContinueOnXoff=0;
dcb.fRtsControl=0;
dcb.fDtrControl=0;
//设置状态参数
//SetCommMask(m_hComm,EV_RXCHAR|EV_TXEMPTY);
SetupComm(m_hComm,16384,16384);
if(!SetCommState(m_hComm,&dcb))
{
AfxMessageBox(_T("无法按当前参数配置端口,请检查参数!"));
PurgeComm(m_hComm,PURGE_TXCLEAR|PURGE_RXCLEAR);
ClosePort();
return FALSE;
}
//设置超时参数
GetCommTimeouts(m_hComm,&CommTimeOuts);
CommTimeOuts.ReadIntervalTimeout=10;
CommTimeOuts.ReadTotalTimeoutMultiplier=1;
CommTimeOuts.ReadTotalTimeoutConstant=10;
CommTimeOuts.WriteTotalTimeoutMultiplier=0;
CommTimeOuts.WriteTotalTimeoutConstant=0;
if(!SetCommTimeouts(m_hComm,&CommTimeOuts))
{
AfxMessageBox(_T("无法设置超时参数!"));
PurgeComm(m_hComm,PURGE_TXCLEAR|PURGE_RXCLEAR);
ClosePort();
return FALSE;
}
PurgeComm(m_hComm,PURGE_TXCLEAR|PURGE_RXCLEAR);
ClearCommError(m_hComm,&dwReadErrors,&cmState);
return TRUE;
}
写函数:
DWORD CPSerialPort::WritePort(unsigned char *data,int length)
{
if(m_hComm==INVALID_HANDLE_VALUE)
{
return 0;
}
BOOL fWriteState;
DWORD dwBytesWritten=0;
fWriteState=WriteFile(m_hComm,data,length*sizeof(char),&dwBytesWritten,NULL);
return dwBytesWritten;
}
读函数
DWORD CPSerialPort::ReadPort(char *data,int length)
{
BOOL fReadState;
DWORD dwLength,dwBytesRead;
int TimeOutCount;
DWORD dwReadErrors;
COMSTAT cmState;
dwBytesRead=0;
TimeOutCount=0;
while(m_hComm!=INVALID_HANDLE_VALUE)
{
char* buf=new char[length];
fReadState=ReadFile(m_hComm,data,length,&dwLength,NULL);
if(!fReadState)
{
break;
}
else
{
dwBytesRead+=dwLength;
data+=dwLength;
}
if(dwBytesRead==((DWORD)length))
{
break;
}
if(dwLength!=0)
{
TimeOutCount=0;
}
else
{
TimeOutCount++;
Sleep(5);
}
if(TimeOutCount==8)
{
break;
}
}
return dwBytesRead;
}
我的程序调用
if (opencom==FALSE)
{
opencom=m_pSerial->OpenPort(portname,BaudRate,DataBits,StopBits,Parity,NULL,(DWORD)this);
if(!opencom)
{
AfxMessageBox(L"串口打开有错误,请确认硬件没有问题!");
}
}
for(i=0;i<IDNumber;i++)
{
gbrule->MakePackage(MeterAddr,DataID[i],&senddata[0]);
dwCharToWrite=strlen(senddata)+2;
buf[0]=0xFE;
buf[1]=0xFE;
for(j=0;j<14;j++)
buf[j+2]=senddata[j];
for(j=0;j<retrytimes;j++)
{
dwByteWritten = m_pSerial->WritePort(buf,dwCharToWrite);
if(dwByteWritten==0)
{
AfxMessageBox(_T("无法向端口写入数据!"));
}
//Sleep(10);
m_pSerial->ReadPort(recdata,dwCharToWrite+6);
if(gbrule->ParsePackage(MeterAddr,DataID[i],DataLen,DataType,recdata,&idvalue[i])==0)
{
break;
}
memset(recdata,'\0',sizeof(recdata));
}
和PC串口通讯总是收不到数据
更正:
不是收不到数据,是收到乱码?应该不是波特率不对吧,PC的串口都能收到正确的数据!