-1

こんにちは、私は Qt のシリアル通信に qextserialport を使用しています。何が起こるかというと、コントローラー ボードからデータを送信するとデータが読み取られますが、ボードの電源をオフにしてもデータの読み取りが続行されます。つまり、読み取りが非常に遅く、ボードの電源をオフにしても、端末で読み取るバイトがまだ残っています。この問題を解決するにはどうすればよいですか??

ボードの電源を切ると、バイトの読み取りが停止するはずです。

4

1 に答える 1

0

シリアル ポートのパリティ チェックが正しく構成されていません

  • すでに別のシリアル ターミナル ソフトウェアを試して、これが正常に動作する場合は、ドライバ qextserialport の構成が間違っています。

このタイプの初期化に従う必要があります。

  ...

  bool uart_openPort(QString name, PortSettings *setting) {

        static bool port_created = false;

        if (port_created == false) {
            port = new QextSerialPort();
            port->setQueryMode(QextSerialPort::Polling);
            port_created = true;
        }

        if (connection_ready) {
            uart_closePort();
            connection_ready = false;
        }

        port->setPortName(name);
        port->setBaudRate (setting->BaudRate);
        port->setDataBits(setting->DataBits);
        port->setStopBits(setting->StopBits);
        port->setParity(setting->Parity);
        port->setFlowControl(setting->FlowControl);
        port->setTimeout(1);

        if (port->open(QextSerialPort::ReadWrite)) {
            connection_ready = true;
            qDebug("INFORMATION (UART OPEN PORT): Port open Successful!");

        } else {
            connection_ready = false;
            qDebug("CRITICAL (UART OPEN PORT): Error open Port!");
        }

        return(connection_ready);
    }

    ...

または、このモードでいくつかの固定パラメーターを使用できます

...

    port->setPortName("/dev/ttyUSB0");
    port->setBaudRate(BAUD9600);
    port->setDataBits(DATA_8);
    port->setStopBits(STOP_1);
    port->setParity(PAR_NONE);
    port->setFlowControl(FLOW_OFF);
    port->setTimeout(1);

... 
  • どのソフトウェアでも適切に機能しない場合は、ボードのコントロール パリティ設定を確認する必要があります。

  • ソフトウェアによって生成された UART フローを使用している場合は、シリアル シーケンスで、スタート ビットが適切に配置され、送信の最後に 1 バイトが 1 つのストップ ビットに十分なスペースであることを確認します。

于 2012-12-21T20:02:37.827 に答える