Forum: Mikrocontroller und Digitale Elektronik STM32 unter Linux entwickeln und debuggen


von Axel (Gast)


Lesenswert?

Hallo zusammen,

ich suche für mein Wiedereinstiegsprojekt in die Mikrocontrollerwelt ein 
paar Infos zu meinem Vorhaben:
- kleine µC-Boards sollen Taster einlesen und Relais schalten 
(Standardkram Homeautomation)
- Verwendung eines aktuellen µCs (STM32?), der in 10 Jahren nicht 
komplett tot ist. (was Arm-basiertes?)
- freier/offener Compiler (also wohl gcc)
- die Entwicklung soll unter Linux/Ubuntu laufen
- halbwegs komfortables debuggen (also kein printf-debugging) => GDB + 
STLink?
- als Entwicklungsumgebung würde ich z.B. VisualStudio Code nehmen 
(läuft das gut mit STM32 + GDB?)


Soweit wären das meine ersten Anforderungen/Gedanken.
Ob ich jetzt irgendein Framework (Arduino...) oder bare-metal 
programmieren will, weiß ich noch nicht.
Es gibt da einen STM32-Arduino Port. Ist das inzwischen alles so 
ausgereift, dass das 24/7 sauber läuft - auch wenn man ein paar 3rd 
party libs einbindet?
Ich würde mal mit einem STM32F103 (BluePill) starten und mich dann 
weitertasten.


Ich verfolg(t)e seit ~10Jahren die Bastler-Community nicht mehr so 
richtig. Es hat sich für mich also einiges getan.

So, jetzt könnt ihr mich bitte mit positiven Erfahrungen und 
Google-Begriffen bewerfen. :-)

Es geht mir also mehr um die Einschätzung, was man heute so einsetzt, wo 
gute Erfahrungen bestehen und was Zukunft hat.


Danke,
Axel.

von Programmierer (Gast)


Lesenswert?

Axel schrieb:
> - als Entwicklungsumgebung würde ich z.B. VisualStudio Code nehmen

Warum nicht die STM32CubeIDE? Die ist genau dafür gemacht und da passt 
alles genau zusammen für genau diesen Einsatzzweck.

von Corona V. (Gast)


Lesenswert?

Nehm die STM32CubeIDE (offiziell von ST) und ein Discoveryboard. Geht 
beides unter Linux.

von Sigi K. (nulloc)


Lesenswert?

Axel schrieb:
> - kleine µC-Boards sollen Taster einlesen und Relais schalten
> (Standardkram Homeautomation)
Ok, passt doch.

> - Verwendung eines aktuellen µCs (STM32?), der in 10 Jahren nicht
> komplett tot ist. (was Arm-basiertes?)
Meines Wissens, sind die meisten STM32 ARM-Basiert. Wie definierst du 
komplett tot? ;)

> - freier/offener Compiler (also wohl gcc)
Wähle ich auch imme für meine privaten Projekte. Auch beruflich nutze 
ich GCC sehr oft.

> - die Entwicklung soll unter Linux/Ubuntu laufen
Ok

> - halbwegs komfortables debuggen (also kein printf-debugging) => GDB +
> STLink?
STLink kenne ich zu wenig. Hab mir einen Segger gegönnt, sind aber teure 
Dinger. Obwohl es heute glaub ich eine Education Edition gibt.
Zu STLink und GDB findest du auf Google und Youtube viele Tutorials.

> - als Entwicklungsumgebung würde ich z.B. VisualStudio Code nehmen
> (läuft das gut mit STM32 + GDB?)
VSCode benutze ich inzwischen auch immer häufiger, habe aber noch zu 
wenig Erfahurngen gemacht mit dem Debuggen. Aber bisher hatte ich keine 
unlösebare Hindernisse. Entwickeln ansich funktioniert sehr gut und 
bequem.  Vorallem in kombination mit CMake finde ich es sehr praktisch.

Die schon erwähnte STM32CubeIDE kenne ich selbst nicht. Bisher habe ich 
viel gutes gehört, natürlich auch von eingen Problemen mitbekommen. Aber 
wo hat man die schon nicht. Von mir ausgesehen ist die Wahl der IDE eine 
Geschmackssache.

Arduino finde ich persönlich uninteressant. Für Anfänger oder als mittel 
zum Zweck hört es sich aber ganz praktisch an. Aber du hörst dich 
weniger wie ein Anfänger an ;)

: Bearbeitet durch User
von vscode Liebhaber (Gast)


Lesenswert?

Axel schrieb:
> als Entwicklungsumgebung würde ich z.B. VisualStudio Code nehmen
> (läuft das gut mit STM32 + GDB?)

Auf der Arbeit setze ich auch nur noch vscode ein. Mit den beiden 
Erweiterungen "Cortex-Debug" und "C/C++" hab ich alles erfolgreich zum 
Entwickeln und Debuggen mit meinem J-Link zum laufen bekommen. Auch ein 
Nucleo-Board mit dem integrierten ST-Link hat zum Debuggen ohne Probleme 
funktioniert.

von Stefan F. (Gast)


Lesenswert?

Schau dir diese Infos an: http://stefanfrings.de/stm32/index.html

Die Blue-Pill Boards sind problematisch da offenbar überwiegend 
schlechte Fälschungen verkauft werden. Bei RobotDyn bekommst du mit 
Sicherheit originale, aber da kannst du dann gleich die neueren 
STM32F303 Boards im selben Format verwenden.

Für den Start würde ich allerdings dringend zu einem Nucleo oder 
Discovery Board raten, denn da ist der Programmieradapter schon drauf 
und es gibt keine Probleme mit gefälschten Chips, Designfehlern und 
Bestückungsfehlern. Am Anfang ist es ungemein hilfreich, eine Hardware 
zu haben, die garantiert in Ordnung ist und wo einfach nur noch das USB 
Kabel dran stecken muss.

von Bauform B. (bauformb)


Lesenswert?

Axel schrieb:
> - Verwendung eines aktuellen µCs (STM32?), der in 10 Jahren nicht
> komplett tot ist. (was Arm-basiertes?)

> Ich würde mal mit einem STM32F103 (BluePill) starten und mich dann
> weitertasten.

Vielleicht kann man den STM32F103 auch in 10 Jahren noch kaufen (ala 
LM317, CD4011...), aber er ist heute schon völlig veraltet. Das war STs 
erster Versuch und man merkt es. Die nächste Generation war schon 
deutlich besser, dann kamen die STM32L0 und L4 und dann die G0 und G4. 
Daneben gibt es noch größere, aber die sind dann wirklich 
überdimensioniert.

> Es geht mir also mehr um die Einschätzung, was man heute so einsetzt

Mit "man" meinst du doch nicht die Millionen Fliegen?

> - freier/offener Compiler (also wohl gcc)

gcc ist der offizielle ARM-Compiler¹. Für Neugierige gibt es noch 
llvm/clang, ein moderneres Konzept und Frontend mit evt. nicht so 
ausgereiftem Backend.

> - halbwegs komfortables debuggen (also kein printf-debugging) => GDB +
> STLink?

wer GDB mag: Black Magic Probe² ist nach Leistung und Preis ein 
Mittelding zwischen STLink und Segger.


1) 
https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads
oder, nicht ganz so offiziell, aber aktuell:
https://www.archlinux.org/packages/community/x86_64/arm-none-eabi-gcc/
2) https://1bitsquared.de/

von M. T. (restfet)


Lesenswert?

Ich hab vor kurzem begonnen mit https://platformio.org herumzuspielen 
und bin davon begeistert. So wie ich das verstanden habe ist das ein 
Plugin (?) für VS Code, das Support für viele verschiedene 
Mikrocontroller(-Boards) bereitstellt mit Toolchain, Framework und 
Debugger. Das Setup hat für mich völlig schmerzfrei funktioniert und ich 
konnte schnell das erste Erfolgserlebnis verbuchen.

von Hä? (Gast)


Lesenswert?

M. T. schrieb:
> Ich hab vor kurzem begonnen mit https://platformio.org
> herumzuspielen
> und bin davon begeistert. So wie ich das verstanden habe ist das ein
> Plugin (?) für VS Code, das Support für viele verschiedene
> Mikrocontroller(-Boards) bereitstellt mit Toolchain, Framework und
> Debugger. Das Setup hat für mich völlig schmerzfrei funktioniert und ich
> konnte schnell das erste Erfolgserlebnis verbuchen.

Also:
1. Du bist begeister von Platformio und damit herumzuspielen
2. Du hast "verstanden", daß es ein Plugin (?) für VS Code ist
3. Setup war Schmerzfrei, aka lief top

Kann es sein, daß es nur Werbun ist? Alles zusammen ergibt keinen 
logischen Zusammenhang.

von Johannes S. (Gast)


Lesenswert?

Hä? schrieb:
> Kann es sein, daß es nur Werbun ist?

Das nennst du Werbung? In jedem Thread zu dem Thema wird mindestens 
fünfmal CubeIDE empfohlen. Das ist Atollic Studio, und da wurde vor ein 
paar Jahren hier noch ganz anders drüber geurteilt. Jetzt von ST 
gekauft, Konkurrenz Unterstützung rausgeworfen und alles ist gut...
PlattformIO ist da deutlich mehr Multi Kulti. Genau wie Mbed das 
ebenfalls sehr gut unter Linux verwendet kann. Auch sehr flexibel in 
VSCode inclusive debugger zu benutzen.

von Axel (Gast)


Lesenswert?

Hallo zusammen,

ich habe mich jetzt für VisualStudio Code + PlatformIO entschieden. Die 
Installation dauerte nur wenige Minuten. Das erste Testprojekt (Counter 
hochzählen + LED blinken) war schnell angelegt/auto-generiert. Dann 
musste ich noch 99-platformio-udev.rules ausführen, sonst ist ein 
Runterladen wegen Zugriffsrechten (Linux) nicht möglich. Nach 30min war 
alles fertig.
Ich hatte ein Watchfenster, Disassembly, Breakpoints, Prozessorregister 
- alles was man so braucht. Nicht super-komfortabel-highend, aber 
scheinbar solide. Ob da ein Makesystem dahintersteckt, oder ob das was 
ganz anderes ist, muss ich mir noch anschauen.

Mein Evalboard hat einen STM32F103 bestückt, dazu ein ST-LinkV2. Ob es 
bei dem F103 bleibt, oder ob ich auf neuere Derivate umsteige, muss ich 
noch klären. Danke für den Hinweis auf neuere...

Warum nicht STM32CubeIDE? Ich möchte mich möglichst wenig an jemanden 
binden. Wenn der Hersteller keine Lust mehr hat, muss ich mich neu 
umsehen.
PlatformIO scheint eine freie breite Unterstützung zu haben. Und für 
meine Zwecke ausreichend zu sein. (Ich brauche z.B. nicht unbedingt eine 
grafische Konfiguration der Portpins...).

> Meines Wissens, sind die meisten STM32 ARM-Basiert. Wie definierst du
> komplett tot? ;)
Genau, auf ARM setzen, da diese die besten Zukunftsaussichten haben. Tot 
sind heute z.B. alle 16bitter.


Danke für alle Tipps, die das Thema aus verschiedenen Richtungen 
beleuchteten!

von Malte _. (malte) Benutzerseite


Angehängte Dateien:

Lesenswert?

Jetzt würde mich mal interessieren, wie die Peripherie beim VisualStudio 
Code + PlatformIO angezeigt wird. Ich hatte den Thread auch verfolgt, da 
ich nach einer Debugmöglichkeit von STM32s unter Linux gesucht und 
gestern die STM32CubeIDE zum Laufen gebracht hab. Mein Hauptproblem war 
dass ich nicht unnötig Tools von ST Verwenden wollte sondern möglichst 
viel aus dem Debian Repository. Am Ende funktioniert es jetzt mit 
openocd:
openocd -f /usr/share/openocd/scripts/interface/stlink-v2-1.cfg -f 
/usr/share/openocd/scripts/target/stm32f0x.cfg
Und die Einstellung im CubeIDE ist sich remote auf den von openocd 
bereitgestellten GDB Server zu verbinden, die Debug Probe ist ein 
ST-Link von einem Nucleo64. Das ist schon echt komfortabler als printf 
debugging auf einem AVR. Aufgrund der höheren Komplexität der STM32 aber 
IMHO auch notwendiger.

von Stefan F. (Gast)


Angehängte Dateien:

Lesenswert?

Malte _. schrieb:
> Und die Einstellung im CubeIDE ist sich remote auf den von openocd
> bereitgestellten GDB Server zu verbinden,

Warum stellst du nicht einfach in der IDE ein, dass sie OpenOCD starten 
soll? Sie enthält nämlich bereits beides, GDB und OpenOCD.

Malte _. schrieb:
> Mein Hauptproblem war> dass ich nicht unnötig Tools von
> ST Verwenden wollte sondern möglichst viel aus dem Debian Repository.

Ganz ehrlich: Damit machst du dir das Leben nur unnötig schwer. 
Sämtliche IDEs installiert man besser außerhalb der Linux Distribution, 
so wie es der Anbieter vorgesehen hat. Dann hast du nämich nicht nur die 
aktuelle Version, sondern auch die vorgesehene Verzeichnisstruktur. So 
bekommt man viel besser Support.

Der mitgelieferte ST-Link GDB bietet den Vorteil, dass er Trace Messages 
innerhalb der IDE anzeigen kann. OpenOCD kann sie nur in eine Datei 
schreiben.

von Axel (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Malte,

so sieht VisualStudio Code mit PlatformIO aus.

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.