Forum: Mikrocontroller und Digitale Elektronik Eigenes STM32 Board mit Programmierung per mbed IDE


von Krlto90 (Gast)


Lesenswert?

Hallo Leute,

einige von euch kenne sicherlich die Platform mbed mit der man 
unterstütze Entwicklungboards, von unterschiedlichen Herstellern, die in 
einer Online IDE programmiert werden. Der Vorteil ist, dass man seinen 
Code compilen und das dabei entstehende Binär-File einfach per Drag&Drop 
aufs Board kopieren kann (das Board wird als Massenspeicher angezeigt).

So, nun würde ich gerne mein eigenes Layout entwickeln und eine 
STM32F042K6 MCU nutzen. Die MCU wird auch von mbed unterstützt: 
https://os.mbed.com/platforms/ST-Nucleo-F042K6/

Es gibt auch einige Projekte, die "fremde" Boards mit unterstützten 
MCU's nutzen, z.B:
https://os.mbed.com/users/hudakz/code/STM32F103C8T6_Hello/
https://os.mbed.com/users/hudakz/code/MapleMini_Hello/

Das Problem ist, dass diese Projekte eine zusätzliche Header Datei von 
der MCU nutzen. Ich selbst weiß allerdings nicht, woher ich solch eine 
Header Datei für den STM32F042K6 finde oder selbst erstelle...

Daher meine Fragen, ob es möglich ist solch ein Board zu entwickeln und 
woher bekomme ich eine Header-Datei für meine MCU?

Vielen Dank

von Krlto90 (Gast)


Lesenswert?

PS: STLink V2 ist vorhanden

von Stefan F. (Gast)


Lesenswert?

Erzeuge ein Projekt mit Cube-HAL. Im generierten Code sind die Header 
enthalten. Ich habe auch schon einmal gesucht, wo man die einzeln her 
bekommt, aber nichts gefunden.

von Dr. Sommer (Gast)


Lesenswert?

Die Header mit den Register Definitionen sind auch in den STM32CubeFxx 
Paketen enthalten.

von Krlto90 (Gast)


Lesenswert?


von Stefan F. (Gast)


Lesenswert?

ja

von Johannes S. (Gast)


Lesenswert?

Da es das Target für den STM32F042 schon gibt ist das relativ einfach, 
die Würfel sind sozusagen schon gefallen :)
Die Quellen für das Nucleo Board sind hier:
https://github.com/ARMmbed/mbed-os/tree/master/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F042K6

Prinzipiell geht das für ein eigenes Target dann so das du das 
Verzeichnis TARGET_NUCLEO_F042K6 kopierst und daraus z.B. MYBOARD_F042K6 
machst. Darin ist anzupassen die PinNames.h das zumindest IO Pins, LED 
und UART passen.
Dann ist in mbed-os/targets/targets.json das TARGET_NUCLEO_F042K6 zu 
finden und kann kopiert und mit dem neuen Namen versehen werden.

Jetzt gibt es aber ein kleines Problem weil das Target nur mbed2 
unterstützt. mbed-os5 hat ein RTOS mit drin und ist entsprechend 
speicherhungriger. 6kB Ram sind da zu wenig, also muss das ganze für das 
mbed2 gemacht werden, geht aber genauso.
Die Quellen dafür sind aus historischen Gründen nicht auf GitHub sondern 
in einem Mercurial Repo, 
https://os.mbed.com/users/mbed_official/code/mbed-dev/
Das hinkt dem mbed5 etwas hinterher, spielt aber keine Rolle weil die 
'grossen' Änderungen da eher im Bereich RTOS und IoT Komponenten 
passieren, das F042 Target ist da jedenfalls zu finden.
Wenn das neue Targetverzeichnis vorhanden ist solltest du ein Blinky als 
main.cpp erstellen und das Ganze mit dem mbed-cli sollte sich das 
kompilieren lassen:
1
mbed compile -m MYBOARD_F042K6 -t GCC_ARM
vorausgesetzt du möchtest das mit dem gcc machen. Für den kleinen M0 
könnte man auch den Keil Compiler installieren, bis 32k macht der 
kostenlos mit und erzeugt gerade für den M0 etwas kompakteren Code, aber 
für die grösseren Ms kostet der eine Kleinigkeit.
Mit diesen Schritten sollten die ganzen Basiskomponenten wie 
digitale/analoge IO, Timer, UART, SPI usw. funktionieren. USB für mbed2 
ist hier:
https://os.mbed.com/users/mbed_official/code/USBDevice/
Aber da muss man sehen ob die HW eher mit den L0 oder F1 devices gleich 
ist, für den F042 ist das nicht implementiert.
Wo du noch aufpassen musst ist mit der Taktquelle. Wenn die gleich ist 
mit dem Nucleo Board ist nichts zu ändern, sonst muss die andere 
Taktquelle eingestellt werden. Für die STM geht das eventuell über die 
Features in der targets.json.

von Johannes S. (Gast)


Lesenswert?

noch ein Nachtrag:
bei der zitierten Seite für das BluePill Board (STM32F103) wird auch 
keine neue Cube Config gebraucht, was da hinzugefügt wird ist ja in der 
verlinkten Lib zu sehen:
https://os.mbed.com/users/hudakz/code/mbed-STM32F103C8T6/

Da wird eben nur die PinNames und die clock Config angepasst. Die 
Definitionen werden vor die mbed defines gepackt und nach dem Motto 'wer 
zuerst kommt, included zuerst' werden diese dann benutzt. Nicht die 
schönste Methode, aber einfach.
Für die Programmierung deiner Custom Hardware brauchst du dann aber 
einen Programmer über SWD oder seriell, die Magie das Nucleo (oder die 
anderen mbed enabled Boards) per drag and drop zu programmieren liegt in 
einem zweiten µC der auf diesen Boards drauf ist und als Massenspeicher, 
Debug Adapter und virtueller Serieller Schnittstelle fungiert.

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.