2,640
社区成员
发帖
与我相关
我的任务
分享
m_hCom = CreateFile(com, GENERIC_READ | GENERIC_WRITE, /*FILE_SHARE_WRITE|FILE_SHARE_READ*/0, NULL, OPEN_EXISTING, /*FILE_FLAG_OVERLAPPED*/0, NULL); //FILE_SHARE_WRITE|FILE_SHARE_READ
if (m_hCom == INVALID_HANDLE_VALUE)
{
int a = GetLastError();
CString errStr;
errStr.Format("open failed! error code is:%d\n",a);
AfxMessageBox(errStr);
return FALSE;
}
//设置读超时
COMMTIMEOUTS timeouts;
GetCommTimeouts(m_hCom, &timeouts);
timeouts.ReadIntervalTimeout = MAXDWORD; //2017/8/8 added
timeouts.ReadTotalTimeoutMultiplier = 5000; //2017/8/8 added
timeouts.ReadTotalTimeoutConstant = 60000;
timeouts.WriteTotalTimeoutMultiplier = 0;
timeouts.WriteTotalTimeoutConstant = 0;
SetCommTimeouts(m_hCom, &timeouts);
//设置读写缓冲区大小
static const int nZhenMax = 32768;
if (!SetupComm(m_hCom, nZhenMax, nZhenMax))
{
AfxMessageBox("SetupComm() failed!");
CloseHandle(m_hCom);
return FALSE;
}
//设置串口配置信息
DCB dcb;
if (!GetCommState(m_hCom, &dcb))
{
AfxMessageBox("GetCommState() failed!");
CloseHandle(m_hCom);
return FALSE;
}
dcb.DCBlength = sizeof(DCB);
dcb.BaudRate = baud; //波特率为115200
dcb.Parity = parity; //校验方式为无校验0
dcb.ByteSize = databit; //数据位为8位
dcb.StopBits = stopbit; //停止位为1位
if (!SetCommState(m_hCom, &dcb))
{
AfxMessageBox("SetCommState() failed!");
CloseHandle(m_hCom);
return FALSE;
}
//清空缓冲
PurgeComm(m_hCom, PURGE_RXCLEAR|PURGE_TXCLEAR);
//清除错误
DWORD dwError;
COMSTAT cs;
if (!ClearCommError(m_hCom, &dwError, &cs))
{
AfxMessageBox("ClearCommError() failed!");
CloseHandle(m_hCom);
return FALSE;
}
//设置串口监听事件
SetCommMask(m_hCom, EV_RXCHAR);
return TRUE;