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
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.
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.
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.
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
.
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++
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.
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ß