我已经尝试了QSerialPort
和QExtSerialPort
,似乎都无法正确支持 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
一无所知.