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



我已经尝试了QSerialPortQExtSerialPort,似乎都无法正确支持 250k。 QExtSerialPort似乎确实支持它,因为它是列出的波特类型,但每当我使用它连接到电路板时,我得到的只是垃圾数据,例如波特率设置不正确。我已经验证了所有其他设置,并且该板确实可以在 250k 以上工作,因为我已经使用 miniterm 对其进行了测试。还有其他库吗,或者我应该尝试一些不同的东西吗QExtSerialPort

我认为你的平台一定是Linux,因为在Windows上实际上只有一种方法可以设置波特率,如果它不起作用,那么它就不适合所有人。

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

Linux 上设置波特率的方法有很多种。 QSerialPort不支持引用答案中三种方法中的两种。因此,它不会支持某些碰巧仅支持三种方法中的两种的驱动程序。我不知道有多少司机可能会遇到这个问题——毕竟这可能是一条红鲱鱼。

请分享适用于您在 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一无所知.

相关内容

  • 没有找到相关文章

最新更新