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
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.
Die Header mit den Register Definitionen sind auch in den STM32CubeFxx Paketen enthalten.
Meint ihr beide das hier: http://www.st.com/content/st_com/en/products/embedded-software/mcus-embedded-software/stm32-embedded-software/stm32cube-mcu-packages/stm32cubef0.html#getsoftware-scroll
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.