我們在我們的硬件中使用FTDI串行端口CHIP。現在我們在Linux中有工作代碼,並轉移到了Windows 7.我們遇到了一些奇怪的問題。qt 5.2使用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();
運行後讀取一切正常,但沒有閱讀全部,它不會工作。我們做錯了什麼? 謝謝。
你寫的應用程序(用標準C POSIX)和QtSerialPort閱讀器?是嗎?你將移動到Windows的哪一部分?你是「OK」還是「FAIL」?此外,你永遠不會離開永遠while循環...因爲沒有休息或轉到...爲什麼你不檢查設置的返回值,看看他們是否成功?如果我確定這是正確的,那將是首先要做的事情。另外,你的代碼不完整,請修改。另外,你是否嘗試過從git運行sync writer和reader例子? – lpapp
也,您使用'&'而不是「&&」。它可能在布爾型的這種特殊情況下工作,但請注意,您正在按位進行AND操作,而不是邏輯操作。 – lpapp
是的,它是讀寫器的C posix和QtSerialPort。兩種不同的控制檯應用 按位我試圖做的,所以一個&是okey。 – user257980