微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

自动串行连接

如何解决自动串行连接

我正在制作一个 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 的常见功能)以直接测量速率,但这可能在您的硬件中不可用。回退方法是监视串行端口错误并智能地响应它们。 “帧错误”是最有用的,与“奇偶校验错误”一起使用。

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

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

我知道这没有多大帮助,但我希望这可以成为一个开始。祝你好运。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。