c++ - QSerialPort 能否读取超过 512 字节的数据?

标签 c++ qt serial-port

我想使用 QSerialPort 来读取从设备传输的数据。设备每次发送一帧4000个数据字节。我尝试使用以下简单代码

QSerialPort *serialPort;
char receivedData[4000];
int numRead = 0;

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    /* Initialize serial port*/
    serialPort = new QSerialPort(this);
    QString portName = "COM6";
    qint32 baudRate = 460800;
    serialPort->setPortName(portName);
    serialPort->setBaudRate(baudRate);
    serialPort->setDataBits(QSerialPort::Data8);
    serialPort->setParity(QSerialPort::NoParity);
    serialPort->setStopBits(QSerialPort::OneStop);
    serialPort->setFlowControl(QSerialPort::NoFlowControl);
    serialPort->setReadBufferSize(4000);
    if (!serialPort->open(QIODevice::ReadOnly)) {
        qDebug() << "Cannot open comport";
    }
    connect(serialPort, SIGNAL(readyRead()), this, SLOT(serialReceived()));
}

void MainWindow::serialReceived()
{
    numRead = serialPort->read(receivedData, 4000);
    serialPort->flush();
}

问题是:一直显示只读取了512个数据字节。如何读取整个 4000 字节的数据帧? (当我使用 Matlab 读取这个 4000 字节的帧时,它工作正常)

最佳答案

没有限制,但您不一定会在单个 block 中接收所有数据。 您必须继续收听,直到达到您正在等待(或超时)的字节数。

void MainWindow::serialReceived()
{
    receivedData.append(serialPort->readAll());
    if(receivedData.size() >= 4000) {
       // we're full
    }
}

关于c++ - QSerialPort 能否读取超过 512 字节的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36592248/

相关文章:

c++ - 散列不是很长的字符串 vector (url)的最佳方法是什么?

c++ - 如何以编程方式在 Qt 中获取网络管理器设备名称?

c++ - 在 Qt 中使用字符串创建 QVariantMap

c++ - 在QT中连接到串口

c++ - std::stringstream 和 str 方法

c++ - 如何将系统事件从驱动程序发送到应用层?

c - 锁定 Linux 串口

c - 串行端口输入缓冲区的字节数

c++ - 连接到 Outlook 事件

qt - 从 QT 中的 QStandardItemModel 按文本删除项目