MFC 串口访问单片机,并提取数据保存,该怎么处理
MFC 串口访问单片机,并提取数据保存
OS:Windows7
环境:Visual Studio 2010 VC++ MFC Application
问题:串口访问单片机,并提取数据保存。
老师说,MUC方面已经是设置好的了。
只要我编写读写程序就直接可以读写。
发送{0x02,0x56,0x20,0x20,0x0D,0x0A}
这个MCU就应该返回Version数据。
我用仪器测试了,我的代码,连发送都没成功。
怎么才能发送和接受成功?
帮我看看代码吧。是新手,拜托了。
用下面的函数来调用
------解决方案--------------------
OS:Windows7
环境:Visual Studio 2010 VC++ MFC Application
问题:串口访问单片机,并提取数据保存。
老师说,MUC方面已经是设置好的了。
只要我编写读写程序就直接可以读写。
发送{0x02,0x56,0x20,0x20,0x0D,0x0A}
这个MCU就应该返回Version数据。
我用仪器测试了,我的代码,连发送都没成功。
怎么才能发送和接受成功?
帮我看看代码吧。是新手,拜托了。
- C/C++ code
BOOL Comm::OpenComm(char * pPort, int nBaudRate, int nParity, int nByteSize, int nStopBits) { DCB dcb; // 串口控制块 COMMTIMEOUTS timeouts = { // 串口超时控制参数 100, // 读字符间隔超时时间: 100 ms 1, // 读操作时每字符的时间: 1 ms (n个字符总共为n ms) 500, // 基本的(额外的)读超时时间: 500 ms 1, // 写操作时每字符的时间: 1 ms (n个字符总共为n ms) 100}; // 基本的(额外的)写超时时间: 100 ms m_hComm = CreateFile(pPort, // 串口名称或设备路径 GENERIC_READ | GENERIC_WRITE, // 读写方式 0, // 共享方式:独占 NULL, // 默认的安全描述符 OPEN_EXISTING, // 创建方式 0, // 不需设置文件属性 NULL); // 不需参照模板文件 if(m_hComm == INVALID_HANDLE_VALUE) return FALSE; // 打开串口失败 GetCommState(m_hComm, &dcb); // 取DCB dcb.BaudRate = nBaudRate; dcb.ByteSize = nByteSize; dcb.Parity = nParity; dcb.StopBits = nStopBits; SetCommState(m_hComm, &dcb); // 设置DCB SetupComm(m_hComm, 4096, 1024); // 设置输入输出缓冲区大小 SetCommTimeouts(m_hComm, &timeouts); // 设置超时 return TRUE; } // 关闭串口 BOOL Comm::CloseComm() { return CloseHandle(m_hComm); } int Comm::WriteVersion() { Comm send; DWORD dwNumWrite = 0; // 串口发出的数据长度 char senddate1[1024] = {0x02,0x56,0x20,0x20,0x0D,0x0A}; int wLength = 6; WriteFile(m_hComm,senddate1, wLength, &dwNumWrite, NULL); return (int)dwNumWrite; } // 读串口 int Comm::ReadVersion() { DWORD dwNumRead = 0; // 串口收到的数据长度 char readdate1[1024]; int rLength = 35; ReadFile(m_hComm, readdate1, rLength, &dwNumRead, NULL); AfxMessageBox(readdate1); return (int)dwNumRead; }
用下面的函数来调用
- C/C++ code
int check() { Comm com; com.OpenComm("COM5", 9600, 2, 8, 1); com.WriteVersion(); com.ReadVersion(); com.CloseComm(); }
------解决方案--------------------