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