← 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.