自动串行连接

Automatic Serial Connection

我正在制作一个 Qt Quick 项目,其中涉及使用 qserialport 创建串行连接,我想知道是否可以使串行设置(波特率、数据位、奇偶校验)自动适应串行设备。有人可以帮我解决这个问题吗?

这将是一项艰巨的任务。这可能是可能的,但 Qt 人员不推荐。以下是“FramingError”状态的 QSerialPort 文档中的内容:

Framing error detected by the hardware while reading data.
This value is obsolete. We strongly advise against using 
it in new code.

所有串行错误状态都有相同的警告。我不知道为什么它们会过时,什么会取代这些状态位,但如果你忽略警告,可能会有一个不雅的解决方案。

我已经在许多设备上实现了自动波特率,但每次我对硬件的访问都比 QML 允许的要好。最简单的方法是将计时器编程到引脚(MCU 的常见功能)以直接测量速率,但这在您的硬件中可能不可用。回退方法是监视串行端口错误并智能地响应它们。 “帧错误”和“奇偶错误”是最有用的。

我的算法首先将波特率设置为最高预期值。这样,错误就会很快出现,您可以更快地做出响应。如果我在那个速率下出现错误,那么我会尝试下一个较慢的波特率。我计算一段时间内的错误(大约十个字符周期),并使用阈值来确定是否更改速率,这样偶尔的错误就不会导致速率发生不必要的变化。

但我只改变了波特率,并且一直使用八个数据位,一个停止位和奇校验。尝试将所有这些额外变量添加到算法中会让人望而生畏。如果您可以忽略奇偶校验错误直到获得正确的速率,然后循环通过奇偶校验设置,那么也许您也可以适应奇偶校验。但是数据位数很难确定。

我知道这帮助不大,但我希望它能成为一个开始。祝你好运。