2013-10-17 50 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(...)'访问)。 –