STM32 Core Arduino Framework

Gast #5581255
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?
Gast #5581379
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
Gast #5581468
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.
Gast #5581469
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.
Gast #5581492
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.
Gast #5581629
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.
Angehängte Dateien:
Gast #5581644
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...
Gast #5583916
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.
Gast #5584718
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?
Gast #5584752
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.
Gast #5584916
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.
Gast #5584937
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...
Gast #5608179
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.
Gast #5615237
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.
Gast #5632368
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.

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