gpt4 book ai didi

c++ - qt 5.2串口写问题与windows 7

转载 作者:可可西里 更新时间:2023-11-01 09:24:47 28 4
gpt4 key购买 nike

我们在硬件中使用了 FTDI 串口芯片。现在我们在 Linux 中有了工作代码,我们转移到 Windows 7。我们遇到了一些奇怪的问题。

问题:如果不运行其他执行此操作的控制台应用程序,我们无法将数据写入串行端口:

 serial.setPortName("COM3");
if (serial.open(QIODevice::ReadWrite)) {
bool success = serial.setBaudRate(QSerialPort::Baud9600) &
serial.setStopBits(QSerialPort::OneStop) &
serial.setDataBits(QSerialPort::Data8) &
serial.setParity(QSerialPort::NoParity) &
serial.setFlowControl(QSerialPort::NoFlowControl);
qDebug() << "Connected to usb device: " << (success ? "OK" : "FAIL");

while(true) {
if(serial.waitForReadyRead(-1)) {
QByteArray out = serial.readAll();
for(int i=0; i< out.length(); i++) {
qDebug() << (int) out[i];
}
}
}
serial.close();

所以它只是循环读取所有内容。硬件不发送任何东西,所以读取只是无限循环。关闭并运行我们的写入程序后,它运行正常。

char* input;
input = new char[size+3];
QByteArray bytearr;

for(int i=0;i<size+2;i++) {
input[i] = (char) package[i];
bytearr.append((unsigned char) package[i]);
}


QString serialPortName = "COM3";
QSerialPort serialPort;
serialPort.setPortName(serialPortName);
serialPort.open(QIODevice::ReadWrite);
serialPort.write(bytearr);
serialPort.flush();
serialPort.close();

运行后 read everything 有效,但不 read all 则无效。我们做错了什么?谢谢。

最佳答案

我们在使用带有 FTDI 芯片的电路板时遇到了类似的问题。我们尝试以 19200 波特/秒的速度写入字节,但实际速度约为 1200 波特/秒(使用示波器观察)。问题是在写入一个字节后立即关闭串口。在关闭端口之前等待使用 QThread::msleep(5) 有帮助。看起来,设备在关闭操作期间进行了重置或其他操作,并且发送的最新字节带有错误的波特率和其他参数。

关于c++ - qt 5.2串口写问题与windows 7,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21161259/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com