|
wince 与PC机通信问题 求解
在wince上MFC做了一个接收数据的对话框,发现与PC机通信串口不能用,有几个问题:1、在PC机上用在网上下的调试助手往wince上发数据,不能接收。配置都没有错,用的波特率是9600.2、在CreatFile时发现不能用UART0对应的COM1: 而COM2:能CreateFile 这是为什么?天嵌的高手帮帮我这个新手
PortDCB.DCBlength = sizeof (DCB);
//得到端口的默认设置信息
GetCommState (m_hSerial, &PortDCB);
//改变DCB结构设置
PortDCB.BaudRate = CBR_9600; //波特率
PortDCB.fParity = FALSE; //无奇偶校验
PortDCB.fNull = TRUE; //设为TRUE将使串行驱动程序忽略收到的空字节
PortDCB.ByteSize = 8; //每字节的位数
PortDCB.Parity = NOPARITY; //无奇偶校验
PortDCB.StopBits = ONESTOPBIT; //每字节一位停止位
//根据DCB结构配置端口
if (!SetCommState (m_hSerial, &PortDCB))
{
dwError = GetLastError ();
//不能配置串行端口
MessageBox (_T("配置串口失败"), _T("错误"), MB_OK | MB_ICONWARNING);
return FALSE;
}
COMMTIMEOUTS CommTimeouts;
GetCommTimeouts(m_hSerial,&CommTimeouts);
CommTimeouts.ReadIntervalTimeout = 10/*MAXDWORD*/;
CommTimeouts.ReadTotalTimeoutMultiplier = 10;
CommTimeouts.ReadTotalTimeoutConstant = 10;
CommTimeouts.WriteTotalTimeoutMultiplier = 50;
CommTimeouts.WriteTotalTimeoutConstant = 100;
//创建一个从串口读取数据的线程
if (hReadThread = CreateThread (NULL, 0, (LPTHREAD_START_ROUTINE)ReadPortThread, this, 0, &dwThreadID))
{
}
//读数据线程
void ReadPortThread(LPVOID lpvoid)
{
CserialDlg * Dlg = (CserialDlg*)lpvoid;
BOOL fReadState;
DWORD dwCommModemStatus;
DWORD dwLength;
COMSTAT ComStat;
DWORD dwErrorFlags;
BYTE Byte;
char ReceiveBuf[10];
DWORD dwBytes;
int iCounter = 0;
while (Dlg->m_hSerial != INVALID_HANDLE_VALUE)
{
//等待串口的事件发生
WaitCommEvent (Dlg->m_hSerial, &dwCommModemStatus, 0);
if (dwCommModemStatus & EV_RXCHAR)
{
//Sleep(100);
ClearCommError(Dlg->m_hSerial,&dwErrorFlags,&ComStat);
//cbInQue返回输入缓冲区中的字符数
dwLength=ComStat.cbInQue;
if(dwLength>0)
{
//从串口读取数据
do
{
fReadState=ReadFile(Dlg->m_hSerial,&Byte,1,&dwBytes,NULL);
if(!fReadState)
{
//不能从串口读取数据
MessageBox(NULL,TEXT("无法读取数据"),TEXT("错误"),MB_OK);
}
if(dwBytes==1)
{
ReceiveBuf[iCounter++] = Byte;
if(iCounter == 10)
{
iCounter=0;
}
//赋给全局变量
strInChar=ReceiveBuf;
}
}while (dwBytes == 1);
}
}
GetCommModemStatus (Dlg->m_hSerial, &dwCommModemStatus);
}
}
|
|