RS232ポートでRTSピンを切り替えると出力差が発生しないのはなぜですか?

RS232ポートでRTSピンを切り替えると出力差が発生しないのはなぜですか?

RS232信号のRTSまたはDTRピンを制御して出力のオン/オフ、リレーなどの切り替えを試みます。 DTRまたはRTSフラグをオンまたはオフにするスクリプトをCにしましたが、シリアルポートとターミナルアダプタの出力に違いはありません(下の画像を参照)。

ここに画像の説明を入力してください。

RS232の構造は次のとおりです。

ここに画像の説明を入力してください。

図に示すように、RTS信号はピン8にあり、「on」とマークしたときにピン1(グランド)とピン8(RTS)の間を測定して3Vを得ました。もう一度オフにすると3Vに保たれるため、DTRやRTSを切り替えても何の変化もありません。

私が間違っていることを知っている人はいますか?

修正する

以下のコードを試しました(@Vincent Achardの答えと一致すると思います)。これはうまくいきません。ピン1(グランド)とピン6(5V出力)の間を測定すると、スクリプトの実行時に5Vが残ります。また、ピン1(グランド)とピン8(RTS)の間を測定すると、スクリプトの実行時に電圧はまだ2.8Vです。このコードに問題がある人はいますか?

ここに画像の説明を入力してください。

よろしくお願いします!

ベストアンサー1

シリアルインタフェースのDTRピンとRSTピンはGPIOとは異なる動作をします。つまり、レベルが高くても低くも維持されません。

デフォルト以外の永続的な状態を取得するために、カーネル tty ドライバを変更してこの動作をオーバーライドできます。

ファイル: drivers/tty/tty_port.c

内部に

function tty_port_shutdown() 

変える

tty_port_lower_dtr_rts(port);

渡す

tty_port_raise_dtr_rts(port); 

たぶんもっと簡単な解決策がありますか? ? ?

おすすめ記事