2013-10-17 71 views
0

我已經給QSerialPortQExtSerialPort一個嘗試,似乎都不能正確支持250k。 QExtSerialPort似乎對它有支持,因爲它是一種列出的波特率類型,但是每當我使用它連接到電路板時,我所得到的就是像波特率設置不正確的垃圾數據。我已經驗證了所有其他設置,並且由於我已經使用miniterm對其進行了測試,因此主板可以工作超過250k。是否還有其他庫或者我應該嘗試與QExtSerialPort不同?Qt:串行庫,支持波特率250k

+0

你確定你在談論Miniterm,而不是Minicom或其他? Miniterm是OS/X上的一個輔助應用程序,它本身並不真正可用。如果你在談論Minicom,那麼我可以看看它的源代碼並與'QSerialPort'進行比較。 –

+0

對不起,我應該更準確,它是miniterm.py。 –

+0

你能準確的告訴我你下載你的miniterm.py的地方以及它的版本嗎?似乎有很多副本在那裏。 –

回答

0

我推測你的平臺必須是Linux,因爲在Windows上實際上只有一種設置波特率的方法,如果它不起作用,那麼它不適用於所有人。

存在舍入的問題。 QSerialPort代碼簡單地將波特率發生器的基準頻率除以波特率。這是一個整數除法,並用截斷完成。如果您選擇的波特率不完全支持硬件,則截斷可能會將其轉向無效方向 - 可能會有更大的更小的除數。您應該檢查波特率發生器的基本頻率並相應地選擇您的波特率。

在Linux上有設置波特率的many waysQSerialPort在引用的答案中不支持三種方法中的兩種方法。因此它不會支持偶爾支持三種方法中的兩種的驅動程序。我不知道有多少司機可能會遇到這個問題 - 畢竟,這可能是一個紅鯡魚。

請分享您的設備在Linux上使用的確切驅動程序是什麼,以及內核版本是什麼。我可以看看,並檢查這個驅動程序是否會導致目前QSerialPort代碼的問題。

爲了避免四捨五入問題,作爲臨時解決方法,你可以通過下面的技巧提取基本波特率發生器頻率:

// This must be at the very top of the .cpp file 
#define private public 
#include <QSerialPort> 
#include "private/qserialport_p.h" 
#include "private/qserialport_unix_p.h" 
#undef private 

QSerialPort * port; 
... 
// after the port was opened 
int baudBase = port->d_ptr->currentSerialInfo.baud_base; 

.pro文件,你需要QT += core-private,這是Qt的5。 Qt 4你需要有可用來源的Qt。

真正的修復當然屬於QSerialPort。我對QExtSerialPort一無所知。

+0

今天我會說這個。它工作正常,如果董事會是在波特率115k但20萬隻似乎是不行,所以至少有一個備份選項。 –

+0

只是我忘了提到的一件事,它是一個跨平臺的應用程序,這就是爲什麼我試圖使用Qt的QSerialPort將其抽象出來。目前在OS X上構建它。 –

+0

在OS X上,'QSerialPort'代碼也只使用兩種設置自定義波特率的方法之一,實際上它跳過了更簡單的方式,可能會受到更多驅動程序的支持。它使用'IOSSIOSPEED' ioctl,而不是在'termios'結構中使用'c_ispeed'和'c_ospeed'(可通過'cfsetpspeed(...)'訪問)。 –