1

MCU で遊んで、RS232 リンクを介して PC デスクトップと通信しようとしています。

テスト プログラムを非常にシンプルにしました。「Hello world!\n」をnミリ秒ごとに送信します。

最も関連性の高いリンク接続パラメーターは次のとおりです。

  • ポート: /dev/ttyUSB0
  • ボーレート: 57600 bps
  • 8データビット
  • 1ビットストップ
  • パリティおよびハードウェア制御なし

MCU から PC にデータを受信することを確認するために、/dev/ttyUSB0 を次のように設定します。

%> stty -F /dev/ttyUSB0 57600 cooked

その後、

%> cat /dev/ttyUSB0
Hello world!
Hello world!
Hello world!
...

というわけで、ちゃんとMCUからデータを受信して​​います。

しかし、ここで問題は、pySerial モジュールで Python を使用したい場合、データが完全に間違っていることです。

>>> s = serial.Serial('/dev/ttyUSB0', 57600)
>>> print s
Serial<id=0x195fed0, open=True>( 
    port='/dev/ttyUSB0', baudrate=57600, 
    bytesize=8, parity='N',  
    stopbits=1, timeout=None, 
    xonxoff=False, rtscts=False, 
    dsrdtr=False)

>>> s.read(14)
'\xc8\xe5\xec\xec\xef\xa0\xf7\xef\xf2\xec\xe4\xa1\x8a\x80'

この時点で、「Hello world!\n」出力文字列 (MCU 側) を次の文字列に変更しました: 0xde, 0xad, 0xbe, 0xef。そして、pySerial で得られるものは次のとおりです。

>>> s.read(4)
'\xde\xad\xbe\xef'

できます!今度は、0x00, 0x01, 0x02, 0x03, 0x80, 0x81, 0x82, 0x83 に変更しました。結果:

>>> s.read(8)
'\x80\x81\x82\x83\x80\x81\x82\x83' 

結論: pySerial は、同じ値に 128 を加えた値に対して、128 より小さいバイト値を変更します。

なぜこれが起こっているのかわかりません。他の機会(バージョン2.4)でpySerialモジュールを使用しましたが、すべて正常に機能しました。Ubuntu 11.10 および Ubuntu 10.04 で 2.5 および 2.6 バージョンを試しましたが、うまくいきません。どんな手掛かり?

PD: 私の英語の文章に共感してください。私は英語に堪能ではありません。

4

1 に答える 1

0

わかりました、私のせいです!PySerial は完璧に動作します。MCU のコードを修正したところ、設定すべきビットを設定解除するミスが 1 つ見つかりました (7 ビットの文字長を送信していました)。次に、受信したフレームは、明らかに、部分的に正しく、部分的に間違っていました。

これで、pySerial が悪い結果を表示する理由が理解できました。それにもかかわらず、私の PC が 7 ビット データ、8 ビット長の文字からどのように再構成するのかは、私にとって謎です。端末からのデータが正しかったので、MCUのコードは問題ないと確信しました:S

于 2012-07-09T02:37:05.733 に答える