Idee
Neben den viel verwendeten AVR-Mikrocontrollern drängen zur Zeit verschiedene Hersteller (TI , STM) mit Evaluation-Boards auf den Markt, welche auf den ARM Cortex-Prozessoren basieren.
Besonders interessant sind hier die Boards
Die Boads basieren beide auf dem ARM Cortex M4 Prozessor und bieten hohe Leistungsfähigkeit im Vergleich zur klassischen AVR Architektur. AUch haben die Boards gleich einen Programmier- / Debug-Adapter mit an Board und warten damit darauf, von uns bespielt zu werden :)
Aufbau Toolchain
Die beiden Hersteller sehen, auch in Ihrer Dokumentation, vorwiegend den Einsatz kommerzieller Entwicklungsumgebungen vor. Im $Internet gibt es aber zahlreiche Dokumente, die den Aufbau einer freien Toolchain auf Basis gcc, ... beschreiben. Da die Informationen hier sehr verschiedenartig vorliegen, habe ich hier den von mir gewählten Weg dokumentiert, um eine Toolchain sowohl für das Stellaris Launchpad, wie auch für den STM32F4 zusammenzubauen. Ich habe das ganze unter Mac OS X Mountain Lion gebaut, jedoch sollten die Informationen sich leicht auf Linux-Systeme übertragen lassen
ARM Cross-Compiler
Vorbedingungen
Als erstes muss der Cross-Compiler für die ARM-Prozessoren installiert werden. Hier gibt es mit summon-arm-toolchain eine aktuell gehaltene Toolchain, welche über ein Installskript leicht installiert werden kann.
Die folgende Anleitung sammt weitestgehend aus dem README der summon-arm-toolchain:
Installation notwendiger Pakete mit MacPorts:
port install gmp mpfr libmpc wget libftdi git-core py27-yaml python_select
py-yaml wurde hierbei nicht richtig akzeptiert. Dieses habe ich nachinstalliert durch:
sudo easy_install pyyaml
(Danke pcopfer!!)
Installation summon-arm-toolchain
cd ~ mkdir Development cd Development git clone https://github.com/esden/summon-arm-toolchain.git port install gmp mpfr libmpc wget libftdi git-core py27-yaml python_select cd summon-arm-toolchain
HINWEIS 26.09.2013, Gonium: OpenOCD scheint kaputt zu sein und braucht einen Patch, siehe [[1]]. Der compile-Vorgang kann auch mit
cd && git clone git://github.com/ehntoo/summon-arm-toolchain.git && cd summon-arm-toolchain && wget -O - http://darkrainfall.org/build-openocd.patch | patch -p1 && ./summon-arm-toolchain
gestartet werden. Die im folgenden beschriebenen Konfigurationseinstellungen habe ich bislang nicht getestet.
Im Skript "summon-arm-toolchain" sollte nun noch der DARWIN_OPT-Pfad auf den Mac Ports Pfad geändert werden ( bei mir: /opt/local = Default). Erstellt wird die Toolchain jetzt mit:
./summon-arm-toolchain PREFIX=~/Development/sat LIBSTM32_EN=1
PREFIX gibt an, wo die toolchain installiert werden soll, mit LBSTM32_EN=1 erreicht man, dass nicht nur die freie LIBOPENCM3 installiert und kompiliert iwrd, sondern außerdem noch die LIB von STM.
Das ganze dauert jetzt ne Weile. Das Skript lädt die notwendigen Pakete für die Toolchain herunter und kompiliert diese. Am Ende landet die Toolchain in dem Pfad, den wir unter PREFIX angegeben haben.
Zum Schluss habe ich meine Toolchain nun unter ~/Development/sat
Das Verzeichnis ~/Development/sat/bin füge ich nun noch meiner PATH-Variable in der .profile zu, so dass die Binaries des Compilers auch gefunden werden. Danach ist ein Neustart des Terminals erforderlich, damit die neue PATH-Variable Verwendung findet
Librarys und boardspezifische Komponenten der Toolchain
Neben der eigentlichen Toolchain benötigt man für jeden Hersteller (STM und TI) noch die jeweiligen Hersteller-Bibliotheken, welche die entsprechenden Mappings/Registeradressen/Peripheriefunktionen/... für das jeweilige Board bereitstellen. Die Bibliotheken müssen von den Herstellern heruntergeladen werden und bereitgestellt werden.
TI Launchpad
TI Stellarisware
Texas Instruments stellt die sogenannte Stellarisware zur Verfügung. Neben Dokumentation, verschiedenen Bibliothken enthält das File auch Beispielcode. Die Stellarisware lässt sich nach Registrierung von der Homepage von TI herunterladen.
Man erhält dabei ein EXE-File "SW-LM3S-9453.exe", welche man aber mit unzip entpacken kann.
cp SW-LM3S-9453.exe ~/Development/. cd ~/Development mkdir stellarisware cd stellarisware unzip ../SW-LM3S-9453.exe make
LM4Tools
LM4Flash installieren (zum Flashen von BINs aufs TI Launchpad):
Aus: [2]
git clone https://github.com/utzig/lm4tools.git cd lm4tools/lm4flash make
Projekt-Template mit Makefile
Ein Project-Template, um Anwendungen für das TI Stellaris-Evaluationsboard zu schreiben, findet man unter:
STM32F4 Discovery
STM Standard Peripherals Library
Die entsprechende Library von STM lädt man sich am besten in Form des Firmware-Pakets für das STM32F4 Discovery von der STM-Homepage. Im Gegensatz zu TI ist es hier nicht erforderlich, sich dort anzumelden. Den Inhalt dieses Zipfiles habe ich ebenfalls in ~/Development/ gesichert und den Order in stm32f4xx-fw umbenannt. Die wichtigsten Ordner in diesem File sind die Ordner mit den Library-Dateien von STM und ARM. Diese müssen später im Makefile als includes eingebunden werden.
ST-Link
Mit dem ST-Link Paket kann man binarys auf das Discovery-Board flashen.
Benötigt wird hierzu autotools, welches sich am besten mit brew installieren lässt:
brew install autotools
git clone git://github.com/texane/stlink.git cd stlink ./autogen.sh ./configure make make install
Projekt Template mit Makefile
Anbei befindet sich ein Template zur Erstellung von Anwendungen auf Basis STM32F4 Discovery. Das Template bindet die STM-Librarys direkt über das Makefile ein. Dieses ist also an die Pfade des eigenen Systems anzupassen. Das Makefile war vom Ursprungsauthor (siehe Quellenangabe im File) eigentlich zum Kompilieren des IO_Toggle Beispielcodes von STM gedacht und wurde von mir für das Project-Template angepasst. Ggfs. sind die verwendeten Bibliotheken noch als "SRC" im Makefile zu ergänzen.
Im Template sind die Linker-Skripte und der Startup-Code enthalten. Achtung: Bei dem Linker-SKript ("stm32_flash.ld") sind in dem FIrmware-Paket von STM sowohl Varianten für 128 kb RAM, wie auch für 192 kb RAM enthalten. Im Project-Template findet sich die richtige Version mit 192kB.
Das Template findet sich unter:
Links
Basis für diese Anleitung wahren zahlreiche Quellen im Internet. Vor allem aber:
- http://jeremyherbert.net/get/stm32f4_getting_started
- http://www.mikrocontroller.net/articles/STM32F4-Discovery
- http://www.alexwhittemore.com/open-source-ide-and-toolchain-for-the-stm32f4-discovery-on-mac-osx-lion
- http://www.metropolis4ever.de/wordpress/2012/03/st-stm32f4-discovery-mit-eclipse-und-gdb-unter-mac-os-x