QSerialPort进行usb开发demo
时间: 2023-08-15 13:17:40 浏览: 181
C# WINDOWS USB 开发DEMO
这是一个简单的使用Qt的QSerialPort类进行USB串口通信的示例。假设已经连接了一个USB串口设备,并且已知其端口号(例如COM1或/dev/ttyUSB0)。以下代码将向该设备发送一条消息并读取其响应。
```c++
#include <QCoreApplication>
#include <QtSerialPort/QSerialPort>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QSerialPort serialPort;
serialPort.setPortName("/dev/ttyUSB0"); //设置端口号
serialPort.setBaudRate(QSerialPort::Baud9600); //设置波特率
serialPort.setDataBits(QSerialPort::Data8); //设置数据位
serialPort.setParity(QSerialPort::NoParity); //设置奇偶校验
serialPort.setStopBits(QSerialPort::OneStop); //设置停止位
serialPort.setFlowControl(QSerialPort::NoFlowControl); //设置流控制
if (!serialPort.open(QIODevice::ReadWrite)) { //打开串口
qDebug() << QObject::tr("Failed to open port %1, error: %2")
.arg(serialPort.portName())
.arg(serialPort.errorString());
return 1;
}
QByteArray requestData = "Hello, world!"; //发送的数据
qint64 bytesWritten = serialPort.write(requestData); //写入数据
if (bytesWritten == -1) {
qDebug() << QObject::tr("Failed to write to port %1, error: %2")
.arg(serialPort.portName())
.arg(serialPort.errorString());
return 1;
} else if (bytesWritten != requestData.size()) {
qDebug() << QObject::tr("Failed to write all the data to port %1, error: %2")
.arg(serialPort.portName())
.arg(serialPort.errorString());
return 1;
}
if (!serialPort.waitForBytesWritten(1000)) { //等待写入完成
qDebug() << QObject::tr("Operation timed out or an error occurred for port %1, error: %2")
.arg(serialPort.portName())
.arg(serialPort.errorString());
return 1;
}
if (!serialPort.waitForReadyRead(1000)) { //等待读取完成
qDebug() << QObject::tr("Operation timed out or an error occurred for port %1, error: %2")
.arg(serialPort.portName())
.arg(serialPort.errorString());
return 1;
}
QByteArray responseData = serialPort.readAll(); //读取响应数据
while (serialPort.waitForReadyRead(50)) //读取剩下的数据
responseData += serialPort.readAll();
qDebug() << "Response: " << responseData;
serialPort.close(); //关闭串口
return a.exec();
}
```
需要注意的是,如果USB串口设备没有正确连接或者没有响应,则上述代码可能会超时并抛出错误。因此,在实际使用中,应该根据实际情况进行错误处理。
阅读全文