System-Failures.org

Elektronik. Mikrocontroller. Robotik.

STM32F4Discovery Board unter Linux

In diesem kleinen HowTo will ich meine Erfahrungen zusammenfassen wie man eine läuffähige Entwicklungsumgebung für das STM32F4Discovery Board mit Eclipse, Codesourcery Toolchain und dfu-util unter Linux einrichten kann. Hierbei kommt das im folgenden beschriebene System unter Ubuntu Linux zum Einsatz, wobei ich jedoch versuchen werde nicht zu systemspezifisch zu werden.

Zunächst müssen ein paar Vorebreitung getroffen werden, damit die Programme später auch im vollem Umfang nutzbar sind.

$ sudo apt-get install libftdi libusb-1.0-0 libusb-1.0-0-dev git

Um die Programme für den STM32F4 compilieren zu können, benötigt man eine geeignete Toolchain. In diesem Fall habe ich mich für die “Lite” Version der Codesourcery Toolchain entschieden, da diese ASM, C/C++ Compiler , sowie Linker und Debugger enthält und auch für jedes Betriebssystem von hier bezogen werden kann.  Unter Ubuntu besteht jedoch das Problem, dass für /bin/sh die Dash-Shell verwendet wird und diese inkompatibel zu dieser Toolchain ist. Dies lässt sich jedoch leicht beheben:

$ sudo dpkg-reconfigure -plow dash
Install as /bin/sh? No

Danach kann es mit der Installation der Toolchain weitergehen, die ich nach /opt/CodeSourcery installiert habe.

$ sudo chmod +x arm-2010.09-51-arm-none-eabi.bin
$ ./arm-2010.09-51-arm-none-eabi.bin
$ PATH=$PATH:/opt/CodeSourcery/bin
$ export PATH

Nachdem dies nun installiert ist, kann es mit der Installation und dem Einrichten von Eclipse weitergehen. Zunächst kann man sich die neuste Version von Eclispe direkt hier herunterladen. Um Eclipse zu installieren, kann es einfach an einen beliebigen Ort im eigenen Homeverzeichnis entpackt und auch direkt gestartet werden. Ist der erste Start von Eclipse erfolgt, müssen nun Anpassungen vorgenommen werden, damit unsere Entwicklungsumgebung mit der zuvor installieren Toolchain arbeiten kann.

Zunächst muss Eclipse um die Programmiersprache C/C++ mit dem CDT-Plugin erweitert werden. Dazu unter “Help -> Install New Software” über den Button “Add” folgende Location http://download.eclipse.org/tools/cdt/releases/indigo hinzufügen und die “CDT Main Features” installieren.

Alle weiter Fragen mit “Next” bestätigen.  Nach dem benötigten Neustart von Eclipse muss noch die Erweiterung GNUARM hinzugefügt werden, welches sich gleich wie das CDT-Plugin zuvor installieren lässt und bei Location http://gnuarmeclipse.sourceforge.net/updates angibt.

Ist dies alles geschafft, kann nun in Eclipse das erste Projekt angelegt und alles für das STM32F4Discovery angepasst werden. Dazu unter “File -> New C Project” ein neues Projekt starten. In diesem Fall habe ich das Projekt “First” genannt und als “Project type” muss “Empty Project” unter “ARM Cross Target Application” selektiert und als “Toolchains” “ARM Linux GCC (Sourcery G++ Lite)” ausgehwählt werden .

Danach einen Klick auf “Finish” und das erste Projekt ist erstellt. Nun müssen noch ein paar Kleinigkeiten in den Projekteigenschaften angepasst werden, damit das Programm später auch richtig kompiliert wird. Per Rechtsklick auf das gerade angelegte Projekt erreicht man unter “Properties” diese Eigenschaften. Zunächst muss der Path der Toolchain unter “C/C++ Build -> Environement” über “ADD” eingestellst werden.

 

Nun sollte über “C\C++ Build -> Settings” unter “Target Processor” “cortex-m4″ eingetragen werden.

Jetzt können die wichtigsten Library’s hinzugefügt werden. Zuvor habe ich mir die Library’s, die ich benötige zuvor in meinem Workspce kopiert. Die Library’s können über “C\C++ General -> Paths and Symbols” hinzugefügt werden.

Nun über “C\C++ Build -> Settings” unter “ARM Sourcery Linux GCC C Compiler -> Preprocessor” spezielle Symbole definieren.

Zu  guter letzt muss noch das speziell für den Flash konfigurierte File (stm32_flash.ld) hinzugefügt werde.  Über “C\C++ Build -> Settings” unter “ARM Sourcery Linux GCC C Linker”.

Da Eclipse mit diesen Konfigurationen standartmäßig nur ein .elf-File erzeugt, habe ich in die “Post-build steps” noch ein Kommando eingefügt, damit das .bin-File direkt miterzeugt wird. Dazu über “C\C++ Build -> Settings” unter “Build Steps” bei “Post-build steps” folgende Zeile einfügen “arm-none-eabi-objcopy -O binary ./First.elf ./First.bin”.

Damit ist dies geschafft und man kann mit dem Programmieren beginnen. Um das fertige Programm dann auf das Board zu übertragen nutze ich dfu-util, das über git bezogen werden kann. Zum Installieren muss es zunächst ausgecheckt und kompiliert werden.

$ git clone git://gitorious.org/~tormod/unofficial-clones/dfuse-dfu-util.git
$ cd dfuse-dfu-util/
$ ./autogen.sh
$ ./configure --prefix=/opt/dfu-util
$ make
$ sudo make install
$ sudo ln -sf /opt/dfu-util/bin/dfu-util /usr/sbin/dfu-util

Ist dies getan, kann das Board nun direkt über den am unteren Ende angebrachten Micro-USB Port geflashed werden. Dazu muss ein Jumper zwischen Boot0 und VDD bei P2 und ein Jumper zwischen PB2 und GND bei P1 gesteckt werden.

Danach kann man z.B. das in den Beispielen von STMicroelectronics enthaltene Audio dem auf den Chip flashen über:

$ sudo dfu-util -D STM32F4-Discovery_Audio_IntFLASH_V1.0.0.dfu -R -a 0

oder direkt als Binary:

$ sudo dfu-util -s 0x0483:0xdf11 -D First.bin -R -a 0

Nachtrag: Obwohl das dfu-util auch direkt die in Eclipse erzeugten .bin Files auf das Board übertragen kann, ist es doch ganz hilfreich “richtige” .dfu Files, die das Board normalerweise benötigt um über USB geflashed zu werden, zu haben. Dazu habe ich ein kleines Python-Tool gefunden, dass aus dem in Eclipse erzeugten .bin File ein .dfu File macht. Dies kann hier heruntergeladen werden.

Creative Commons License
This work, unless otherwise expressly stated, is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.

Comments

Comment

*