0

私は両方QSerialPortQExtSerialPort試してみましたが、どちらも 250k を正しくサポートできないようです。QExtSerialPortリストされているボータイプであるため、サポートされているようですが、ボードに接続するために使用するたびに、ボーレートが正しく設定されていないなどのジャンクデータが返されます。他のすべての設定を確認しましたが、miniterm を使用してテストしたところ、ボードは 250k 以上で動作します。他のライブラリはありますか、それとも別のことを試す必要がありますQExtSerialPortか?

4

1 に答える 1

0

Windows ではボーレートを設定する方法が実際には 1 つしかなく、それが機能しない場合は、すべての人に機能するとは限らないため、プラットフォームは Linux に違いないと思います。

丸めの問題があります。QSerialPortコードは、ベース ボー ジェネレーター クロックをボーレートで除算するだけです。これは整数除算であり、切り捨てで行われます。選択したボーレートがハードウェアで正確にサポートされていない場合、切り捨てによって無効な方向にシフトされる可能性があります。より小さなものではなく、より大きなより近い除数があった可能性があります。ボー ジェネレータの基本周波数を確認し、それに応じてボー レートを選択する必要があります。

Linux でボーレートを設定するには、さまざまな方法があります。QSerialPort引用された回答の3つの方法のうち2つの方法はサポートされていません。したがって、たまたま 3 つの方法のうち 2 つしかサポートしていない一部のドライバーはサポートされません。何人のドライバーがその問題に苦しむ可能性があるのか​​ わかりません.結局のところ、それはニシンかもしれません.

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

于 2013-10-18T01:53:47.193 に答える