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