Arduino ist ja in aller Munde. Besonderes Schmankerl sind die STM32 basierten Arduino kompatiblen boards, wie zum Beispiel das Maple Mini wie es von seeedstudio und auch ganz günstig in china zu erhalten ist.

Seit gestern Abend habe ic hmic hauch mal damit beschäftigt und hatte auch gleich Probleme. Und genau deswegen beschriebe ich heute mal meinen Web um das kleine Board unter Ubuntu zum laufen zu bekommen.

Für alle die einfach nur eine funktionierende IDE haben wollen habe ich mein vorbereitetes Paket (arduino.deb) hochgeladen. Der Compiler muss allerdings selbst installiert werden.

sudo dpkg -i arduino.deb

Compiler beziehen

Als Compiler kommt der arm-none-eabi-g++ zum Einsatz. Diser wid von GCC ARM Embedded erstellt und gefplegt. Unter Ubuntu stellt sich die Installation mittels Personal Package Archive als recht einfach heraus:

sudo add-apt-repository ppa:team-gcc-arm-embedded/ppa
sudo apt-get update
sudo apt-get install gcc-arm-embedded

Für den Fall dass noch ein alter Compiler installiert ist muss vorher noch sudo apt-get remove gcc-arm-none-eabi ausgeführt werden um ihn zu entfernen. Laut den Entwicklern ist es nicht zu empfehlen einfach upzudaten.

Arduino IDE

Nun muss man sich die Arduino IDE herunterladen. Für das Maple Mini ist es wichtig die Version 1.6.4 zu wählen, da die modifikationen für neuere Versionen noch nicht bereitstehen. Die IDE nun an einene Ort der Wahl entpacken. Ich mache das ganz klassich mit der Maus und File Roller.

STM32Duino

Nun müssen die Erweiterungen darüber gebügelt werden. Auf der seite stm32duino.com gibt es etwas versteckt einen Link zu einem Github Repository von dem man sich das Zip Archiv ziehen kann. Der darin enthaltene Ordner wird in arduino/hardware entpackt.

Erster Start

Gestartet wird bei mir per Console ./arduino im Arduino Verzeichnis. In der IDE unter Werkzeuge taucht nun unter anderem "Maple Mini" auf. Ich habe dann mal ein Beispielprojekt geladen. Datei -> Beispiele -> FreeRTOS821 -> rtos_blink Dann auf Sketch -> Kompilieren.

Der Compiler wird nicht gefunden

Daraufhin wurde ich mit der folgenden Fhlermeldung konfrontiert:

Cannot run program "{runtime.tools.arm-none-eabi-gcc.path}/bin/arm-none-eabi-g++" (in directory "."): error=2, Datei oder Verzeichnis nicht gefunden

Also findet er den Compiler nicht. Er sucht offenbar in einem Ordner Namens {runtime.tools.arm-none-eabi-gcc.path}/bin wobei runtime.tools.arm-none-eabi-gcc.path eine Umgebungsvariable zu sein scheint.

Okay, erstmal gucken wohin wur unseren Compiler installiert haben.

chrimbo@helios:~$ whereis arm-none-eabi-g++
arm-none-eabi-g++: /usr/bin/arm-none-eabi-g++ /usr/bin/X11/arm-none-eabi-g++

Der IDE auf die Sprünge helfen

In der Datei arduino-1.6.4/hardware/Arduino_STM32-master/STM32F1/platform.txt ändern wir compiler.path={runtime.tools.arm-none-eabi-gcc.path}/bin/ zu compiler.path=/usr/bin. Und nochmal auf Kompilieren drücken.

Fehler beim Kompilieren

 In file included from /home/chrimbo/Downloads/arduino-1.6.4/hardware/Arduino_STM32-master/STM32F1/cores/maple/WString.cpp:23:0:
/home/chrimbo/Downloads/arduino-1.6.4/hardware/Arduino_STM32-master/STM32F1/cores/maple/itoa.h:34:65: error: conflicting declaration of C function 'char* utoa(long unsigned int, char*, int)'
 extern char* utoa( unsigned long value, char *string, int radix ) ;
                                                                 ^
In file included from /usr/arm-none-eabi/include/stdlib.h:11:0,
                 from /home/chrimbo/Downloads/arduino-1.6.4/hardware/Arduino_STM32-master/STM32F1/cores/maple/WString.h:26,
                 from /home/chrimbo/Downloads/arduino-1.6.4/hardware/Arduino_STM32-master/STM32F1/cores/maple/WString.cpp:22:
/usr/arm-none-eabi/include/stdlib.h:185:8: note: previous declaration 'char* utoa(unsigned int, char*, int)'
 char * _EXFUN(utoa,(unsigned, char *, int));
        ^
/home/chrimbo/Downloads/arduino-1.6.4/hardware/Arduino_STM32-master/STM32F1/cores/maple/WString.cpp: In constructor 'String::String(unsigned char, unsigned char)':
/home/chrimbo/Downloads/arduino-1.6.4/hardware/Arduino_STM32-master/STM32F1/cores/maple/WString.cpp:74:23: error: call of overloaded 'utoa(unsigned char&, char [9], unsigned char&)' is ambiguous
  utoa(value, buf, base);
                       ^
In file included from /usr/arm-none-eabi/include/stdlib.h:11:0,
                 from /home/chrimbo/Downloads/arduino-1.6.4/hardware/Arduino_STM32-master/STM32F1/cores/maple/WString.h:26,
                 from /home/chrimbo/Downloads/arduino-1.6.4/hardware/Arduino_STM32-master/STM32F1/cores/maple/WString.cpp:22:
/usr/arm-none-eabi/include/stdlib.h:185:8: note: candidate: char* utoa(unsigned int, char*, int)
 char * _EXFUN(utoa,(unsigned, char *, int));
        ^
In file included from /home/chrimbo/Downloads/arduino-1.6.4/hardware/Arduino_STM32-master/STM32F1/cores/maple/WString.cpp:23:0:
/home/chrimbo/Downloads/arduino-1.6.4/hardware/Arduino_STM32-master/STM32F1/cores/maple/itoa.h:34:14: note: candidate: char* utoa(long unsigned int, char*, int)
 extern char* utoa( unsigned long value, char *string, int radix ) ;
              ^
Fehler beim Kompilieren.

Ist das Ergebnis. Irgendwie wird eine Funktion anders deklariert als er es erwartet.

Also ändern wir jeweils in aruino-1.6.4/hardware/Arduino_STM32-master/STM32F1/cores/maple/itoa.h und in itoa.c die Zeilen extern char* utoa(unsigned long value, char *string, int radix) zu extern char* utoa(unsigned value, char *string, int radix) (entfernen von long). Nach einem Neustart sollte alles Funktionieren. Zumindest für das Demo Projekt. Wenn weitere Fehler auftauchen, bitte melden.

Viel Spaß

Vorheriger Beitrag Nächster Beitrag