Forum: Mikrocontroller und Digitale Elektronik STM32 Core Arduino Framework


von Marc (Gast)


Lesenswert?

Im Moment versuche ich gerade etwas Ordnung in die verschiedenen STM32 
Arduino Cores und Frameworks zu bekommen.

Leider funktionieren nicht alle auf meinem Rechner.

Das wohl am weitesten entwickelte ist ein Chinesisches und es wird 
ständig daran gearbeitet:
https://github.com/huaweiwx/STM32GENERIC

Leider läuft es auf meinem Rechner aber nicht. Hat es von euch schon mal 
jemand probiert?

von Marc (Gast)


Lesenswert?

Ich habe gerade noch mal einen Blick auf mbed geworfen:
https://www.mbed.com/en/
Das scheint ja auch ziemlich umfangreich. Hat jemand damit Erfahrungen?

von Stefan F. (Gast)


Lesenswert?

Das ärgerliche ist, dass die Cores alle ein bisschen anders sind. Viele 
Libraries laufen daher nur auf einem bestimmten Core. Wie du sicher 
bemerkt hast, gibt es für den STM32F103 mindestens 3 unterschiedliche 
Implementierungen.

Ich frage mich auch, warum ich auf einen anständigen Debugger verzichten 
soll, wo der notwendige ST-Link Adapter doch nur 2 Euro kostet. Das 
grenzt doch schon an selbst-Geißelung.

Ich bin davon* nicht begeistert.

*) STM32 mit Arduino zu programmieren

von Johannes S. (Gast)


Lesenswert?

Marc schrieb:
> Das scheint ja auch ziemlich umfangreich. Hat jemand damit Erfahrungen?

Ja, das ist mein bevorzugtes OS. Um welchen STM geht es?

von Marc (Gast)


Lesenswert?

>Ja, das ist mein bevorzugtes OS. Um welchen STM geht es?

Eigentlich beliebig, ich habe hier verschiedene herum liegen.
Gibt's für das F407 Discovery eine Audio-Lib?

von Marc (Gast)


Lesenswert?

Stefanus schrieb
>das ärgerliche ist, dass die Cores alle ein bisschen anders sind.
Ja, die Arm-Prozessoren sind ein wenig über die Möglichkeiten der AVRs 
hinaus gewachsen. Leider ist es so wie bei vielen Softwarearchitekturen: 
Wenn es keine "Normungskommision" mehr gibt, entsteht Wildwuchs.

Da hat es Embed schon einfacher. Die einigen sich einfach selber. Hier 
ein schönes Architekturbild:
https://os.mbed.com/docs/v5.10/introduction/index.html

>Ich frage mich auch, warum ich auf einen anständigen Debugger verzichten
>soll, wo der notwendige ST-Link Adapter doch nur 2 Euro kostet. Das
>grenzt doch schon an selbst-Geißelung.

Es gibt bestimmt Möglichkeiten zu debuggen. Wir hatten mal ein größeres 
Projekt in AVR-Studio mit Arduino-Unterbau.

von Johannes S. (Gast)


Lesenswert?

Das Disco mit dem F407 ist erstmal nicht direkt ‚mbed enabled‘, dafür 
fehlt die standard Programmierschnittstelle. Aber für diese MCU ist 
schon alles vorhanden und die Anpassungen sind relativ gering.
In mbed sind Klassen für die Standardinterfaces und ein RTOS. 
Spezialitäten wie Audio sind nicht im Core OS und muss man suchen. Für 
STM kann man Code von CubeMX integrieren weil beide den HAL nutzen.
Einfacher für den Anfang sind die Nucleos die schon mbed enabled sind. 
Das alte Disco habe ich glaube ich auch noch, kann dafür etwas zusammen 
bauen. Mit dem STM32F407VE auf einem Chinaboard spiele ich auch gerade.

von Johannes S. (Gast)


Lesenswert?

Das DISCO_F407VG ist doch in der Targetliste drin, nur aus genannten 
Grund nicht in der Boardliste auf der mbed Site.
Dazu erstmal das mbed-cli installieren. Dann mit dem blinky 
https://github.com/ARMmbed/mbed-os-example-blinky/blob/master/README.md
starten. Beim compile den Namen DISCO_F407VG angeben. Im Build 
Verzeichnis liegt das .bin wenn es geklappt hat, das dann mit dem STLink 
Utility auf das Board bringen.
Bei Interesse morgen mehr, ist jetzt zu mühselig am Smartphone.

von Marc (Gast)


Angehängte Dateien:

Lesenswert?

>Bei Interesse morgen mehr, ist jetzt zu mühselig am Smartphone.

Wenn man auf einfach Weise den I2S Codec am F407 Disco zum laufen 
kriegen kann, würde es mich auf jeden Fall mal interessieren. Für den 
STM32GENERIC Arduino Core gibt es da schon Beispiele.

Hier hat einer die mbed-API in der Arduino-Umgebung nachgebildet:

https://github.com/tkem/mbino

Damit kann man also die mbed Befehle in der Arduino-Umgebung nutzen, 
falls man diese gewohnt ist. Lustig wäre jetzt noch das Ganze in die 
andere Richtung. Da könnte man vielleicht einige Arduino-Treiber unter 
mbed benutzten.

von Johannes S. (Gast)


Lesenswert?

Arduino Code in mbed zu übernehmen ist oft einfach weil das Arduino API 
ja nicht sehr umfangreich ist. Bei großen Apps wie Marlin sieht es 
natürlich anders aus.
Und bei den vielen Libs überwiegt die Quantität, Qualität muss man 
wirklich suchen...

von Marc (Gast)


Lesenswert?

Obwohl der Huaweixx Core bei mir nicht läuft, scheint es bei Ihnen 
selbst zu laufen.

Sie machen Benchmarks und besonders interessant H7 wird wohl 
unterstützt:
https://github.com/huaweiwx/STM32GENERIC/raw/master/STM32/libraries/BoardExamples/examples/all_boards/Benchmarks/Benchmarks-results.xlsx

Das H7 Board läuft 5x schneller als das F407 Disco.

von Johannes S. (Gast)


Lesenswert?

Marc schrieb:
> Hier hat einer die mbed-API in der Arduino-Umgebung nachgebildet:

ok, würde ich mir aber nicht antun. Für meine Haus und Hof Anwendungen 
nehme ich dann lieber kleine Cortex-M0, mehr RAM, schönere Peripherie, 
einfaches Debuggen, gleiche Entwicklungsumgebung wie für die anderen 
Cortex-Mx.

Das Disco F407 habe ich mal ausgepackt, das Blinky wie oben beschrieben 
läuft ad hoc. Für I2S gibt es eine Implementierung von ST (ST_I2S auf 
github), die läuft auch ohne Anpassungen mit dem F407.
Für den Audio DAC CS43L22 findet man Quellcode in den BSP für andere 
Disco Boards. Dieses BSP Gewusel in C von STM gefällt mir nicht, ich 
habe den Code für den DAC in eine Klasse gepackt das er als Komponente 
verwendet werden kann. Auch das funktioniert in einem einfachen 
Testprogramm das einen Sinus aus einer Tabelle auf dem DAC ausgibt.

von Marc (Gast)


Lesenswert?

> Für I2S gibt es eine Implementierung von ST

Meinst Du den Core von STM selber?
>ST_I2S auf github
Hast Du den genauen Link? Github zeigt nämlich viele.

>Audio DAC CS43L22 findet man Quellcode in den BSP

Wenn Du BSP erwähnst meinst Du sicher das Huaweixx Repo?

von Johannes S. (Gast)


Lesenswert?

Der I2S Code von ST war doch nicht auf GitHub sondern auf der mbed Site: 
https://os.mbed.com/teams/ST/code/ST_I2S/

Mit BSP meinte ich auch das vom Disco 407 für mbed. Morgen könnte ich 
meinen Code nach Github schieben, für das Disco 407VG funktioniert das 
relativ einfach.
Habe noch ein Disco 469NI und dachte das läuft da auch einfach, aber 
uiuiui, da ist wieder ein anderes Interface, SAI, drin.

von Marc (Gast)


Lesenswert?

>für das Disco 407VG funktioniert das relativ einfach.

Das wäre super. Wenn Du einen Link auf ein mbed-Beispiel hast, das 
"Out-Of-The-Box" funktioniert werde ich es auf jeden Fall aufprobieren.

von Marc (Gast)


Lesenswert?

Seltsamerweise laufen nicht alle Cores auf meinen PCs ( Ubuntu ).

Hier mal eine List:

STM32-GENERIC-Derivate
###############################################
https://github.com/danieleff/STM32GENERIC
orginal Core, läuft mittlerweile wieder bei mir

https://github.com/ChrisMicro/STM32GENERIC
langsamerer entwickelter Fork. Mehr Beispiele, stable.

https://github.com/huaweiwx/STM32GENERIC
Sehr umfangreiche Beispiele viele Boards. Läuft nicht
################################################

https://github.com/stm32duino/Arduino_Core_STM32
Official Core von ST. Läuft bei mir nicht

https://github.com/stm32duino/STM32Examples
Beispiele zum Offical Core. Ziemlich mager.

https://github.com/GrumpyOldPizza/arduino-STM32L4
Nicht HAL-bassierter Core. Compiliert sehr schnell, effizient.
Für das flashen muss auf Linux ein 32bit Treiber nach installiert 
werden.

https://github.com/rogerclarkmelbourne/Arduino_STM32
Nur für F1 und F4. Habe ich nicht probiert.

https://github.com/platformio/platform-ststm32
platformIO. Die achten vermutlich darauf, dass alles läuft. Noch nicht 
probiert.

von Johannes S. (Gast)


Lesenswert?

was bedeutet für dich läuft/läuft nicht?
Die 'cores' sind ja ein sehr dehnbarer Begriff bei den STM32 Boards. 
Bisher hatte ich das für das gemeinsame Arduino API gehalten, aber das 
ist ja mehr eine Codesammlung für verschiedene Schnittstellen, 
Peripherie und Hilfsfunktionen. Da es für die ganzen Erweiterungen keine 
Richtlinien gibt sieht das sehr chaotisch aus.
Da ist mbed erstmal minimalistischer, der Kern sind wirklich nur die 
Schnittstellenklassen, RTOS (bei mbed-os, vorher mbed 5 genannt), eine 
Softwaretimerklasse und z.B. die Basis für Filesysteme. Jetzt kommen 
weitere Komponenten hinzu, erstmal einiges für IoT weil ARM dafür wohl 
Verbündete hat. Netzwerk und SD Karte mit zwei Dateisystemen gehört auch 
zu den Erweiterungen in mbed-os, USB funktioniert schon für einige 
Targets, da wird aber noch dran gearbeitet.
Für das STM32F407VE_BLACK baue ich mir gerade meine Lib auf. Das ganze 
Zubehör soll aber als Komponenten (C++ Klassen) vorliegen die nicht in 
einen core gehören.
Unter Ubuntu und MacOS laufen die mbed tools auch, ich arbeite aber 
hauptsächlich mit Windows. Wenn du mein Beispiel testen möchtest dann 
installiere mal das mbed-cli.
Dann versuche ich mich gerade mit VSCode anzufreunden. Bisher war 
Ecliopse mit mcuarmeclipse (vormals gnuarmeclipse) PlugIn mein Favorit. 
Das funktioniert auch gut, aber einige Dinge wie Debuugger Anbindung 
sind Blackboxen und der Java Code von Eclipse ist aufgebläht und 
undurchschauber, auch wenn ide Quellen öffentlich sind. Und das 
Persistenzformat ist sehr sehr unpraktisch für den Im/Export von 
Projekteinstellungen. Deshalb ist eclipse nicht gleich eclipse, ein 
Projekt von gnuarmeclipse kann z.b. nicht mit Atollic oder MCUExpresso 
geöffnet werden.
Aber ich schweife ab...

von Johannes S. (Gast)


Lesenswert?

so, habe den Code in ein github repo geschoben:
https://github.com/JojoS62/mbed-os-example-i2s
Die CS43L22 Klasse macht nicht viel, da werden nur für die Kommandos die 
entsprechenden Register per I2C gesetzt. Das kann auch in Arduino 
verwendet werden wenn die I2C Klasse durch die Wire Lib ersetzt wird.

von Marc (Gast)


Lesenswert?

>so, habe den Code in ein github repo geschoben:
Danke dafür. Der Code ist gut reduziert, so dass man ihn einfach 
verstehen kann. Das finde ich gut.

von Marc (Gast)


Lesenswert?

Wie kann man die STM32 Boards debuggen?

Es geht wohl mit Eclipse, aber die Einrichtung scheint etwas aufwändig:
https://github.com/stm32duino/wiki/wiki/How-to-debug
https://www.youtube.com/watch?v=D-MbC9N5U7o

von Stefan F. (Gast)


Lesenswert?

Du verbindest den STM32 Mikrocontroller über einen ST-Link Adapter mit 
dem USB Anschluss deines PC. Viele Boards enthalten diesen Adapter, 
ansonsten kann man sich ab ca 3€ einen kaufen.

http://stefanfrings.de/stm32/index.html#swj

Als Eclipse basierte IDE's kenne ich die "System Workbench for STM32" 
und das "Atollic TrueStudio". Bei beiden IDEs ist die ganze 
Konfiguration der Plugins (außer Arduino) schon vorgegeben.

Du öffnest das Source Projekt mit genau der Software Version, die sich 
auf dem Mikrocontroller befindet und klickst dann auf den grünen Käfer. 
Beim ersten mal legt die IDE eine "Debug Configuration" an. Dann 
verbindet sich der Debugger über den ST-Link Adapter mit der SWD 
Schnittstelle des Mikrocontrollers und lässt das Programm bis zum Beginn 
der main() Funktion laufen. Dort hält es dann an.

Dun kannst nun (rote) Unterbrechungspunkte setzen, indem du links neben 
die gewünschte Zeile doppelklickst, und das Programm mit dem Play Button 
bis dahin laufen lassen. Oder du führst es durch einen anderen Button am 
oberen Bildschirmrand Zeile für Zeile aus.

Außerdem kannst du den Inhalt von Variablen beobachten und sogar 
überwachen lassen (Unterbrechung bei Änderung).

Wichtig ist, dass das Programm nicht zu stark optimiert wurde. Die 
Compiler Optionen -O0 (gar nicht optimiert) und -Og (für Debugging 
optimiert) empfehlen sich dazu. Stark optimierte Programme weichen 
Strukturell so weit vom Quelltext ab, dass der Debugger es stellenweise 
nicht korrekt darstellen kann.

von Marc (Gast)


Lesenswert?

Gerade habe ich eine Anleitung gefunden, wie man Arduino mit Eclipse ( 
nicht Attolic ) benutzt:
http://www.eclipse.org/community/eclipse_newsletter/2018/july/arduino.php

von Marc (Gast)


Lesenswert?

In Eclipse kann man auch die *.ino Files als c++ files definieren:

Preferences => C/C++ => FileTypes => new *.ino mit C++ source file

Der Editor scheint aber trotzdem keine Syntax-Highlightning zu machen.

von Johannes S. (Gast)


Lesenswert?

Ist das CDT Plugin auch installiert? AFAIK gibt es den Eclipse Download 
auch mit dem vorinstallierten cdt.
Oder hier gleich ein Eclipse mit alles für Arduino: 
http://www.baeyens.it/eclipse/

von Marc (Gast)


Lesenswert?

>Oder hier gleich ein Eclipse mit alles für Arduino:
>http://www.baeyens.it/eclipse/

Danke für den Link. Ich habe es gerade probiert:

- Arduino Uno funktioniert super. Compilieren und Download extrem 
schnell
- ESP32 funktioniert
- ESP8266 funktioniert

Beobachtungen:
- Das Serial Monitor Fenster läuft voll und man muss scrollen
- Im Serial Plotter ist nichts zu sehen, alles ist schwarz

STM32 Official Core funktioniert
- Installation funktioniert
- Compilieren funktioniert
- Download funktioniert angeblich:

>Starting upload
>Uploading project "NucleoL476Test" with "STLINK_UPLOAD"
>Starting reset using DTR toggle process
>Continuing to use "/dev/ttyACM0"
>Ending reset

Nur leider: Es blinkt nix.

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.