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);
たぶんもっと簡単な解決策がありますか? ? ?