STM32L0-Snippets mit GCC-ARM-Toolchain

Derzeit versuche ich, die Mikrocontroller-Serie STM32L0 zu verwenden. Ich habe festgestellt, dass ST auch eine Low-Level-C-Programmsammlung namens STM32SnippetsL0 anbietet , parallel zu ihrer komplexen STM32CubeMX-basierten HAL-API. Leider kann ich die Codes nicht unter GNU/Linux verwenden, da es nur EWARM- und MDK-ARM-Toolchains unterstützt. Gibt es Möglichkeiten, diesen Code mit der GCC ARM Embedded Toolchain auszuführen ?

klingt wie eine Stackoverflow-Frage. warum kannst du ewarm nicht verwenden? Welche Bibliotheken funktionieren nicht? können Sie in den anderen Bibliotheken verlinken? ewarm ist auch eine Gnu-Compiler-Toolchain, ja? Du solltest sie also verlinken können.
Danke für deine Hinweise @dwelch. AFAIK EWARM basiert auf dem C-Compiler von IAR Systems. Es läuft nur unter Windows und ich möchte eine GNU/Linux-basierte Lösung finden.
ahh Entschuldigung, ich dachte an einen anderen Compiler, einen GNU-basierten Cross-Compiler für Windows, egal ... Sie können möglicherweise immer noch verlinken und / oder wenn sie den Quellcode zur Bibliothek haben, können Sie sie neu kompilieren. Ich kann mir nicht vorstellen, dass st das Board/Chip Support Package ohne Quellen irgendwo und/oder ohne einen GNU-basierten Satz von Bibliotheken liefert. Wenn sie das nicht anbieten, würde ich mich nicht darum kümmern und eine andere Lösung finden

Antworten (1)

Nach langem Experimentieren kann ich sagen, dass es möglich ist, die STM32Snippets mit der GCC ARM Embedded Toolchain zu kompilieren. Die Snippets enthalten selbst die notwendigen Dateien außer der Linker-Datei. Ich habe eine Linker-Datei verwendet, die von STM32CubeMX (SW4STM32-Vorlage) kopiert wurde, aber ich denke, dass andere Skripte auch verwendbar sind.

Es ist notwendig, zwei Dateien aus dem Snippets-Vorlagenordner (Drivers/CMSIS/Device/ST/STM32L0xx/Source/Templates) zu kopieren. Die erste ist system_stm32l0xx.c und die zweite die entsprechende Startup-Assembly-Datei aus dem gcc-Unterordner. (Ja, es scheint gcc teilweise zu unterstützen.) Ich habe startup_stm32l053xx.s verwendet, weil ich das Nucleo-Board verwende. Wenn die heruntergeladenen Snippets in den Ordner snippets extrahiert wurden und sich arm-none-eabi-gcc in Ihrem Pfad befindet, können Sie den folgenden Code verwenden:

arm-none-eabi-gcc -DSTM32L053xx -Wall -g -mthumb -mcpu=cortex-m0plus -march=armv6-m -mlittle-endian -Isnippets/Drivers/CMSIS/Include -Isnippets/Drivers/CMSIS/Device/ST/STM32L0xx/Include -Wl,--gc-sections,-Map=main.map -Tstm32l053xx.ld -L. system_stm32l0xx.c startup_stm32l053xx.s main.c -o main.elf

Schließlich wird bin zum Hochladen auf Nucleo erstellt.

arm-none-eabi-objcopy -O binary main.elf main.bin