QT串口读取Serial->readAll()踩过的坑

博主在制作一个QT软件与单片机进行数据传输(16进制的数据,结束标志是\r\n)的时候数据一直拿不完全。经过多日的研究终于成功了。

坑一:

QByteArray data;
data = Serial->readAll();//拿串口中的数据

因为串口设置的是8位数据位,在这里插入图片描述因此拿到的数据是32位,但是博主想要的是“00 10 00 00 00 00 01 00 28 00 0A 01 01 01 01 00 \r\n”。但是QT使用qDebug()拿到是,如图(这样的数据不方便处理):
在这里插入图片描述
修改的代码如下:

QByteArray data;
data = Serial->readAll();//拿串口中的数据
temp.append(data);
if(temp.contains('\n'))//只有等到\n的时候才能进入
{
		xxxx//
		temp.clear();
 }

这样处理后拿到的数据是:如图
在这里插入图片描述
坑二
单片机发送数据的时候需要加一个延时函数,不然还是会出现类似坑一的问题。

未完待续

你可能感兴趣的:(QT,for,windows)