ttyACM0が接続されましたが、受信したデータは表示されません。

ttyACM0が接続されましたが、受信したデータは表示されません。

USBインターフェイスを備えたSTM32F4マイクロコントローラがあり、それをRaspberry Piに接続します。接続するとマークされます/dev/ttyACM0。毎秒デバイスごとにいくつかの文字を送信しています。

ウィンドウでは、パテを使用すると、すべてがうまく動作します。キャラよく受けました。

Raspberry Piで次のコマンドを実行すると:

>> sudo tail -f /dev/ttyACM0  

画面には何も表示されません。私のデバッガでは、デバイスが「停止」せずに正しく送信されているようです。

コマンドが実行されないと、tailデバイス(簡単なプログラムを含む)が停止し、監視タイマーがタイムアウトします。

パテがリストにない場合、Windowsで同じ症状が発生するため、この動作は正常なようです。

送信した文字をどのように表示しますか?

これは権利問題ですか?別のプログラムを使用する必要がありますか?フォーラムでいくつかの提案を試してみました。99-com.rules, set all rights to/dev/ttyACM0`でルールを変更しましたが、運がありませんでした。

答え1

PuTTYは端末エミュレータなので、一度に1文字を処理するように設計されています。

一方tail、コマンドの設計によって、またはTTYドライバが出力をバッファリングするため(デフォルト設定が上書きされない限り)、デフォルトでは文字列全体が必要になることがあります。

minicom操作cuが適切ではないと判断された場合は、stty -a -F /dev/ttyACM0ポートの使用中にTTYデバイス設定リストを使用してから、コマンドを使用してその設定sttyを再現してから使用できますtail -f。このユースケースで必要とされないすべてのTTYデバイスの基本機能を無効にするには、次のものが必要になる場合があります。

stty -F /dev/ttyACM0 -crtscts ignbrk -icrnl -onlcr -ixon -opost -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke

注:sttyオプション構文は廃止されました。各オプションキーワードの前にあるマイナス記号は障害を負う対応するTTYデバイスオプション。マイナス記号なしでキーワードを使用すると有効になります。

tail使用しているコマンドのバージョン(おそらくGNUパッケージだけでなくRasPiで実行されているディストリビューションcoreutilsでも可能です)が完全にライン指向で変更できないことが判明した場合、それはまだ適切ではありません。busybox時には、マイクロコントローラが送信した文字にUnixスタイルの改行文字が含まれていない限り、作業のために。 (マイクロコントローラがLFの代わりにCRを送信している場合は、icrnlそのオプションを有効にするとTTYドライバが問題を解決する可能性があります。)

答え2

#!/bin/bash
cat < /dev/ttyACM0 | awk 'BEGIN { FS = "," } {OFMT = "%2.5f"}\
/GPGGA/ { print "ID: ", $1, "Time: ", $2, "Lat: ", $3, "Lon: ", $5, "Höhe: ", $10}' > data

このスクリプトはラズベリーパイ用です。データは「data」ファイルに保存されます。

関連情報