Forum: Mikrocontroller und Digitale Elektronik Ein Lob an STM32 + CubeMX


von Mampf F. (mampf) Benutzerseite


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

: Bearbeitet durch User
von Mampf F. (mampf) Benutzerseite


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)

von Ben S. (bensch123)


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.

: Bearbeitet durch User
von Wastl (hartundweichware)


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.

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

von J. S. (jojos)


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

von G. K. (zumsel)


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

von Mampf F. (mampf) Benutzerseite


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 😁

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Mampf F. schrieb:
> Den Lag merke ich selbst auf meinem Ryzen 3600 noch

Gönn' dir ne SSD. Damit flutscht Eclipse selbst auf prähistorischen i3. 
Ein paar Sachen wie Projekte anlegen oder die Cube-Packs herunterladen 
dauert etwas länger, aber wie oft macht man das am Tag...

: Bearbeitet durch User
von J. S. (jojos)


Lesenswert?

und einen STLink V3, der hat USB HS und ist damit auch deutlich 
schneller. Gibt es mittlerweile auch wieder für unter 10 €:
https://www.digikey.de/de/products/detail/stmicroelectronics/STLINK-V3MODS/11610874

servertype in der Launch Config ist dann stlink, der nutzt dann den 
STLink GDBServer.

von Mampf F. (mampf) Benutzerseite


Lesenswert?

Niklas G. schrieb:
> Gönn' dir ne SSD.

Reicht eine Samsung 980 Pro^^

Nana, eine Java-IDE kommt mir nicht mehr in die Tüte - es gibt nichts 
besseres als VSCode^^

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Mampf F. schrieb:
> Reicht eine Samsung 980 Pro

Ja, damit läuft Eclipse super. Außer du stellst das Teil permanent auf 
Energiesparmodus oder lässt einen lahmen Echtzeit-Virenscanner 
mitlaufen.

von Aloysius P. (Firma: FBI) (a_pendergast)


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.

von Wastl (hartundweichware)


Lesenswert?

J. S. schrieb:
> ST hat nicht davon abgekupfert, die haben es aufgekauft.

... und daraus die CubeIDE gemacht. Daher von Atollic.

von J. S. (jojos)


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.

von Mampf F. (mampf) Benutzerseite


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.

: Bearbeitet durch User
von J. S. (jojos)


Lesenswert?

Mampf F. schrieb:
> Vlt kaufe ich mir mal einen original JLink und teste die STM32 IDE
> nochmal.

JLink wird auch von cortex-debug unterstützt, kein Grund rückfällig zu 
werden :)

von Stefan F. (Gast)


Lesenswert?

Mampf F. schrieb:
> Jein, man benötigt dann so einen superweirden Cable-Server und einen
> originalen STLink

Ich benutze die STM32Cube IDE auch mit nicht originalen ST-Link Adaptern 
aus China. Sie unterstützt sogar OpenOCD.

von Kay-Uwe R. (dfias)


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.

: Bearbeitet durch User
von Mampf F. (mampf) Benutzerseite


Lesenswert?

Kay-Uwe R. schrieb:
> Wie kann man mehr als einen dieser CubeMX-Konfiguratoren gleichzeitig
> öffnen?

Unter Linux öffnen sich bei mir zwei CubeMX ohne Probleme 🤔

von Niklas G. (erlkoenig) Benutzerseite


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.

: Bearbeitet durch User
von Kay-Uwe R. (dfias)


Lesenswert?

Mampf F. schrieb:
> Kay-Uwe R. schrieb:
>> Wie kann man mehr als einen dieser CubeMX-Konfiguratoren gleichzeitig
>> öffnen?
>
> Unter Linux öffnen sich bei mir zwei CubeMX ohne Probleme 🤔
Aus der STM32CubeIDE heraus oder "offline" aufgerufen?

von Kay-Uwe R. (dfias)


Angehängte Dateien:

Lesenswert?

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.
Ist das nur unter Windows so?

von J. S. (jojos)


Lesenswert?

Kay-Uwe R. schrieb:

> Ist das nur unter Windows so?

Kann ich mir nicht vorstellen, eher ein Problem der Programmierung.
Auch zweimal den gleichen Workspace öffnen wird an einem Locking 
scheitern (habe jetzt keine Lust den Rechner wieder anzuwerfen).
Also old fashioned:
Quelle ausdrucken, Einstellungen übernehmen und auf dem Papier abhaken.

von Harry L. (mysth)


Lesenswert?

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.

von Wastl (hartundweichware)


Angehängte Dateien:

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.

von J. S. (jojos)


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.

von Aloysius P. (Firma: FBI) (a_pendergast)


Lesenswert?

J. S. schrieb:
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.

von J. S. (jojos)


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.

: Bearbeitet durch User
von Mampf F. (mampf) Benutzerseite


Lesenswert?

Kay-Uwe R. schrieb:
> Klicke
> ich auf die nächste, wird die gerade geöffnete ioc-Datei erst
> geschlossen, bevor es weitergeht.

Nein, das geht auch unter Linux nicht.

Du kannst aber mehrere CubeMXes starten.

von Aloysius P. (Firma: FBI) (a_pendergast)


Angehängte Dateien:

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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.