Ich habe einige Entwicklungen auf einem Nucleo-64-Board (insbesondere dem NUCLEO-F303RE mit dem STM32F303RE-Mikrocontroller) durchgeführt und OpenOCD und GDB mit verwendet, target remote :3333
um meinen Code (mit load
) auf meinen Mikrocontroller zu flashen.
Während dieser Zeit habe ich den virtuellen COM-Port des ST-LINK auf meinem Linux-Rechner (Ubuntu 16.04 (Xenial Xerus)) verwendet, um mit dem USART des Mikrocontrollers zu sprechen. Jetzt möchte ich einfach den virtuellen COM-Port verwenden, um mit dem Mikrocontroller zu sprechen, ohne OpenOCD oder GDB starten zu müssen.
Ich war überrascht zu entdecken, dass dies nicht nur funktioniert. Die Symptome sind, dass mein Gerät weder vom Host gesendete Bytes noch umgekehrt empfängt. (Ich erkenne Bytes, die am Zielgerät ankommen, indem ich eine LED blinken lasse.) Daher scheint es, dass der Status des ST-LINK-Mikrocontrollers oder vielleicht des Linux-Kernels auf meinem Host-Computer irgendwie durch den Verbindungsvorgang über OpenOCD und geändert wird Flashen des Programms.
Meine Hauptfrage ist: Ist es möglich, auf meinem Ubuntu 16.04-Rechner zu diesem virtuellen COM-Port-Arbeitszustand zu gelangen, ohne OpenOCD oder GDB zu starten? Im Idealfall müsste ich kein zusätzliches Programm verwenden, sondern vielleicht nur einige Konfigurationseinstellungen ändern.
Meine zweite Frage ist: Warum passiert das? Ändert das ST-LINK-Gerät selbst hier den Modus?
Und meine dritte Frage: Warum passiert folgendes und was kann ich dagegen tun? Manchmal kann der Ziel-Mikrocontroller auch nach erfolgreichem Flashen Bytes erfolgreich senden, aber nicht empfangen. Außerdem glaube ich, dass eines meiner Boards mit dieser Methode weder Bytes senden noch empfangen kann, obwohl die Firmware anscheinend problemlos hochgeladen wird.
Unter MacOS 10.12.1 ist mein Ziel-Mikrocontroller sofort verbunden und wie gewünscht (ohne weitere Befehlsausführung oder Firmware-Flashing) über den virtuellen COM-Port unter z. B. /dev/tty.usbmodem1423
. Daher vermute ich jetzt, dass das Problem bei der Linux-Kernel-Seite und dem Treiber liegt, der /dev/ttyACM0
.
Es sollte keine wirkliche Interaktion zwischen GDB oder OpenOCD und dem virtuellen seriellen Anschluss eines STM32 Discovery- oder Nucleo-Boards geben, jedoch verzögert das modemmanager
standardmäßig in Ubuntu und abgeleiteten Distributionen installierte Paket die Verfügbarkeit des CDC/ACM-Geräts nach jedem Zurücksetzen erheblich, was normalerweise der Fall ist enthält nicht nur Verbindungen, sondern einige Programmieroperationen (zumindest diejenigen, die die Massenspeicheremulation verwenden).
Die Dinge werden viel besser funktionieren, wenn sie modemmanger
deinstalliert sind. Bitte argumentieren Sie nicht darüber, bis Sie tatsächlich versucht haben, es zu entfernen - das Problem liegt hinter den Kulissen, eine Verzögerung im Betriebssystem, die den Port für Benutzerprogramme verfügbar macht. Es macht den Unterschied zwischen den Boards, die im Wesentlichen nutzlos sind und ziemlich gut funktionieren (eine udev-Regel oder Treiber-Blacklist, um die geringfügig defekte Massenspeicher-Emulation zu ignorieren, ist auch eine gute Idee).
Sie müssen jedoch wahrscheinlich immer noch geeignete Einstellungen für die serielle Leitung vornehmen, mit so etwas wie stty
einem tatsächlichen Terminalprogramm - ohne das (und möglicherweise sogar danach) können Sie nicht einfach so etwas verwenden, ohne cat
die Details der seriellen Schnittstelle zu kennen, mit denen Sie interagieren können den Port (obwohl Sie häufig, wenn Sie ein Terminalprogramm ausführen, echo
oder cat
und eine Shell-Umleitung daneben verwenden können, um bestimmte Zeilen dorthin zu schreiben)
Spannungsspitze
Oldtimer
Oldtimer
Andreas Stroh
Dewan
Andreas Stroh