BOOL CTestCommandDlg::InitPort(CString strPortName)
{//创建串口句柄对象,重叠IO操作。
g_hCom=::CreateFile(strPortName,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,NULL);
if(INVALID_HANDLE_VALUE==g_hCom)
{ ::CloseHandle(g_hCom);
return false;
}
//设置串口缓冲大小
if(!::SetupComm(g_hCom,BUFFERSIZE,BUFFERSIZE))//BUFFERSIZE=1024;
return false;
//设置串口事件
if(!::SetCommMask(g_hCom,EV_RXCHAR))
return false;
//得到上一次串口状态
if(!::GetCommState(g_hCom,&g_dcbCom))
return false;
//修改DCB
g_dcbCom.fParity=1;
g_dcbCom.BaudRate=9600;//波特率
g_dcbCom.ByteSize=8;//数据位
g_dcbCom.StopBits=ONESTOPBIT;//停止位
g_dcbCom.Parity=NOPARITY;//校验位
//配置串口
if(!::SetCommState(g_hCom,&g_dcbCom))
return false;
//设置超时
memset(&g_ComTimeOuts,0,sizeof(g_ComTimeOuts));
g_ComTimeOuts.ReadIntervalTimeout=1000; //具体时间根据实际情况决定
g_ComTimeOuts.ReadTotalTimeoutMultiplier=50; //
g_ComTimeOuts.ReadTotalTimeoutConstant=500; //
g_ComTimeOuts.WriteTotalTimeoutMultiplier=500;//
g_ComTimeOuts.WriteTotalTimeoutConstant=1000; //
if(!::SetCommTimeouts(g_hCom,&g_ComTimeOuts))
return false;
//清空端口
::PurgeComm(g_hCom,PURGE_TXCLEAR|PURGE_RXCLEAR|PURGE_TXABORT|PURGE_RXABORT);
return true;
}
{//创建串口句柄对象,重叠IO操作。
g_hCom=::CreateFile(strPortName,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,NULL);
if(INVALID_HANDLE_VALUE==g_hCom)
{ ::CloseHandle(g_hCom);
return false;
}
//设置串口缓冲大小
if(!::SetupComm(g_hCom,BUFFERSIZE,BUFFERSIZE))//BUFFERSIZE=1024;
return false;
//设置串口事件
if(!::SetCommMask(g_hCom,EV_RXCHAR))
return false;
//得到上一次串口状态
if(!::GetCommState(g_hCom,&g_dcbCom))
return false;
//修改DCB
g_dcbCom.fParity=1;
g_dcbCom.BaudRate=9600;//波特率
g_dcbCom.ByteSize=8;//数据位
g_dcbCom.StopBits=ONESTOPBIT;//停止位
g_dcbCom.Parity=NOPARITY;//校验位
//配置串口
if(!::SetCommState(g_hCom,&g_dcbCom))
return false;
//设置超时
memset(&g_ComTimeOuts,0,sizeof(g_ComTimeOuts));
g_ComTimeOuts.ReadIntervalTimeout=1000; //具体时间根据实际情况决定
g_ComTimeOuts.ReadTotalTimeoutMultiplier=50; //
g_ComTimeOuts.ReadTotalTimeoutConstant=500; //
g_ComTimeOuts.WriteTotalTimeoutMultiplier=500;//
g_ComTimeOuts.WriteTotalTimeoutConstant=1000; //
if(!::SetCommTimeouts(g_hCom,&g_ComTimeOuts))
return false;
//清空端口
::PurgeComm(g_hCom,PURGE_TXCLEAR|PURGE_RXCLEAR|PURGE_TXABORT|PURGE_RXABORT);
return true;
}