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