[Qt开发]一口气搞懂串口通信 您所在的位置:网站首页 stm32f1串口自举命令 [Qt开发]一口气搞懂串口通信

[Qt开发]一口气搞懂串口通信

2023-06-29 04:47| 来源: 网络整理| 查看: 265

一、关于串口通信:

Qt的确有自己的串口通信类,就是QSerialPort,但是我们在使用过程中因为要更加定制化的使用串口通信类减小开发的难度,所以我们会提供一个串口通信类,也就是这个SerialPortHelper类。

首先我们要知道什么是串口,串口通信就是机器和系统之间的一个通信协议,你可以将它理解为共享内存,可以根据需要向其中写入内容,然后在需要的时候从中读取数据。不过需要注意的是,在Qt的封装下,你不需要知道串口内的数据是否是给你的,还是你发的,因为统统都是你的。

串口通信什么?

大概了解了一下什么是串口通信,那么我们来看一下串口通信的通信手册大概是什么样。

image

由上我们可以看到,串口通信消息大概就是一串16进制的字符按照特定的规定,然后向串口中写入这些消息就可以了。比如前面这三个41 54 64这三个数字就是固定写死的,而36则是这个协议的通信号,是用于区分不同消息码的,比如上述这条指令的消息码是36,另外一条消息然后后续标了颜色的内容就是实际上这条消息码中具体携带的数据,这个就不过多介绍了。

不过需要注意的是,硬件返回的数据或者向硬件发送的数据不一定都是像人一样的从左到右,有些命令特别是偏长的命令很多都是要求从右到左,也就是常说的小端序,低字节在前高字节在后,比如:

image

给出两端函数示例(实际上这两个函数在Qt中都有,这里只是展示一下具体是什么意思而已):

//将接收到的小端字节序数据转换为无符号整数 QString SerialPortHelper::getLittleEnd(const QByteArray& data) { if (data.size() > 8) return ""; qulonglong result = 0; for (int i = 0; i < data.size(); ++i) { qulonglong tmp = (uchar)data[i]; result += tmp = 1; // Shift right and XOR 0xA001 crc ^= 0xA001; } else // Else LSB is not set { crc >>= 1; // Just shift right } } } //高低字节转换 crc = ((crc & 0x00ff) > 8); //qDebug() > 8; crcBuf[1] = crc; }

最后两位就是固定的了,用两个固定搭配来分割各种字符段

串口通信使用流程

我们一般使用串口类,主要流程如下:

1.获得基本参数:我们需要获得这个串口的一些基本参数,其中包含内容如下:

QString portName = "NULL"; int baudRate = 921600; QSerialPort::DataBits dataBits = QSerialPort::Data8; QSerialPort::StopBits stopBits = QSerialPort::OneStop; QSerialPort::Parity parity = QSerialPort::NoParity;

我们需要在启动这个端口调用的时候设置好这些属性,才能获取正确的COM口消息和发送消息,给出一个启动串口的示例:

serialPort = new QSerialPort(); serialPort->setPortName(param.portName); if (serialPort->open(QIODevice::ReadWrite)) { serialPort->setBaudRate(param.baudRate); serialPort->setDataBits(param.dataBits); serialPort->setStopBits(param.stopBits); serialPort->setParity(param.parity); //通知串口接收到消息的信号函数 connect(serialPort, &QSerialPort::readyRead, this, &CarControlModel::dataReceive); qDebug() readAll(); analysisData(buffer); } } void CarControlModel::analysisData(const QByteArray& dataArr) { //消息断开的情况 qDebug()


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有