0

Qt4 用の qtserialport をビルドし、9600 ボー、8 データ ビット、1 ストップ ビット、パリティなしで情報を送信するデバイスからのデータをログに記録するコンソール アプリケーションを作成しました。これはシリアル通信のデフォルトだと思います。ポートを正しく開き、期待どおりにデータをログに記録しましたが、アプリケーションを閉じるか、コンピューターの電源を切ってアプリケーションを再起動しようとすると、ポートは開きますが、「framingError」が表示されます。アプリケーションを閉じて、ハイパーターミナルを使用してポートを開くと、ポートが正しく開き、コンソール アプリケーションをエラーなしで開くことができます。フレーミング エラーはパリティを使用して解決できると読みましたが、どの設定を使用すればよいか、それが私の問題の解決策であるかさえわかりません。

    //constructor
    MyApp::MyApp()
    {
         QSerialPort *serialPort = new QSerialPort(this);

            connect(serialPort,
                    SIGNAL(error(QSerialPort::SerialPortError)),
                    this,SLOT(serialError(QSerialPort::SerialPortError)));

            serialPort->setPortName("COM1");
            serialPort->setBaudRate(9600,QSerialPort::Input);
            serialPort->setStopBits(QSerialPort::OneStop);
            serialPort->setParity(QSerialPort::NoParity);
            serialPort->setDataBits(QSerialPort::Data8);
            serialPort->setFlowControl(QSerialPort::NoFlowControl);

            if(serialPort->open(QIODevice::ReadOnly))
            {
                qDebug() << "Serial port opened at serialPort->portName();
            }
    }

    ...

    void myApp::serialError(QSerialPort::SerialPortError error)
    {
        if(error != QSerialPort::NoError)
        {
            QMetaEnum metaEnum =  QSerialPort::staticMetaObject.enumerator(
            QSerialPort::staticMetaObject.indexOfEnumerator("SerialPortError"));

            QString errStr(metaEnum.valueToKey(error));

            qDebug() << errStr;
        }
    }
4

3 に答える 3

1

UART がストップ ビットを検出しないと、フレーミング エラーが生成されます。一般的な原因は次のとおりです。

  • デバイスの送信中にボーレートが間違っているか、ボーレートが変更されている
  • デバイスは、予想よりも多くのデータまたはパリティ ビットを送信します
  • ストップビット数の不一致
  • デバイスの電源を入れた状態でケーブルを再接続する
  • ポートが開いているときにソフトウェアがエラー状態をクリアしない

ポートを開いた後にフレーミング エラーが 1 つしか発生しない場合は、無視してください。デバイスが送信している間、常に発火する場合は、ポートの設定が間違っています。QSerialPort::NoFlowControl は避けてください。ほとんどのデバイスはハードウェア ハンドシェイクを実装しています。ハイパーターミナルのようなプログラムは、常にオンにします。デバイスがどのように構成されているかを知っている人に尋ねると、推測をやめることができます。

于 2013-04-17T00:06:52.570 に答える