单片机与计算机通信(上位机)

您所在的位置:网站首页 单片机如何与电脑通信 单片机与计算机通信(上位机)

单片机与计算机通信(上位机)

2024-07-15 05:42| 来源: 网络整理| 查看: 265

**程序说明:**VSwin32命令控制台程序 调用串口,可以根据自己需要配置串口,完成windows与单片机的数据传输。可作为开发参考使用。

直接先贴代码

//32与单片机通信,差不多成功了 #include #include #include #include using namespace std; HANDLE hComm; OVERLAPPED OverLapped; COMSTAT Comstat; DWORD dwCommEvents; char g_UartRxBuffer[6] = { 0x0d,1,2,3,4,0x0a }; //int g_UartRxBuffer[0] = 0x0d;// //int g_UartRxBuffer[1] = 99; //int g_UartRxBuffer[2] = 0; //int g_UartRxBuffer[3] = 0; //int g_UartRxBuffer[4] = 99; //int g_UartRxBuffer[5] = 0x0a; bool OpenPort(); //打开串口 bool SetupDCB(int rate_arg); //设置DCB bool SetupTimeout(DWORD ReadInterval, DWORD ReadTotalMultiplier, DWORD ReadTotalConstant, DWORD WriteTotalMultiplier, DWORD WriteTotalConstant); //设置超时 void ReciveChar(); //接收字符 bool WriteChar(char* szWriteBuffer, DWORD dwSend); //发送字符 bool OpenPort() { hComm = CreateFile(L"COM6",//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!此处更改com口!!!!!!!!!!!!!!! GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0); if (hComm == INVALID_HANDLE_VALUE) return FALSE; else return true; } bool SetupDCB(int rate_arg) { DCB dcb; memset(&dcb, 0, sizeof(dcb)); if (!GetCommState(hComm, &dcb))//获取当前DCB配置 { return FALSE; } dcb.DCBlength = sizeof(dcb); /* ---------- Serial Port Config ------- */ dcb.BaudRate = rate_arg; dcb.Parity = NOPARITY; dcb.fParity = 0; dcb.StopBits = ONESTOPBIT; dcb.ByteSize = 8; dcb.fOutxCtsFlow = 0; dcb.fOutxDsrFlow = 0; dcb.fDtrControl = DTR_CONTROL_DISABLE; dcb.fDsrSensitivity = 0; dcb.fRtsControl = RTS_CONTROL_DISABLE; dcb.fOutX = 0; dcb.fInX = 0; dcb.fErrorChar = 0; dcb.fBinary = 1; dcb.fNull = 0; dcb.fAbortOnError = 0; dcb.wReserved = 0; dcb.XonLim = 2; dcb.XoffLim = 4; dcb.XonChar = 0x13; dcb.XoffChar = 0x19; dcb.EvtChar = 0; if (!SetCommState(hComm, &dcb)) { return false; } else return true; } bool SetupTimeout(DWORD ReadInterval, DWORD ReadTotalMultiplier, DWORD ReadTotalConstant, DWORD WriteTotalMultiplier, DWORD WriteTotalConstant) { COMMTIMEOUTS timeouts; timeouts.ReadIntervalTimeout = ReadInterval; timeouts.ReadTotalTimeoutConstant = ReadTotalConstant; timeouts.ReadTotalTimeoutMultiplier = ReadTotalMultiplier; timeouts.WriteTotalTimeoutConstant = WriteTotalConstant; timeouts.WriteTotalTimeoutMultiplier = WriteTotalMultiplier; if (!SetCommTimeouts(hComm, &timeouts)) { return false; } else return true; } void ReciveChar() { bool bRead = TRUE; bool bResult = TRUE; DWORD dwError = 0; DWORD BytesRead = 0; char RXBuff; for (;;) { bResult = ClearCommError(hComm, &dwError, &Comstat); if (Comstat.cbInQue == 0) continue; if (bRead) { bResult = ReadFile(hComm, //通信设备(此处为串口)句柄,由CreateFile()返回值得到 &RXBuff, //指向接收缓冲区 1, //指明要从串口中读取的字节数 &BytesRead, // &OverLapped); //OVERLAPPED结构 std::cout


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3