0

我都试过了QSerialPortQExtSerialPort似乎都不能正确支持 250k。QExtSerialPort似乎确实支持它,因为它是列出的波特类型,但是每当我使用它连接到板时,我得到的都是垃圾数据,例如波特率设置不正确。我已经验证了所有其他设置,并且我已经使用 miniterm 对其进行了测试,因此该板确实可以工作超过 250k。有没有其他图书馆或者我应该尝试不同的东西QExtSerialPort

4

1 回答 1

0

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

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

在 Linux 上有多种设置波特率的方法。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

于 2013-10-18T01:53:47.193 回答