我们在硬件中使用了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 后一切正常,但没有运行 read all 就无法工作。我们做错了什么吗? 谢谢。