windows C++ 串口通信基本代码
发布时间:2020-12-13 21:05:41 所属栏目:Windows 来源:网络整理
导读:HANDLE hCom = CreateFile(L"\.COM4",GENERIC_READ | GENERIC_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);if (hCom == INVALID_HANDLE_VALUE){DWORD dwErr = GetLastError();char cData[2048] = {0};sprintf(cData,"打开串口失败:%d",dwErr);O
HANDLE hCom = CreateFile(L"\.COM4",GENERIC_READ | GENERIC_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0); if (hCom == INVALID_HANDLE_VALUE){ DWORD dwErr = GetLastError(); char cData[2048] = {0}; sprintf(cData,"打开串口失败:%d",dwErr); OutPut(NORMAL_LOG,cData); return false; } //设置读超时 COMMTIMEOUTS timeouts; GetCommTimeouts(hCom,&timeouts); timeouts.ReadIntervalTimeout = 0; timeouts.ReadTotalTimeoutMultiplier = 0; timeouts.ReadTotalTimeoutConstant = 60000; timeouts.WriteTotalTimeoutMultiplier = 0; timeouts.WriteTotalTimeoutConstant = 0; SetCommTimeouts(hCom,&timeouts); //设置读写缓冲区大小 static const int g_nZhenMax = 32768; if (!SetupComm(hCom,g_nZhenMax,g_nZhenMax)){ DWORD dwErr = GetLastError(); char cData[2048] = { 0 }; sprintf(cData,"设置读写缓冲区大小失败:%d",cData); CloseHandle(hCom); return false; } //设置串口配置信息 DCB dcb; if (!GetCommState(hCom,&dcb)){ DWORD dwErr = GetLastError(); char cData[2048] = { 0 }; sprintf(cData,"设置串口配置信息失败:%d",cData); CloseHandle(hCom); return false; } dcb.DCBlength = sizeof(DCB); dcb.BaudRate = 9600;//波特率为9600 dcb.Parity = 0;//校验方式为无校验 dcb.ByteSize = 8;//数据位为8位 dcb.StopBits = ONESTOPBIT;//停止位为1位 if (!SetCommState(hCom,cData); CloseHandle(hCom); return false; } //清空缓冲 PurgeComm(hCom,PURGE_RXCLEAR | PURGE_TXCLEAR); //清除错误 DWORD dwError; COMSTAT cs; if (!ClearCommError(hCom,&dwError,&cs)){ CloseHandle(hCom); return false; } //设置串口监听事件 SetCommMask(hCom,EV_RXCHAR); DWORD dwWrite = 0; unsigned char btCMD_OpenDoor[4] = { 0xa0,0x01,0xa2 }; unsigned char btCMD_CloseDoor[4] = { 0xa0,0x00,0xa1 }; while (true){ if (WaitForSingleObject(pMain->m_hCLOSE_ALL_THREAD,10) == WAIT_OBJECT_0){ break; } WriteFile(hCom,btCMD_OpenDoor,4,&dwWrite,NULL); Sleep(1000); WriteFile(hCom,btCMD_CloseDoor,NULL); } WriteFile(hCom,NULL); CloseHandle(hCom); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容