Qt:支持波特率250k的串行库

时间:2013-10-17 19:48:29

标签: qt serial-port qextserialport qtserialport

我尝试了QSerialPortQExtSerialPort,但似乎都无法正确支持250k。 QExtSerialPort确实似乎支持它,因为它是列出的波特类型,但每当我用它连接到一块板时,我得到的全部是垃圾数据,如波特率设置不正确。我已经验证了所有其他设置,并且当我使用miniterm测试时,电路板的工作量超过了250k。是否有其他图书馆,或者我应该尝试与QExtSerialPort不同的其他图书馆?

1 个答案:

答案 0 :(得分:0)

我认为您的平台必须是Linux,因为在Windows上实际上只有一种设置波特率的方法,如果它不起作用,那么它对每个人都不起作用。

存在四舍五入的问题。 QSerialPort代码简单地用波特率划分基本波特率发生器时钟。这是一个整数除法,用截断来完成。如果硬件不完全支持您选择的任何波特率,则截断可能会将其移向无效方向 - 可能存在更大但不小的更近的除数。您应该检查波特率发生器基频并相应地选择波特率。

Linux上有many ways个设置波特率。 QSerialPort在引用的答案中不支持三种方法中的两种方法。因此,它不会支持一些恰好只支持三种方法中的两种的驱动程序。我不知道有多少司机可能会遇到这个问题 - 毕竟它可能是一个红色的鲱鱼。

请分享Linux上用于设备的确切驱动程序,以及内核版本是什么。我可以查看一下这个驱动程序是否会导致当前QSerialPort代码出现问题。

为了避免舍入问题,作为临时解决方法,您可以通过以下hack提取基本波特率生成器频率:

// 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一无所知。