Ein Lob an STM32 + CubeMX

OP Persönliche Seite #7525619
Lesenswert?

Guten Morgen,

ein Post voller Lobeshymnen für STM32 und dem CubeMX Konfigurations- und Generator-Tool.

Ist in den letzten Jahren ja echt gut geworden und trotz komplexer Peripherie-Konfiguration gab es eigentlich (dieses mal für den L053) nichts zu beanstanden und alles hat gleich funktioniert (PWM 2 Channel, RTC, USB CDC, Interrupts, GPIOs, ...) 🤯

Bzw, habt ihr mal "cortex-debug" Plugin in VSCode benutzt?

So einfach hat debuggen mit zB einem stlinkv2 Klon ja noch nie funktioniert 🤯

Rip (CDT) Eclipse 😑

edit: Falls es jemand testen will ... Mit CubeMX ein Makefile Projekt erzeugen und das hier ergänzen:

.vscode/launch.json

1
{
2
    "version": "0.2.0",
3
    "configurations": [
4
        {
5
            "name": "Cortex Debug",
6
            "cwd": "${workspaceFolder}",
7
            "executable": "./build/stm32.elf",
8
            "request": "launch",
9
            "type": "cortex-debug",
10
            "runToEntryPoint": "main",
11
            "servertype": "openocd",
12
            "configFiles": [
13
                "myboard.cfg"
14
            ]
15

16
        }
17
    ]
18
}

myboard.cfg:

1
source [find interface/stlink-v2.cfg]
2
source [find target/stm32l0.cfg]
3
reset_config none separate
OP Persönliche Seite #7525630
Lesenswert?

Und damit ich es nächstes mal wieder finde, wenn ich es brauche ...

So enabled man C++ im generierten Makefile:

1
+# cpp sources
2
+CPP_SOURCES = 
3

4
+# cpp compiler
5
 ifdef GCC_PATH
6
+CPP = $(GCC_PATH)/$(PREFIX)g++
7
 else
8
+CPP = $(PREFIX)g++
9
 endif
10

11
+# cpp includes
12
+CPP_INCLUDES =  
13

14
+CPPFLAGS = $(CPP_INCLUDES) -std=c++17 -Wno-register -fno-rtti -fno-exceptions -fno-threadsafe-statics
15

16
+# cpp objects
17
+OBJECTS += $(addprefix $(BUILD_DIR)/,$(notdir $(CPP_SOURCES:.cpp=.o)))
18
+vpath %.cpp $(sort $(dir $(CPP_SOURCES)))
19
+
20
+$(BUILD_DIR)/%.o: %.cpp Makefile | $(BUILD_DIR)
#7525637
Lesenswert?

Und dieser ganze Bastelkram mit VSCode und Cmake bei STM32 bleibt dir erspart, wenn du einfach die STM32CubeIDE benutzt, wie sie ist.

Mampf F. schrieb:

(PWM 2 Channel, RTC, USB CDC, Interrupts, GPIOs, ...) 🤯

Für Interrupts, GPIOs, RTC und einfacher PWM brauche ich kein CubeMX. Das sind wenige Zeilen bare metal.

Lediglich für USB lasse ich mir was generieren oder nimm eine Bibliothek.

#7525660
Lesenswert?

Wastl schrieb:

... oder mit dem (nicht ganz frischen) Atollic Truestudio, das funktioniert immer noch prächtig (weil STM davon abgekupfert hat)

oh je, geht es noch rückständiger? ST hat nicht davon abgekupfert, die haben es aufgekauft. Und den Support für andere Hersteller rausgeworfen und das CubeMX Plugin fest eingebaut. Was wurde hier früher über Atollic hergezogen. Erst kostenlos, dann nicht mehr, dann doch wieder... Und Eclipse, viel zu träge...

#7525671
Lesenswert?

Wastl schrieb:

... oder mit dem (nicht ganz frischen) Atollic Truestudio, das funktioniert immer noch prächtig (weil STM davon abgekupfert hat) und läuft im Gegensatz zur Cube IDE auch unter 32-Bit Fenster.

32-Bit Fenster nutzt noch jemand?

Linux ist da weiter: Linux 6.7 Will Let You Enable/Disable 32-bit Programs Support At Boot-Time: https://www.phoronix.com/news/Linux-6.7-IA32-Emulation-Boot

OP Persönliche Seite #7525687
Lesenswert?

Ben S. schrieb:

Und dieser ganze Bastelkram mit VSCode und Cmake bei STM32 bleibt dir erspart, wenn du einfach die STM32CubeIDE benutzt, wie sie ist.

Jein, man benötigt dann so einen superweirden Cable-Server und einen originalen STLink^^

Aaaaber, STM32CubeIDE ist auch ein Eclipse und damit Java und damit unerträglich zu arbeiten.

Den Lag merke ich selbst auf meinem Ryzen 3600 noch und es gefällt mir nicht und schränkt mich in meinem sonst üblichen Arbeitstempo ein 😁

(Firma: FBI) #7525814
Lesenswert?

Hmm.. also ich wundere mich! Erst CubeMX loben und dann so was VSC ansprechen. Warum nicht bei dem "runden Ding" CubeMX und IDE bleiben. Wir leben im Zeitalter von KI's & Co. Wer sich auf so einen Murks wie Kommandozeilen oder ellenlanges Konfigurationsmassaker in Txt-Files einlässt hat m.E. entweder zu viel Zeit, den Schuss nicht gehört oder will seine Freundin beeindrucken. VSC ist ein wertvoller Editor, aber keine ausgewachsene IDE. Da helfen auch halbfertige Plugins nichts. Da würde ich, wenn man etwas gegen CubeMX / IDE etwas hat ehe Visual Studio mit einem ausgewachsenen Plugin wie VisualGDB von SysProg greifen. Und meine Zeit in Projekte investieren, anstatt mich mit irgendwelchen Konfigurationen herumzuschlagen.

#7525846
Lesenswert?

Aloysius P. schrieb:

Wer sich auf so einen Murks wie Kommandozeilen oder ellenlanges Konfigurationsmassaker in Txt-Files einlässt hat m.E. entweder zu viel Zeit,

das geht wunderbar und einfach. Es wird ein Muster angelegt wenn man eine debug extension auswählt und für die Einstellungen gibt es Auswahlmöglichkeiten, die muss man nicht auswendig lernen. Dazu können diese einfachen json files kopiert werden wenn man die Einstellungen in einem anderen Projekt übernehmen möchte. Oder die Einstellungen werden von CMake generiert, so funktioniert es bei meinem Lieblings OS. VSCode funktioniert auch Remote und kann die Einstellungen da synchron halten. Mach das mal bei Eclipse, da bekommst du die Krise wenn du etwas nicht im Dialog einstellen möchtest. Und Eclipse ist nicht gleich Eclipse, jede Menge Hersteller bieten angepasste Plugins, aber nichts in .cproject und .project ist da kompatibel. Und dann der make Automatismus: absolut intransparent weil er aus >20k LOC in Java besteht. Bei Updates von ST musst du Glück haben das Projekte noch funktionieren, .ioc einlesen und Code generieren und schon lässt sich das Projekt nicht mehr fehlerfrei compilieren. DAS ist Bastelkram.

OP Persönliche Seite #7525852
Lesenswert?

Und VSCode benutze ich mittlerweile für C/C++, Golang, Python, Rust und allem anderen, das man irgendwie debuggen kann.

Ah für Markdown-Dokumente auch ...

Kurioserweise bin ich noch nie auf die Idee gekommen, Bash Skripte damit zu schreiben und zu debuggen ... Das mach ich mit vim - schreiben zumindest 🙈

Wofür mehrere IDEs, wenn man eine super-IDE für alles benutzen kann und die Bedienung und Möglichkeiten dann quasi für alle Programmiersprachen konsistent sind.

Aber ich merks ja selbst und werde mit dem Alter immer fauler ...

Damals hab ich HAL verteufelt und nur die StdPeriphLibrary benutzt ... Jetzt ist mir das egal.

Weniger "Idealismus", geringster Widerstand, am schnellsten fertig werden, Zeit für andere Dinge.

Vlt kaufe ich mir mal einen original JLink und teste die STM32 IDE nochmal.

#7526044
Lesenswert?

Wie kann man mehr als einen dieser CubeMX-Konfiguratoren gleichzeitig öffnen? Bei mir geht das nur nacheinander. Ich möchte aber Projekte aus derselben Solution miteinander vergleichen. Bitte nicht darauf hinweisen, man könnte die *.ioc-Dateien durch ein diff schieben oder virtuelle Maschinen aufsetzen. Ich möchte einfach nur zwei Fenster in einer IDE nebeneinander haben und z. B. das Clock-Management von einer Seite auf die andere anpassen.

Persönliche Seite #7526116
Lesenswert?

Ben S. schrieb:

Lediglich für USB lasse ich mir was generieren oder nimm eine Bibliothek.

Ausgerechnet da hapert es - CubeMX kann nur entweder den USB-Stack mit einer spezifischen Klasse (CDC, MSC, ...) einbinden oder gar nicht einbinden und nur ein Dummy zur Peripherie-Initialisierung anlegen. Eine eigene / vendor-specific-Klasse will CubeMX nicht erzeugen, obwohl das mit der Bibliothek an sich kein Problem ist.

Workaround: Projekt mit CDC-Support anlegen, USB-Bibliothek in einen anderen Pfad kopieren, CDC-Support wieder deaktiveren, diverse Anpassungen und Hacks vornehmen (insbesondere die CDC-Dateien rausnehmen) und eigene Klasse implementieren.

Genau das ist das Problem an Code-Generatoren - sie unterstützen nie alle Möglichkeiten der Bibliothek, aber weil das ganze Ökosystem sich so sehr auf sie verlässt wird es dann kompliziert ohne sie klarzukommen wenn man solche "spezielleren" Anforderungen hat.

#7526169
Lesenswert?

Kay-Uwe R. schrieb:

Hier mal als Beispiel. Ich kann immer nur eine ioc-Datei öffnen. Klicke ich auf die nächste, wird die gerade geöffnete ioc-Datei erst geschlossen, bevor es weitergeht.

Du musst die *.ioc-Datei unter dem Windows-Explorer anklicken, nicht innerhalb der Cube IDE. Bei mir kann ich so zwei oder mehrere CubeMX ohne Probleme starten.

Angehängte Dateien:
#7526188
Lesenswert?

Harry L. schrieb:

J. S. schrieb:

Quelle ausdrucken, Einstellungen übernehmen und auf dem Papier abhaken.

Genau dafür hat man die Möglichkeit, alle Einstellungen in einer .ioc in eine PDF-Datei zu schreiben.

Ja, leider hat STM den ganzen Ressourcen keine Kommentarfelder spendiert. Da habe ich nun über zwei Dutzend htim, huart, hspi usw ohne aussagekräftige Namen, und die werden auch so in das pdf übernommen, was es dann ziemlich wertlos macht. Im Code sind die Variablen im ‚don‘t touch me‘ Bereich und da kann nicht direkt kommentiert werden. Ja, Profis brauchen keine Kommentare.

(Firma: FBI) #7526429
Lesenswert?

J. S. schrieb im Beitrag #7525846: VSCode

funktioniert auch Remote und kann die Einstellungen da synchron halten. Mach das mal bei Eclipse, da bekommst du die Krise wenn du etwas nicht im Dialog einstellen möchtest. Und Eclipse ist nicht gleich Eclipse,

Um Himmels Willen. Ich habe auch keine Werbung für Eclipse gemacht. Da habe ich mich mal an der Espressif IDF versucht. Und das ganze so schnell wie es installiert war auch wieder von der Platte geschmissen. Ich würde VSC Eclipse auch immer vorziehen. Ich arbeite aber lieber mit VS und dem VisualGDB Plugin. Kostet zwar was, läuft aber out of the Box ohne das ich was konfigurieren, kopieren oder anpassen muss. Wenn es was gibt wo andere für mich die lästige Arbeit erledigt haben nutze ich das. Zudem ist das VS Community ebenfalls kostenlos zu haben.

#7526450
Lesenswert?

Die Installation von Erweiterungen in VSC ist auch vorbildlich einfach, deshalb ist das für mich kein Argument 'muss erst alles installiert werden': Ein Klick und man ist in der Liste der Erweiterungen, eine Erweiterung ist mit einem weiteren Klick installiert. Dazu ist man sofort in einer Beschreibung dazu und auch deaktivieren oder deinstallieren ist da genauso einfach. Bei Eclipse muss erstmal ein Anbieter im Marketplace gesucht werden, der Dialog ist einfach nur unübersichtlich.

Ich habe auch mit VS seit 4.0 gearbeitet bis ich Eclipse für µC installiert hatte. Alleine die Compilereinstellungen zu finden war ein Graus gegenüber anderen IDE. Dabei sind VS und Eclipse beides erstmal nur leere Shells die durch Erweiterungen zur IDE werden. VSC ist jetzt wieder anders, aber viel offener als die bisherigen. Ich mag die Möglichkeit CMake, verschiedene toolchains, verschiedene Programmiersprachen, PlattformIO uvm. in einem Werkzeug zu nutzen.

(Firma: FBI) #7526886
Lesenswert?

J. S. schrieb:

Die Installation von Erweiterungen in VSC ist auch vorbildlich einfach, deshalb ist das für mich kein Argument 'muss erst alles installiert werden': Ein Klick und man ist in der Liste der Erweiterungen, eine Erweiterung ist mit einem weiteren Klick installiert. Dazu ist man sofort in einer Beschreibung dazu und auch deaktivieren oder deinstallieren ist da genauso einfach. Bei Eclipse muss erstmal ein Anbieter im Marketplace gesucht werden, der Dialog ist einfach nur unübersichtlich.

Also ich lasse mich ja gerne eines Besseren belehren. Nehmen wir mal ein Bespiel. Wenn ich ein ESP32 Projekt, Framework ESP-IDF in VisualStudio mit dem VisualGDB Plugin out oft he Box debugge, ohne irgendwelche Einstellung vorher gemacht zu haben zu müssen, bis auf die Auswahl der DebugHW und des COM Ports für den Seriellen Monitor dann habe ich auf einen Blick, meinen C-Code und den Assemblercode (Simultan), ich habe alle CPU-Register im Blick, die I/O‘s, Memory, seriellen Monitor und überwachte Ausdrücke. Und wenn ich will, noch mehr. Das klappt auf Knopfdruck und auf Anhieb . Sie Screen shoot.

Versuche ich das in VS-Code mit z.B. dem Platform-IO Plugin. Kann ich immer nur entweder den C-Code sehen, oder alternativ den assembly view. IO, oder CPU Register, Pustekuchen. Da geht das gemeckerte los. Irgendwelche SVD Files will er haben, wo bitte ist der idfSvd Path? Hallo hakt’s? Das Ding weis wo die IDF ist, hat ja gerade die toolchain benutzt?!? Auf gut Deutsch, nix funktioniert hier out of the Box. Und wenn ich HW programmieren will, will ich weder ein Systemadministrator für eine DIE sein, noch 100 Seiten Anleitung lesen müssen wie das Ding so konfiguriert werden möche. Das ist nicht Zeitgemäß. Da bezahle ich lieber 100€ und nutze eine vernünftige IDE . VSCode ist für mich Eclipse nur eben ohne Java.

Aber vielleicht gibt es ja doch einen Knopf mit dem das alles out oft he box funktioniert, den ich nur nicht gefunden habe. Wenn mir jemand diesen zeigt, nehme ich alles zurück.

Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren