MFC 串口通讯中接收到的数据不完整,被分成几个包

解决办法:
方法一.、在ReadFile 之前 先sleep一下,Sleep(200);//管用
参考链接
:我的数据缓冲区只有4个字节的数据,而我需要0xd个数据,数据不完整,在读取之前需要延时一下,再读取。
方法二、 使用环形缓冲区,
从环形缓冲区中取需要的数据,这个比方法一好,而且不漏数据。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
MFC,可以使用CSerialPort类来实现串口通信。首先定义两个结构体,一个用于发送数据,一个用于接收数据: ```C++ //发送数据结构体 struct SendData { int num; char data[10]; }; //接收数据结构体 struct ReceiveData { int num; char data[10]; }; ``` 然后,在MFC应用程序创建CSerialPort对象,设置串口参数并打开串口: ```C++ CSerialPort serial; serial.Open(2, 9600, 'N', 8, 1); ``` 其,第一个参数为串口号,第二个参数为波特率,第三个参数为校验位,第四个参数为数据位,第五个参数为停止位。 接下来,将发送数据结构体打成字节数组,通过串口发送: ```C++ SendData sendData = {1, "hello"}; BYTE buffer[sizeof(sendData)]; memcpy(buffer, &sendData, sizeof(sendData)); serial.Write(buffer, sizeof(sendData)); ``` 在接收数据时,先定义一个字节数组,接收串口传来的数据: ```C++ BYTE buffer[sizeof(ReceiveData)]; serial.Read(buffer, sizeof(ReceiveData)); ``` 然后将接收到的字节数组解接收数据结构体: ```C++ ReceiveData receiveData; memcpy(&receiveData, buffer, sizeof(receiveData)); ``` 这样就可以将发送数据结构体传送到另一个结构体上了。完整的代码如下: ```C++ //发送数据结构体 struct SendData { int num; char data[10]; }; //接收数据结构体 struct ReceiveData { int num; char data[10]; }; void CSerialPortTestDlg::OnBnClickedBtnSend() { CSerialPort serial; serial.Open(2, 9600, 'N', 8, 1); //发送数据 SendData sendData = {1, "hello"}; BYTE buffer[sizeof(sendData)]; memcpy(buffer, &sendData, sizeof(sendData)); serial.Write(buffer, sizeof(sendData)); //接收数据 BYTE buffer[sizeof(ReceiveData)]; serial.Read(buffer, sizeof(ReceiveData)); ReceiveData receiveData; memcpy(&receiveData, buffer, sizeof(receiveData)); //显示接收到的数据 CString str; str.Format(_T("num:%d, data:%s"), receiveData.num, receiveData.data); MessageBox(str); } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值