STM32 Anleitungen

Hinweis zu CDC Geräten unter Linux

Die USB Implementierungen die ich auf meinen STM32 Seiten vorgestellt habe implementieren die Character Device Klasse (CDC). Diese werden von Linux ohne spezielle Treiberinstallation unterstützt. Man steckt das USB Kabel einfach ein. Auf dem PC erhält man dann einen virtuellen COM Port, den man wie eine serielle Schnittstelle nutzen kann.

Der erste virtuelle COM Port heisst üblicherweise /dev/ttyACM0.

Das Laden des Linux Treibers lässt sich am einfachsten mit folgendem Befehl kontrollieren:

sudo dmesg -c

Ich bin unter Linux auf ein paar überraschende Eigenarten gestoßen, die bei bestimmten Anwendungen stören könnten:

Modem Manager

Der Modem-Manager versucht USB CDC Geräte als Modem zu erkennen, um sie in die Netzwerk-Verwaltung einzubinden. Zu diesem Zweck sendet der Modem-Manager Kommandos an den Mikrocontroller und wertet dessen Antworten aus.

Ich habe den Modem-Manager einfach deinstalliert, da ich ihn ohnehin nicht brauche. Unter Ubuntu/Debian geht das mit dem Befehl

sudo apt remove modemmanager

Serielle Konsolen

Der Linux Kernel unterstützt das Einloggen über serielle Konsolen, was auch diese CDC Geräte betrifft. Auf Konsolen sendet der Kernel ein Echo von allen Kommandos zurück, so wie du das auch von der Eingabeaufforderung im Terminalfenster gewohnt bist. Das betrifft auch den Mikrocontroller. Jede Zeile Text, die dieser ausgibt sendet der Kernel prompt wieder zurück.

Um diese Funktion zu deaktivieren, müsste man den Kernel patchen. Der entsprechende Parameter heisst "CONFIG_SERIAL_CONSOLE".

Alternativ kann man das Echo per Befehl deaktivieren:

sudo stty -F /dev/ttyACM0 -echo

Ausgabe von Textmeldungen

Man kann Textmeldungen vom Mikrocontroller ganz einfach mit folgendem Befehl anzeigen:
cat /dev/ttyACM0

Falls sowohl der Mikrocontroller als auch der Kernel ein Echo zurück senden, entsteht eine Endlosschleife, die zu völlig erratischen Ausgaben führt. In einem Terminalprogramm (wie z.B. Cutecom oder Hammer Terminal) sieht hingegen alles gut aus.