<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://www.mikrocontroller.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Avr-frickler</id>
	<title>Mikrocontroller.net - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="https://www.mikrocontroller.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Avr-frickler"/>
	<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/articles/Spezial:Beitr%C3%A4ge/Avr-frickler"/>
	<updated>2026-05-18T06:36:50Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Mini2440&amp;diff=68621</id>
		<title>Mini2440</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Mini2440&amp;diff=68621"/>
		<updated>2012-10-05T08:03:24Z</updated>

		<summary type="html">&lt;p&gt;Avr-frickler: Hinweis für arm-linuc-gcc-4.4.3.tgz hinzugefügt.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://www.friendlyarm.net/products/mini2440 Mini2440 von friendlyarm ]&lt;br /&gt;
&lt;br /&gt;
Das [[Mini2440]] ist ein [[ARM]]-Board mit [http://www.samsung.com/global/business/semiconductor/productInfo.do?fmly_id=229&amp;amp;partnum=S3C2440&amp;amp;ppmi=PartnoSearch s3c2440] &#039;&#039;&#039;S&#039;&#039;&#039;ystem &#039;&#039;&#039;o&#039;&#039;&#039;n &#039;&#039;&#039;C&#039;&#039;&#039;hip von Samsung.&lt;br /&gt;
&lt;br /&gt;
Das &#039;&#039;&#039;Board&#039;&#039;&#039; bietet:&lt;br /&gt;
* 3,5&amp;quot;, 7&amp;quot; Touchscreen-[[TFT]] oder [[VGA]] &amp;quot;Karte&amp;quot;&lt;br /&gt;
* ARM920T, 400Mhz standard Taktfrequenz, bis zu 533Mhz&lt;br /&gt;
* 64MB-1GB NAND Flash (User App/OS), 2MB NOR Flash (BIOS)&lt;br /&gt;
* 64MB RAM&lt;br /&gt;
* Audio (Stereo Out, 2xMono In)&lt;br /&gt;
* SD-Slot&lt;br /&gt;
* [[USB]] Host, USB Device&lt;br /&gt;
* 10/100MBit LAN (DM9000)&lt;br /&gt;
* 3 Serial Ports&lt;br /&gt;
* [[SPI]], [[PWM]], [[I2C]], ...&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
[[Bild:mini2440.jpg|300px]][[Bild:mini2440_35.jpg|300px]][[Bild:mini2440_7.jpg|300px]]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
Als das passende Entwicklungswerkzeug ist ein Linux-Rechner mit passendem Cross-Compiler sowie ein paar Tools vorgesehen.&lt;br /&gt;
Was wirklich benötigt wird:&lt;br /&gt;
* Serial Terminal (picocom, minicom, cutecom, gtkterm, komport, ...)&lt;br /&gt;
* [http://www.mikrocontroller.net/articles/Mini2440#Toolchain Toolchain]&lt;br /&gt;
* s3c_boot_usb oder [ftp://gediam.de/Projekte/Mini2440/mini2440_usb_upload.tar.gz mini2440_usb_upload] (aktueller; mit Status-Anzeige etc.) zum Hochladen von Bootloader, Kernel etc. über USB&lt;br /&gt;
&lt;br /&gt;
Empfehlenswert ausserdem noch:&lt;br /&gt;
* ncurses-dev-Dateien und dialog (Für Kernel-menuconfig)&lt;br /&gt;
* screen, midnight commander&lt;br /&gt;
* Editor mit root-Rechten (z.B. [http://home.in.tum.de/~lazarov/files/research/papers/vi_ausarbeitung.pdf vim])&lt;br /&gt;
&lt;br /&gt;
=== Vorbereitungen am/mit dem Board ===&lt;br /&gt;
&lt;br /&gt;
Ganz wichtig ist es, eine gute Spannungsversorgung zu verwenden. Es kam anscheinend schon öfter vor, dass kleine Spannungseinbrüche das Board aus dem Gleichgewicht bringen.&lt;br /&gt;
Ich verwende normalerweise das mitgelieferte Netzteil oder ein &#039;&#039;&#039;5V&#039;&#039;&#039;/&#039;&#039;&#039;2A&#039;&#039;&#039; Schaltnetzteil, funktionieren beide einwandfrei.&lt;br /&gt;
Gerade das grosse, 7&amp;quot;, Display braucht ein starkes Netzteil.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;ungefährer Stromverbrauch&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Board konfig. || Stromverbrauch&lt;br /&gt;
|-&lt;br /&gt;
| mini2440  || 140mA&lt;br /&gt;
|-&lt;br /&gt;
| mini2440 + 3,5&amp;quot; TFT || 410mA (T35 Display)&lt;br /&gt;
|-&lt;br /&gt;
| mini2440 + 7&amp;quot; TFT || 1000mA&lt;br /&gt;
|-&lt;br /&gt;
| mini2440 + VGA Board || mA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Verbindung zum PC ====&lt;br /&gt;
&lt;br /&gt;
Um vernünftig arbeiten zu können, braucht man auf jeden Fall diese Kabel:&lt;br /&gt;
* 1 USB A&amp;lt;-&amp;gt;USB B-Kabel&lt;br /&gt;
* 1 9 poliges SUB-D Kabel mit zwei Buchsen&lt;br /&gt;
* eventuell einen USB-RS232 Adapter, falls man keinen Anschluss am Rechner hat&lt;br /&gt;
&lt;br /&gt;
Einen Zugriff auf die Konsole hat man - nach Anpassung der IP - über Telnet sowie über die serielle Konsole.&lt;br /&gt;
&lt;br /&gt;
Die serielle Konsole ist in der Standardkonfiguration aktiviert und &#039;&#039;&#039;sollte&#039;&#039;&#039; auch während des Entwickelns &#039;&#039;&#039;immer aktiv&#039;&#039;&#039; sein - so verhindert man ein ungewolltes Ausperren.&lt;br /&gt;
&lt;br /&gt;
==== Netzwerk ====&lt;br /&gt;
Entweder klickt man sich quer durch die chinesische/japanische Software und stellt diese auf Englisch um, oder aber man klickt sich blind zu der Stelle, an der man IP Adresse, Gateway und Netzmaske angeben kann.&lt;br /&gt;
&lt;br /&gt;
Etwa genauso einfach sieht es über die Konsole aus.&amp;lt;br&amp;gt;&lt;br /&gt;
Die folgenden drei Zeilen, dürften das soweit bewerkstelligen, dass das Netzwerk-Device die IP-Adresse &#039;&#039;&#039;192.168.0.55&#039;&#039;&#039;, die Netzmaske &#039;&#039;&#039;255.255.255.0&#039;&#039;&#039; zugeteilt bekommt. Die beiden anderen Anweisungen sagen dem System, welches Netzwerkgerät der Router ist. In diesem Fall &#039;&#039;&#039;192.168.0.1&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Es ist darauf zu achten, was bisher vielleicht schon in der &#039;&#039;/etc/resolv.conf&#039;&#039; steht. Das lässt sich einfach mit &#039;&#039;cat /etc/resolv.conf&#039;&#039; ansehen. Wenn diese bereits den richtigen Inhalt hat, kann man die &#039;&#039;echo &amp;quot;nam...&#039;&#039;-Anweisung weglassen.&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn die resolv.conf nicht existiert oder einen falschen Wert enthält, &#039;&#039;&#039;überschreibt&#039;&#039;&#039; man diese, in dem man nur &#039;&#039;&#039;ein&#039;&#039;&#039; &amp;quot;&#039;&#039;&amp;gt;&#039;&#039;&amp;quot; nach das echo setzt. Stehen dort zwei &amp;quot;&#039;&#039;&amp;gt;&#039;&#039;&amp;quot; wird die nameserver-Info nur an die Datei angehängt und es kann zu Problemen kommen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; $ ifconfig eth0 192.168.0.55 netmask 255.255.255.0&lt;br /&gt;
 $ route add default gw 192.168.0.1&lt;br /&gt;
 $ echo &amp;quot;nameserver 192.168.0.1&amp;quot; &amp;gt; /etc/resolv.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Benutzeraccounts ====&lt;br /&gt;
&lt;br /&gt;
Linux legt wie alle Unix-artigen Betriebssysteme sehr grossen Wert auf eine ordentliche Benutzer- und Rechteverwaltung.&amp;lt;br&amp;gt;&lt;br /&gt;
Daher sollte man sich überlegen, ob es nicht vielleicht besser wäre, wenn man einen extra Benutzer zum Arbeiten/Basteln/Produktiv-Sein/Bier-Trinken/... anlegt.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn nicht unbedingt nötig, sollte man auf das Arbeiten als &#039;&#039;&#039;root&#039;&#039;&#039; (oder auch Superuser, Admin, ...) verzichten. Dadurch dass man uneingeschränkt &#039;&#039;&#039;alle&#039;&#039;&#039; Rechte auf dem System besitzt kann es durch Programmierfehler oder auch Schadsoftware zu ernsthaften Schäden kommen (Datenverlust, eventuell Hardwareschäden).&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Die Entscheidung ob man wirklich root sein muss, ist eigentlich relativ einfach. Sie wird normalerweise &#039;&#039;&#039;immer&#039;&#039;&#039; erstmal mit &#039;&#039;&#039;nein&#039;&#039;&#039; beantwortet.&amp;lt;br&amp;gt;Sollte sich im Lauf der Zeit doch herausstellen, dass man root sein muss, kann man diesen Weg immer noch einschlagen.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Für einige Aufgaben sind jedoch auch root-Rechte erforderlich.&lt;br /&gt;
Zum Beispiel, wenn man direkt mit outporb()/inportb()/outb()/inb()/... arbeiten will.&amp;lt;br&amp;gt;&lt;br /&gt;
Für diese Fälle gibt es ein gutes Tool, es nennt sich [http://de.wikipedia.org/wiki/Sudo sudo].&lt;br /&gt;
Man kann sudo z.&amp;amp;nbsp;B. sagen, dass Benutzer &#039;&#039;xy&#039;&#039; das Programm /usr/bin/blubb mit root-Rechten immer ausführen darf. Benutzer &#039;&#039;ab&#039;&#039; darf das aber nur, wenn er &#039;&#039;&#039;sein&#039;&#039;&#039; Passwort eingibt. Dann gibt es vielleicht noch Benutzer &#039;&#039;zz&#039;&#039;, der alles ohne Passwort als root ausführen darf.&lt;br /&gt;
&lt;br /&gt;
===== Anlegen eines neuen Benutzeraccounts =====&lt;br /&gt;
Ich gehe davon aus, dass ein Image mit busybox auf dem Board installiert ist. Wenn das Image von FriendlyARM installiert ist, ist das der Fall.&lt;br /&gt;
&lt;br /&gt;
Ein Auszug aus der [http://linux.die.net/man/1/busybox Manpage] von busybox:&lt;br /&gt;
&amp;lt;pre&amp;gt;adduser&lt;br /&gt;
    adduser [ OPTIONS ] user_name&lt;br /&gt;
&lt;br /&gt;
    Adds a user to the system&lt;br /&gt;
&lt;br /&gt;
    Options:&lt;br /&gt;
&lt;br /&gt;
    -h DIR          Assign home directory DIR&lt;br /&gt;
    -g GECOS        Assign gecos field GECOS&lt;br /&gt;
    -s SHELL        Assign login shell SHELL&lt;br /&gt;
    -G              Add the user to existing group GROUP&lt;br /&gt;
    -S              create a system user (ignored)&lt;br /&gt;
    -D              Do not assign a password (logins still possible via ssh)&lt;br /&gt;
    -H              Do not create the home directory&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Heisst um einen Benutzer &#039;&#039;banana_joe&#039;&#039; mit dem Heimatverzeichnis &#039;&#039;/home/banana_joe&#039;&#039; anzulegen, muss man folgendes &#039;&#039;&#039;als root&#039;&#039;&#039; eingeben:&lt;br /&gt;
&amp;lt;pre&amp;gt; $ adduser -h /home/banana_joe -s /bin/sh banana_joe&lt;br /&gt;
 $ passwd banana_joe&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&#039;&#039;adduser&#039;&#039; legt den Benutzer an, &#039;&#039;passwd&#039;&#039; vergibt ein Passwort.&lt;br /&gt;
&lt;br /&gt;
=== Übertragen von Daten/Programmen in den Flash-Speicher ===&lt;br /&gt;
&lt;br /&gt;
Das übertragen gestaltet sich auf ganz unterschiedliche Weise. Aus Gründen der Einfachheit werde ich hier nur die sinnvollsten/einfachsten/schnellsten Wege beschreiben. Andere Möglichkeiten wären noch &#039;&#039;lrzsz&#039;&#039;, USB und [[JTAG]].&lt;br /&gt;
Wer zuviel Zeit hat, kann sich ja auch ein eigenes Protokoll auf TCP/IP Ebene basteln oder den Kristallspeicher erfinden ;)&lt;br /&gt;
&lt;br /&gt;
Wenn man eine Datei übertragen hat, muss man sich vergewissern, dass diese auch Ausführrechte besitzt, wenn sie ein Programm oder ein Ordner ist. Die Lese- und Schreibrechte müssen ebenfalls richtig gesetzt sein.&lt;br /&gt;
Normalerweise stimmt dies alles so wie es ist, aber manchmal muss man ein wenig nachhelfen.&lt;br /&gt;
Wenn sich ein Programm nicht ausführen lässt, oder man nicht in einen Ordner wechseln kann, fehlen die Rechte zum Ausführen. Geändert wird das so:&lt;br /&gt;
&amp;lt;pre&amp;gt; $ chmod +x &amp;lt;datei/ordner&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
Da hier aber nicht die Unix-Rechte erklärt werden sollen, verweise ich [http://linuxwiki.de/DateiRechte hierauf]&lt;br /&gt;
&lt;br /&gt;
==== http ====&lt;br /&gt;
Für diese Methode muss natürlich das [http://www.mikrocontroller.net/articles/Mini2440#Netzwerk Netzwerk] eingerichtet sein. Man braucht auf einem PC im Netz einen laufenden Werbserver, auf den man die zu übertragenden Dateien legt.&lt;br /&gt;
Nun kann man diese in ein Verzeichnis seiner Wahl &amp;quot;herunterladen&amp;quot;:&lt;br /&gt;
&amp;lt;pre&amp;gt; $ cd /tmp&lt;br /&gt;
 $ wget http://10.2.5.29/datei&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ftp ====&lt;br /&gt;
Sobald auf dem Board ein FTP-Server läuft, kann man sich &amp;quot;ganz normal&amp;quot; mit einem FTP-Client (zum Beispiel &#039;&#039;&#039;gftp&#039;&#039;&#039; oder &#039;&#039;&#039;ncftp&#039;&#039;&#039;) verbinden und die Dateien hochladen.&lt;br /&gt;
Ebenso kann man sich auch vom Board auf einen FTP-Server verbinden.&lt;br /&gt;
Nennenswerte Programme sind z.B. &#039;&#039;&#039;ftp&#039;&#039;&#039; für die Linux-Konsole, welches im FriendlyARM Image bereits enthalten ist oder der ncurses-basierende Client &#039;&#039;&#039;ncftp&#039;&#039;&#039;. Allerdings sollte man sich für ncurses-Programme per Telnet oder SSH einloggen, da die serielle Konsole nur rudimentäre Terminal-Emulation unterstützt und die Bildschirmausgabe nicht gerade schön wirkt.&lt;br /&gt;
&lt;br /&gt;
==== scp/ssh ====&lt;br /&gt;
Dazu muss zuerst einmal ein SSH Server auf dem Board laufen.&lt;br /&gt;
[http://www.openssh.com openSSH] ist dafür die erste Wahl. Mit [http://matt.ucc.asn.au/dropbear/dropbear.html dropbear] gibt es einige Probleme, da man für SCP auch noch die SCP Binary von openSSH braucht.&lt;br /&gt;
&lt;br /&gt;
Sobald der ssh server läuft, ist alles ganz einfach:&lt;br /&gt;
&amp;lt;pre&amp;gt;$ scp datei user@ziel:/pfad&amp;lt;/pre&amp;gt;&lt;br /&gt;
Bei einem Board mit der IP 10.0.0.69 und dem User &#039;&#039;root&#039;&#039; wäre das die Befehlszeile:&lt;br /&gt;
&amp;lt;pre&amp;gt;$ scp datei root@10.0.0.69:/root&amp;lt;/pre&amp;gt;&lt;br /&gt;
... und die Datei &#039;&#039;datei&#039;&#039; landet im Heimatverzeichnis von &#039;&#039;root&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Um nicht jedes mal das Passwort eingeben zu müssen, lohnt es sich SSH so zu konfigurieren, dass es mit [http://wiki.unixboard.de/index.php/SSH_ohne_Passwort Key-Files] läuft.&lt;br /&gt;
&lt;br /&gt;
=== Toolchain ===&lt;br /&gt;
Toolchains gibt es im Netz und auf der CD/DVD zum Board mehrere fertig übersetzte - natürlich lässt sich die Toolchain auch selbst compilieren.&lt;br /&gt;
Das Risiko beim selbst compilieren einer Toolchain liegt darin, dass man eventuell einen fehlerhaften Compiler produziert.&lt;br /&gt;
Gründe hierfür sind z.B.:&lt;br /&gt;
* fehlende, wichtige Patches&lt;br /&gt;
* Verwenden von Entwicklerversionen mit eventuellen Bugs&lt;br /&gt;
* ein schon fehlerhafter Host-Compiler&lt;br /&gt;
* falsche Einstellungen (Prozessor-Architektur, Optimierung, ...)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Das sogenannte Bootstrappen eines Compilers erkennt solche Probleme in den meisten Fällen. Bootstrappen heißt, dass zuerst mit dem Host-Compiler der Quellcode des neuen übersetzt wird und mit diesem zweiten Compiler wird ein dritter Compiler übersetzt. Wenn dies klappt, kann man im Normalfall davon ausgehen, dass der dritte Compiler in Ordnung ist.&amp;lt;br&amp;gt;&lt;br /&gt;
Jedoch ist dies bei einem Crosscompiler so nicht möglich, da der zweite Compiler ja keinen Code für den Host-Computer, sondern nur für das Target produzieren kann. Somit würde man sich einen Compiler für das Board bauen.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Wer auf Nummer sicher gehen will, nimmt am besten eine der bekannten ARM-Toolchains oder natürlich die von FriendlyARM.&lt;br /&gt;
&lt;br /&gt;
==== old ABI / new EABI ? ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ABI&#039;&#039;&#039; steht für &#039;&#039;&#039;&#039;&#039;A&#039;&#039;&#039;pplication &#039;&#039;&#039;B&#039;&#039;&#039;inary &#039;&#039;&#039;I&#039;&#039;&#039;nterface&#039;&#039;, also eine Art &amp;quot;Standard&amp;quot; wie das compilierte Programm, die Binärdatei, auszusehen hat.&lt;br /&gt;
&lt;br /&gt;
Die ABI ist schon etwas älter und wurde von der EABI (&#039;&#039;&#039;&#039;&#039;E&#039;&#039;&#039;mbedded &#039;&#039;&#039;A&#039;&#039;&#039;pplication &#039;&#039;&#039;B&#039;&#039;&#039;inary &#039;&#039;&#039;I&#039;&#039;&#039;nterface&#039;&#039;) abgelöst.&lt;br /&gt;
&lt;br /&gt;
Da nahezu jede verfügbare Toolchain auf der EABI aufbaut, würde ich diese auch nutzen. Alte, für die ABI, compilierte Programme, lassen sich mit der Kernel-Unterstützung zum Ausführen von ABI Programmen trotzdem noch verwenden.&lt;br /&gt;
&lt;br /&gt;
Durch das verwenden der EABI entstehen normalerweise keine unüberwindbaren Hürden, beim compilieren von älteren Quellcodes. Jedenfalls nicht durch den Unterschied ABI/EABI.&lt;br /&gt;
&lt;br /&gt;
==== Kernel FPE / softfloat ? ====&lt;br /&gt;
&lt;br /&gt;
Irgendwann stolpert jeder, der mit ARM-CPUs und Linux arbeitet über mehrere Fragen.&lt;br /&gt;
* Was ist softfloat/FPE?&lt;br /&gt;
* Was ist schneller?&lt;br /&gt;
* Kann man beides nutzen?&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Was ist softfloat/FPE&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Dadurch, dass eine ARM-CPU normalerweile keine [http://de.wikipedia.org/wiki/Gleitkommaeinheit Gleitkommaeinheit/FPU] besitzt, müssen alle Berechnungen, welche Kommazahlen enthalten in Software gelöst werden. Bei einem PC-System übernimmt diese Aufgabe eben die FPU und ist somit um einiges schneller.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;softfloat&#039;&#039; ist die Umsetzung durch den Compiler.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;FPE&#039;&#039; bedeutet &#039;&#039;&#039;&#039;&#039;F&#039;&#039;&#039;loating &#039;&#039;&#039;P&#039;&#039;&#039;oint &#039;&#039;&#039;E&#039;&#039;&#039;mulation&#039;&#039; und wird durch den Kernel bereit gestellt.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Was ist schneller&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Beim FPE-Verfahren wird der Code, welcher die Gleitkomma-Anweisungen enthält auch so übersetzt. Da die CPU aber keine [http://de.wikipedia.org/wiki/Gleitkommaeinheit FPU] besitzt und somit auch keine Maschinensprachen-Befehle dafür, wird eine &#039;&#039;Exception&#039;&#039; ausgelöst (&amp;quot;Fehler&amp;quot;), welche vom Kernel abgefangen wird.&amp;lt;br&amp;gt;&lt;br /&gt;
Nun steht der Kernel vor der Aufgabe, die Gleitkomma-Operation zu lösen und dem Programm das Ergebnis mitzuteilen. Danach muss er den Code für die Exception noch zu Ende führen und zurückkehren.&amp;lt;br&amp;gt;&lt;br /&gt;
Alles in allem eine sehr aufwendige Methode.&lt;br /&gt;
&lt;br /&gt;
Da bei &#039;&#039;softfloat&#039;&#039; die Gleitkomma-Operationen vom Compiler soweit zerstückelt und wieder zusammengesetzt werden, dass gar keine Kommas mehr nötig sind, ist das in dem meisten Fällen flotter.&lt;br /&gt;
&lt;br /&gt;
Das schnellste, ist natürlich eine Hardware-[http://de.wikipedia.org/wiki/Gleitkommaeinheit FPU], die es aber auf dem [[mini2440]] nicht gibt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Kann man beides nutzen?&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Jein, wenn man im Kernel eine der beiden FPE-Methoden aktiviert hat und man führt ein softfloat-Programm aus, dann wird natürlich softfloat verwendet.&lt;br /&gt;
Wenn man allerdings ein FPE-Programm ausführen will und hat die Unterstützung nicht im Kernel, sieht es schlecht aus.&lt;br /&gt;
&lt;br /&gt;
Also am besten eine FPE auswählen und mit einer softfloat-Toolchain compilieren. Das spart Zeit und Kopfzerbrechen über Invalid Opcode/Segfaults usw. ;)&lt;br /&gt;
&lt;br /&gt;
==== Toolchain aufsetzen ====&lt;br /&gt;
Jenachdem, welche Toolchain man einsetzt, kann es sein, dass man den Compileraufruf anpassen muss.&lt;br /&gt;
Wenn man eine Cross Toolchain installiert hat und nur &#039;&#039;gcc&#039;&#039; auf der Kommandozeile eintippt, wird man höchstwahrscheinlich beim &#039;&#039;lokalen&#039;&#039; gcc, keinem Cross-Compiler, landen. Überprüfen kann man das mit&lt;br /&gt;
&amp;lt;pre&amp;gt; $ which gcc&amp;lt;/pre&amp;gt;&lt;br /&gt;
Die FriendlyARM Toolchain macht es uns da sehr leicht, sie verwendet aussagekräftige Namen für ihre Programme. Bei ihr wäre der gcc Aufruf der:&lt;br /&gt;
&amp;lt;pre&amp;gt; $ arm-linux-gcc&lt;br /&gt;
oder&lt;br /&gt;
 $ arm-none-linux-gnueabi-gcc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ich gehe im kompletten Artikel davon aus, dass man eine funktionierende Toolchain installiert hat, welche über &#039;&#039;arm-linux-...&#039;&#039; zu erreichen ist. Entweder passt man die gcc-Aufrufe von hier an, oder man kann sich auch [http://wiki.unixboard.de/index.php/ManPage:ln symbolische Links] anlegen.&lt;br /&gt;
Zum Schluss sollte das dann ungefähr so aussehen, vom bin-Pfad der Toolchain aus!&lt;br /&gt;
&amp;lt;pre&amp;gt; $ ls -al /usr/local/arm/4.3.2/bin/&lt;br /&gt;
 ...&lt;br /&gt;
 lrwxrwxrwx 1 root root      25 2010-02-25 07:15 arm-linux-ld -&amp;gt; arm-none-linux-gnueabi-ld&lt;br /&gt;
 ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ich selbst arbeite mit der FriendlyARM-Toolchain, werde mich hier also meistens auf diese beziehen, ausser anders vermerkt.&lt;br /&gt;
===== FriendlyARM =====&lt;br /&gt;
[http://www.friendlyarm.net/downloads Hier] als &#039;&#039;ARM-Linux-GCC&#039;&#039; zu finden.&lt;br /&gt;
&lt;br /&gt;
Entpackt verbraucht diese Toolchain ca. 295MB. Mit ihr liessen sich bei mir bereits der Kernel, uboot, sowie zahlreiche Programme kompilieren.&lt;br /&gt;
&lt;br /&gt;
Zuerst wird die Toolchain an die richtige Stelle entpackt, der Pfad mit angegeben und dann ist sie auch schon bereit.&lt;br /&gt;
Dieses Kommando sieht auf den ersten Blick etwas nach Dateisystem-Apokalypse aus, ist allerdings lage nicht so wild. Die Option &#039;&#039;-C /&#039;&#039; sagt, dass direkt ins Wurzelverzeichnis entpackt werden soll, daher benötigt man für diesen Schritt &#039;&#039;&#039;root-Rechte&#039;&#039;&#039;. Die FriendlyARM-Toolchain ist so aufgebaut, dass sie damit nach &#039;&#039;/usr/local/arm/4.3.2/&#039;&#039; entpackt wird, &#039;&#039;&#039;unser Ziel&#039;&#039;&#039; :)&amp;lt;br /&amp;gt; &amp;lt;u&amp;gt;Die Version mit dem gcc 4.4.3 wird nach /opt/FreindlyArm/toolschain/4.4.3 entpackt. Die Pfade sind also entsprechend anzupassen.&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt; $ tar xvfj arm-linux-gcc-4.3.2.tar.gz -C /&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Wenn wir das nun so haben, müssen wir natürlich auch noch sagen, wo er den Compiler findet.&lt;br /&gt;
Dazu öffnet man am besten seine &amp;quot;autorun-Datei&amp;quot; der Shell. In der Konsole ganz einfach mit vim/nano/etc zu erreichen.&lt;br /&gt;
&amp;lt;pre&amp;gt; $ vim /home/user/.bashrc&amp;lt;/pre&amp;gt;&lt;br /&gt;
Dort tragen wir dann &#039;&#039;&#039;ganz ans Ende&#039;&#039;&#039; dies ein:&lt;br /&gt;
&amp;lt;pre&amp;gt;export PATH=$PATH:/usr/local/arm/4.3.2/bin&amp;lt;/pre&amp;gt;&lt;br /&gt;
Kaum gespeichert, startet man eine neue shell (Konsole) und überprüft ob die Pfade stimmen.&lt;br /&gt;
Wenn &#039;&#039;/usr/local/arm/...&#039;&#039; im Pfad enthalten ist, müsste alles stimmen.&lt;br /&gt;
&amp;lt;pre&amp;gt; $ echo $PATH&amp;lt;/pre&amp;gt;&lt;br /&gt;
Tippt man nun &#039;&#039;&#039;nur&#039;&#039;&#039; &#039;&#039;arm-&#039;&#039; und drückt zweimal die Tabtaste, so müsste eine ellenlange Liste mit Programmen wie z.&amp;amp;nbsp;B. &#039;&#039;arm-linux-gcc&#039;&#039; oder &#039;&#039;arm-linux-ld&#039;&#039; erscheinen.&lt;br /&gt;
&amp;lt;pre&amp;gt; $ arm-linux-gcc -v&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== codesourcery =====&lt;br /&gt;
[http://www.codesourcery.com/sgpp/lite/arm/portal/package3696/public/arm-none-linux-gnueabi/arm-2008q3-72-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 codesourcery arm-none-linux-gnueabi]&lt;br /&gt;
&lt;br /&gt;
===== buildroot =====&lt;br /&gt;
&lt;br /&gt;
Von http://www.buildroot.net das letzte stable Release holen, mini-2440 wird unterstützt. Der Build dauert zwar einige Zeit, aber nacher kann man sich an X11 erfreuen.&lt;br /&gt;
&lt;br /&gt;
===== PTXdist =====&lt;br /&gt;
&lt;br /&gt;
PTXdist ist ähnlich wie BuildRoot und unterstützt das Mini2440 seit der Version 2011.05.0. PTXdist verwendet Barebox(UBoot-V2) als Bootloader. Die Projektseite zu dem Mini ist unter http://www.oselas.org/oselas/bsp/pengutronix/mini2440_bsp_en.html zu finden.&lt;br /&gt;
&lt;br /&gt;
Wichtige Links:&lt;br /&gt;
* [http://www.oselas.org/oselas/bsp/pengutronix/download/OSELAS.BSP-Pengutronix-Mini2440-Quickstart.pdf Quickstart Guide geschrieben für das Mini]&lt;br /&gt;
* [http://www.oselas.org/software/ptxdist/download/ PTXdist Downloadverzeichnis]&lt;br /&gt;
* [http://www.pengutronix.de/oselas/toolchain/download/ OSELAS Toolchain Downloadverzeichnis]&lt;br /&gt;
* [http://www.oselas.org/oselas/bsp/pengutronix/download/ Projektdateien für das Mini]&lt;br /&gt;
* [http://www.oselas.org/software/ptxdist/appnotes/OSELAS.BSP-Pengutronix-Generic-arm-Quickstart.pdf How to become a PTXdist Guru] - Erklärung wie z.B. eigene Packete erstellt werden können&lt;br /&gt;
&lt;br /&gt;
=== Cross Compiling ===&lt;br /&gt;
Sobald die Toolchain richtig aufgesetzt ist kann man anfangen, seine Programme zu übersetzten.&lt;br /&gt;
&lt;br /&gt;
Hier folgt nur eine kurze Beschreibung, wer sowas genauer wissen will, sollte sich auf Seiten wie diesen umsehen:&lt;br /&gt;
* http://www.ailis.de/~k/archives/19-ARM-cross-compiling-howto.html&lt;br /&gt;
* http://linux.bytesex.org/cross-compiler.html&lt;br /&gt;
Ausserdem findet man zu vielen embedded-nutzbaren Programmen direkt ein Cross-Compiling Howto mit ein wenig google.&lt;br /&gt;
Ob diese nun für ARM, AVR32, PPC, MIPS, ... sind, ist im Grunde egal, da man ja meistens nur die Architektur anpassen muss.&lt;br /&gt;
&lt;br /&gt;
Es gibt mehrere Möglichkeiten. Die erste ist der direkte Aufruf vom Compiler oder mittels eines &amp;quot;festen&amp;quot; Makefiles. Die zweite, wahrscheinlich Häufigste, ist das ausführen eines configure-Scriptes bevor der make-Vorgang gestartet wird.&lt;br /&gt;
&lt;br /&gt;
* Das einfache aufrufen des Compilers&lt;br /&gt;
Dazu ein einfaches Hello-World Programm:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
   printf(&amp;quot;hiho\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Compiliert wird das Programm ganz einfach so:&lt;br /&gt;
&amp;lt;pre&amp;gt;$ arm-linux-gcc &amp;lt;name.c&amp;gt; -o &amp;lt;name&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
Danach wird die Datei &#039;&#039;&amp;lt;name&amp;gt;&#039;&#039; an das Board [http://www.mikrocontroller.net/wikisoftware/index.php?title=Mini2440&amp;amp;action=submit#.C3.9Cbertragen_von_Daten.2FProgrammen_ins_Flash übertragen]. &lt;br /&gt;
Sobald &#039;&#039;&amp;lt;name&amp;gt;&#039;&#039; auf dem Board ist, kann es ausgeführt werden:&lt;br /&gt;
&amp;lt;pre&amp;gt; $ ./&amp;lt;name&amp;gt;&amp;lt;/pre&amp;gt; &lt;br /&gt;
Eventuell fehlen die Rechte:&lt;br /&gt;
&amp;lt;pre&amp;gt; $ chmod +x &amp;lt;name&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ./configure-Scripte&lt;br /&gt;
Hier sieht es schon ein klein wenig schwieriger aus, ist es aber eigentlich nicht.&lt;br /&gt;
&#039;&#039;Normalerweise&#039;&#039;, aber &#039;&#039;&#039;nicht immer&#039;&#039;&#039;, sieht das compilieren eines Programms für das mini2440 so aus:&lt;br /&gt;
&amp;lt;pre&amp;gt; $ HOST=arm-linux ARCH=arm ./configure --build=arm-linux --your-options&lt;br /&gt;
 $ make&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Man muss dem configure-Script lediglich angeben, für welche Architektur das Makefile konfiguriert werden soll und welchen Compiler er dafür nehmen soll.&lt;br /&gt;
&lt;br /&gt;
=== Linux-Kernel ===&lt;br /&gt;
&lt;br /&gt;
Den Kernel-Quellcode besorgt man sich am besten den Kernel-Fork von buserror.&amp;lt;br&amp;gt; Wenn man nicht auf dem ARM selber kompilieren möchte, benutzt man wie hier im Beispiel einen Cross-Compiler (Siehe oben). Weiterhin wird noch git benötigt, um den Kernel-Quellcode zu laden.&amp;lt;br&amp;gt;Folgende Einstellungen werden im Abschnitt verwendet:&lt;br /&gt;
&amp;lt;pre&amp;gt;  Verzeichnis: /mnt/mini2440&lt;br /&gt;
  CHOST/CROSS-COMPILE: arm-softfloat-linux-gnueabi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Starten wir damit, den Quellcode zu laden:&lt;br /&gt;
&amp;lt;pre&amp;gt;  $ cd /mnt/mini2440&lt;br /&gt;
  $ git clone git://repo.or.cz/linux-2.6/mini2440.git linux-2.6.32-rc8&amp;lt;/pre&amp;gt;&lt;br /&gt;
Dann ab ins Kernel-Verzeichnis und den Kernel mit den Defaults konfigurieren:&lt;br /&gt;
&amp;lt;pre&amp;gt;  $ cd linux-2.6.32-rc8&lt;br /&gt;
  $ CROSS_COMPILE=arm-softfloat-linux-gnueabi- ARCH=arm make mini2440_defconfig&amp;lt;/pre&amp;gt;&lt;br /&gt;
Wenn man noch etwas manuell ändern möchte:&lt;br /&gt;
&amp;lt;pre&amp;gt;  $ CROSS_COMPILE=arm-softfloat-linux-gnueabi- ARCH=arm make menuconfig&amp;lt;/pre&amp;gt;&lt;br /&gt;
Den Kernel anschließend kompilieren:&lt;br /&gt;
&amp;lt;pre&amp;gt;  $ CROSS_COMPILE=arm-softfloat-linux-gnueabi- ARCH=arm make&amp;lt;/pre&amp;gt;&lt;br /&gt;
Die Module bekommen wir wie folgt nach /mnt/mini2440/lib/modules installiert:&lt;br /&gt;
&amp;lt;pre&amp;gt;  $ CROSS_COMPILE=arm-softfloat-linux-gnueabi- ARCH=arm INSTALL_MOD_PATH=/mnt/mini2440 make modules_install&amp;lt;/pre&amp;gt;&lt;br /&gt;
Wenn wir mit u-boot arbeiten, dann benötigen wir das zImage in /mnt/mini2440/kernel-2.6.32-rc8/arch/arm/boot, um daraus mittels mkimage (Siehe uboot) ein uImage zu erstellen.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Kernel-Parameter&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
dem Kernel kann man zum Start noch Parameter für das Board mitgeben:&lt;br /&gt;
&amp;lt;pre&amp;gt;mini2440=[0..9][t][b]&amp;lt;/pre&amp;gt;&lt;br /&gt;
[0..9] bestimmen die Display-Timings (varieren je nach verwendetem Kernel)&lt;br /&gt;
* 0 3,5&amp;quot; Display N35 + TS (alt);&lt;br /&gt;
* 1 7&amp;quot; Display + TS;&lt;br /&gt;
* 2 VGA-Board;&lt;br /&gt;
* 3 3,5&amp;quot; Display T35 + TS;&lt;br /&gt;
* 4 5,6&amp;quot; Display Innolux + TS;&lt;br /&gt;
[t] Touchscreen ist vorhanden;&amp;lt;br&amp;gt;&lt;br /&gt;
[b] Backlight ist vorhanden;&lt;br /&gt;
&lt;br /&gt;
=== root-fs ===&lt;br /&gt;
Um ein eigenes Root-Filesystem zu compilieren, gibt es mehrere Möglichkeiten.&lt;br /&gt;
&lt;br /&gt;
Die einfachsten sind Cross-Umgebungen wie [http://buildroot.uclibc.org/ buildroot] und [http://wiki.openembedded.net/index.php/Main_Page openembedded].&lt;br /&gt;
&lt;br /&gt;
==== Debian ====&lt;br /&gt;
Auch relativ einfach ist es, sich ein fertig compiliertes debian-arm zu installieren. Wenn man das Debian einmal auf seiner SD-Karte laufen hat, ist es kein Problem mehr, alles wie gewohnt mit apt zu installieren usw. usw.&amp;lt;br&amp;gt;&lt;br /&gt;
Allerdings sind gerade die Scripte bei Debian noch nie dafür bekannt gewesen sonderlich schnell zu laufen und es ist sehr sehr träge beim booten.&lt;br /&gt;
&lt;br /&gt;
Ich habe auf meinem mini2440 seit einiger Zeit Debian am Laufen, habe aber sämtliche Init-Scripte durch eigene ersetzt, welche um einiges flotter laufen. Ebenso verzichte ich auf sysvinit und damit aber auch auf sehr nützliche Tools/Funktionen, wie die runlevels und shutdown oder reboot.&lt;br /&gt;
Diese Funktionen müssen auch von meinen eigenen Scripten übernommen werden. Dafür läuft es um einiges schneller.&lt;br /&gt;
&lt;br /&gt;
[http://emqbit.com/deboostrap-debian Hier] eine Anleitung für ein AT91-Linux Board mit Debian. Diese kann fast 1:1 übernommen werden.&lt;br /&gt;
&lt;br /&gt;
Mit X11, Lighttpd, PHP, Python, mc, vim, mpd, alsa, gcc, ... (und auch apache als leidige Abhängigkeit von PHP) braucht mein Debian etwa 550MB auf der SD-Karte.&lt;br /&gt;
Schon ein ordentlicher Brummer, aber egal, es bootet mit eigenen Scripten innerhalb von 15 Sekunden.&lt;br /&gt;
&lt;br /&gt;
==== Gentoo ====&lt;br /&gt;
Ooooh wer daran denkt, hat einfach nur zuviel Zeit. Gentoo in allen Ehren, aber allein PHP zu compilieren dauert gut 4 Stunden... danach habe ich es aufgegeben.&lt;br /&gt;
&lt;br /&gt;
Wer Gentoo installieren kann, wird sich auf dem Mini2440 auch nicht schwerer tun, als auf einem PC. Der Unterschied besteht nur darin, dass man die Stage auf SD Karte packen muss, am normalen Rechner natürlich, und dort dann schon die wichtigsten Einstellungen vornehmen muss.&lt;br /&gt;
&lt;br /&gt;
Mit Portage und den ganzen Dev-Files ist Gentoo ein riesen Gebilde für so ein schwachbrüstiges Board. Eine 4GB SD-Karte ist das Minimum. Außer man bootet zuerst in den Flash und dann chrootet man auf ein Gentoo auf einer USB-Festplatte. uboot kann das, soweit ich weiß, nicht.&lt;br /&gt;
&lt;br /&gt;
=== sys-fs ===&lt;br /&gt;
Sysfs ist ein virtuelles Dateisystem, welches seit dem Linux Kernel 2.6. zur Verfügung gestellt wurde. Der Kernel stellt dabei Konfigurationen, Informationen über Vorrichtungen und Treiber im sogenannten userspace zur Verfügung. Dies Bedeutet einfach, dass Informationen/Geräte an einer festgelegten Stelle im Dateisystem stehen und ausgelesen oder beschrieben werden können.&lt;br /&gt;
&lt;br /&gt;
Über einige Dateien in diesem Dateisystem können GPIOs und z.B. auch LEDs angesteuert werden.&lt;br /&gt;
&lt;br /&gt;
=== Framebuffer ===&lt;br /&gt;
Der Framebuffer ist von Haus aus im FriendlyARM Kernel aktiviert und ohne ihn lässt sich im Linux keine Ausgabe auf dem Display realisieren. Er ist unter &#039;&#039;/dev/fb0&#039;&#039; zu erreichen.&amp;lt;br&amp;gt;&lt;br /&gt;
In der Kernelkonfiguration muss die Framebuffer-Konsole und der Framebuffer-Treiber für das jeweilige Display gewählt werden.&lt;br /&gt;
&lt;br /&gt;
Eine Textausgabe geht ganz einfach über das Terminal, welche auf ihn gemappt ist:&lt;br /&gt;
&amp;lt;pre&amp;gt;$ echo &amp;quot;hello world&amp;quot; &amp;gt; /dev/tty1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Man kann dem Framebuffer diverse Argumente mitgeben, die die Ausgabe auf dem Display beeinflussen. Diese werden über &#039;&#039;fbcon=...&#039;&#039; angeben. Man kann auch mehre Argumente angeben, das sähe zum Beispiel so aus:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root=/dev/mmcblk0p1 console=ttySAC0 fbcon=rotate:1 fbcon=scrollback:0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternativ können mehrere fbcon-Parameter auch durch Komma getrennt werden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
... fbcon=rotate:1,scrollback:0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Scrollback-Buffer ist auf diesem Display eigentlich nicht nötig, da man hier auf dem Mini2440 auf keiner Konsole mit Tastatur usw. arbeitet. Daher schaltet man ihn mit &#039;&#039;fbcon=scrollback:0&#039;&#039; ab, das spart gegenüber dem Standardwert 32kB RAM.&amp;lt;br&amp;gt;&lt;br /&gt;
Wer ihn doch benötigt, kann ihn natürlich trotzdem verwenden. Die Zahl nach dem Doppelpunkt steht für die Größe in Bytes. Ein &#039;&#039;k&#039;&#039; als Suffix steht für Kilobyte, &#039;&#039;fbcon=scrollback:1024k&#039;&#039; entspräche einem Scrollback-Buffer von 1MB.&lt;br /&gt;
&lt;br /&gt;
Für die FB-Konsole gibt es einige weitere Möglichkeiten und viele Optionen lassen sich zur Laufzeit ändern. Hier habe ich nur das Wichtigste beschrieben. Wer darüber mehr erfahren will, sollte sich im Kernel-Quellcode die Datei &#039;&#039;Documentation/fb/fbcon.txt&#039;&#039; ansehen.&lt;br /&gt;
&lt;br /&gt;
==== Font wählen ====&lt;br /&gt;
Die voreingestellte VGA8x16 Font ist etwas groß und es passt nicht allzuviel Text auf das Display. Die am besten lesbare, kleine Schrift ist die Mac6x11 Font.&lt;br /&gt;
In menuconfig folgendes einstellen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-&amp;gt; Device Drivers&lt;br /&gt;
   -&amp;gt; Graphics support&lt;br /&gt;
      -&amp;gt; Console display driver support&lt;br /&gt;
         -&amp;gt; Select compiled-in fonts&lt;br /&gt;
            &amp;lt;*&amp;gt; Framebuffer Console support&lt;br /&gt;
            [*]   Map the console to the primary display device&lt;br /&gt;
            [*]   Framebuffer Console Rotation&lt;br /&gt;
            [*] Select compiled-in fonts&lt;br /&gt;
            [ ]   VGA 8x8 font&lt;br /&gt;
            [ ]   VGA 8x16 font&lt;br /&gt;
            [*]   Mac console 6x11 font (not supported by all drivers)&lt;br /&gt;
            [ ]   console 7x14 font (not supported by all drivers)&lt;br /&gt;
            [ ]   Pearl (old m68k) console 8x8 font&lt;br /&gt;
            [ ]   Acorn console 8x8 font&lt;br /&gt;
            [ ]   Mini 4x6 font&lt;br /&gt;
            [ ] Sparc console 8x16 font&lt;br /&gt;
            [ ] Sparc console 12x22 font (not supported by all drivers)&lt;br /&gt;
            [ ] console 10x18 font (not supported by all drivers)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Werden mehrere Fonts eincompiliert, können sie so ausgewählt werden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(Kernel-Commandline)&lt;br /&gt;
... fbcon=font:xxxx&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Mögliche Werte für &#039;&#039;xxxx&#039;&#039; sind:&lt;br /&gt;
* VGA8x8&lt;br /&gt;
* VGA8x16&lt;br /&gt;
* Mac6x11&lt;br /&gt;
* 7x14&lt;br /&gt;
* 10x18&lt;br /&gt;
* MINI4x6&lt;br /&gt;
* RomanLarge&lt;br /&gt;
* SUN8x16&lt;br /&gt;
* SUN12x22&lt;br /&gt;
* ProFont6x11&lt;br /&gt;
* Acorn8x8&lt;br /&gt;
* PEARL8x8&lt;br /&gt;
&lt;br /&gt;
Bei machen Fonts steht in der Kernel-Menuconfig &#039;&#039;not supported by all drivers&#039;&#039;. Dies erklärt sich so:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Note, not all drivers can handle font with widths not divisible by 8,&lt;br /&gt;
such as vga16fb.&lt;br /&gt;
kernel-src/Documentation/fb/fbcon.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Manche Treiber können nicht mit Fontbreiten/-höhen umgehen, welche nicht durch 8 teilbar sind. Da aber z.B. die MAC6x11 Font auch nicht durch 8 teilbar ist und das Mini2440 das anzeigen kann, gehe ich davon aus, dass alle funktionieren.&lt;br /&gt;
&lt;br /&gt;
==== Rotation ====&lt;br /&gt;
Um das Display zu &amp;quot;drehen&amp;quot; folgendes einstellen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-&amp;gt; Device Drivers&lt;br /&gt;
   -&amp;gt; Graphics support&lt;br /&gt;
      -&amp;gt; Console display driver support&lt;br /&gt;
         -&amp;gt; Framebuffer Console support&lt;br /&gt;
            [*] Framebuffer Console Rotation&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Also Kernel-Parameter im Bootloader dann einstellen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fbcon=rotate:x&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Für &#039;&#039;x&#039;&#039; sind Werte von 0 bis 3 gültig. Jeweils wird um 90° im Uhrzeigersinn weitergedreht.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Hinweis:&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Die Rotation bezieht sich &#039;&#039;&#039;nur&#039;&#039;&#039; auf den Framebuffer. Ein anschließend gestartetes Qtopia (z.B.) bleibt von der gewählten Einstellung unberührt.&lt;br /&gt;
In eigenen Anwendungen, welche eine grafische Oberfläche bereitstellen, lässt sich die Rotation allerdings verwenden, indem man einfach die Datei &#039;&#039;&#039;/proc/cmdline&#039;&#039;&#039; ausliest und den dort gegebenen Wert verwendet, um seine Bildschirmausrichtung anzupassen.&lt;br /&gt;
&lt;br /&gt;
=== Bootloader ===&lt;br /&gt;
Die beiden verfügbaren Bootloader sind vivi (ein &amp;quot;standard-s3c24xx-Linux-Bootloader&amp;quot;) und u-boot, &#039;&#039;&#039;der&#039;&#039;&#039; Bootloader für embedded-Systeme schlechthin ;)&lt;br /&gt;
&lt;br /&gt;
Gemeinsam haben sie eigentlich nur, dass sie &#039;&#039;&#039;a)&#039;&#039;&#039; funktionieren und &#039;&#039;&#039;b)&#039;&#039;&#039; einen Linux-Kernel laden können.&amp;lt;br&amp;gt;&lt;br /&gt;
Der große Nachteil von vivi ist, dass es nur mit [http://en.wikipedia.org/wiki/YAFFS YAFFS2]-Dateisystemen umgehen kann, die auf dem onboard-Flash liegen müssen.&lt;br /&gt;
Sobald der Kernel geladen ist, ist das kein Problem mehr, doch der Kernel muss eben im Flash liegen.&amp;lt;br&amp;gt;&lt;br /&gt;
Um nun z.&amp;amp;nbsp;B. von USB-Festplatten/Sticks und SD-/MMC-Karten booten zu können, muss also u-boot installiert werden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;WARNUNG: An einem Bootloader herumzuspielen, kann sehr böse ausgehen, etwa mit dem unbootbar-mach-Vorgang, der durch zu wenig Nachdenken ausgelöst wird.&lt;br /&gt;
Das mini2440 lässt sich zwar jederzeit per JTAG mit LPT-Adapter zurückholen, ist doch aber eigentlich unnötig ;)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== uboot ====&lt;br /&gt;
&lt;br /&gt;
Der Bootloader uboot wurde von &amp;quot;buserror&amp;quot; soweit an das mini2440 angepasst, dass er mehr oder weniger läuft.&lt;br /&gt;
Für die verschiedenen Boards gelten also auch leicht verschiedene Anweisungen um uboot ins Wasser zu bekommen.&lt;br /&gt;
&lt;br /&gt;
Das git und die Seite von &amp;quot;buserror&amp;quot; ist [http://code.google.com/p/mini2440/ hier] zu finden.&lt;br /&gt;
&lt;br /&gt;
Boards:&lt;br /&gt;
* 64MB &lt;br /&gt;
* 128MB&lt;br /&gt;
* 256MB&lt;br /&gt;
** [[Datei:mini2440.h]]&lt;br /&gt;
** [[Datei:uboot.bin]]&lt;br /&gt;
* 1GB&lt;br /&gt;
&lt;br /&gt;
Den u-boot-Fork von buserror laden wir am besten mit git. Weiterhin benötigen wir einen Cross-Compiler (Siehe oben). Die letzte mir bekannte Version des GCC mit dem sich das &amp;quot;U-Boot&amp;quot; kompilieren lässt ist 4.3.4.&amp;lt;br&amp;gt;Folgende Einstellungen werden im Abschnitt verwendet:&lt;br /&gt;
&amp;lt;pre&amp;gt;  Verzeichnis: /mnt/mini2440&lt;br /&gt;
  CHOST/CROSS-COMPILE: arm-softfloat-linux-gnueabi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Starten wir damit, den Quellcode zu laden:&lt;br /&gt;
&amp;lt;pre&amp;gt;  $ cd /mnt/mini2440&lt;br /&gt;
  $ git clone git://repo.or.cz/u-boot-openmoko/mini2440.git u-boot&amp;lt;/pre&amp;gt;&lt;br /&gt;
Dann ab ins Source-Verzeichnis und mit den Defaults für das Mini2440 konfigurieren:&lt;br /&gt;
&amp;lt;pre&amp;gt;  $ cd u-boot&lt;br /&gt;
  $ CROSS_COMPILE=arm-softfloat-linux-gnueabi- make mini2440_config&amp;lt;/pre&amp;gt;&lt;br /&gt;
Wenn man noch etwas manuell ändern möchte, dann die Datei include/configs/mini2440.h bearbeiten, z.&amp;amp;nbsp;B. für das Mini2440-256MB:&lt;br /&gt;
&amp;lt;pre&amp;gt;  #define USE_920T_MMU		1&lt;br /&gt;
  //#define CONFIG_USE_IRQ		1	/* Needed for USB device! */&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(CONFIG_USE_IRQ auskommentieren, damit das Mini2440 u-boot aus dem RAM ausgeführt werden kann. Leider kann man dann im &amp;quot;U-Boot&amp;quot; kein USB-Gerät mehr ansprechen, um ggfl. mal wieder aufzutauchen).&amp;lt;br&amp;gt;&lt;br /&gt;
Zusätzlich kann man noch defaults für das Environment (bootargs, ip, ...) festlegen.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Anschließend das &amp;quot;U-Boot&amp;quot; kompilieren:&lt;br /&gt;
&amp;lt;pre&amp;gt;  $ CROSS_COMPILE=arm-softfloat-linux-gnueabi- make&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Im Verzeichnis tools findet man mkimage. Damit kann man aus einem zImage (Linux-Kernel) ein uImage machen. Dieses uImage lässt sich von u-boot aus laden (Nand, NFS, TFtp, MMC) und ausführen. &lt;br /&gt;
&amp;lt;pre&amp;gt;  mkimage -A arm -O linux -T kernel -C none -a 0x30008000 -e 0x30008000 -d path-to/zImage path-to/uImage&amp;lt;/pre&amp;gt;&lt;br /&gt;
Jetzt haben wir ein von u-boot ausführbaren Linux-Kernel.&lt;br /&gt;
&lt;br /&gt;
== Multimedia ==&lt;br /&gt;
&lt;br /&gt;
=== Abspielen von Audio-Daten ===&lt;br /&gt;
Mit dem FriendlyARM-Image gibt es zwei Möglichkeiten Audio-Dateien abzuspielen.&amp;lt;br&amp;gt;Die Eine ist, Qtopia zu starten und dort einfach die Datei von SD-Karte, USB, ... auszuwählen und er spielt sie ab.&lt;br /&gt;
&lt;br /&gt;
Die andere ist, die Datei auf der Konsole mit &#039;&#039;madplay dateiname.mp3&#039;&#039; abzuspielen.&amp;lt;br&amp;gt;[http://www.digipedia.pl/man/doc/view/madplay.1/ Hier] die Manpage zu madplay.&lt;br /&gt;
&lt;br /&gt;
==== MPD - der Music Player Daemon ====&lt;br /&gt;
Mit einem eigenen Image oder wenn man sich alles von Hand compilieren will ist der [http://www.musicpd.org/ Music Player Daemon] ein genialer Musik-Player. Er lässt sich durch sehr sehr viele verschiedene Clients steuern und braucht dabei nahezu kaum Rechenleistung.&amp;lt;br&amp;gt;&lt;br /&gt;
Der eigentliche Player läuft vollkommen &amp;quot;versteckt&amp;quot; im Hintergrund. Um ihn zu steuern wird vom Client eine Verbindung aufgebaut und die entsprechenden Befehle gesendet.&amp;lt;br&amp;gt;&lt;br /&gt;
Die Clients müssen noch nicht einmal auf dem Board laufen, können auch auf jedem anderen Rechner im Netzwerk oder Internet sein. Man muss einfach nur die IP und den Port angeben.&lt;br /&gt;
&lt;br /&gt;
Mit gerade mal etwa 100 Zeilen Code lässt sich eine einfach zu nutzende Client-Lib in C programmieren um dann seine eigenen Clients zu schreiben. Damit lässt sich der MPD durch so ziemlich jedes Ereignis an einem Rechner steuern.&lt;br /&gt;
[[MPD Client Programming|hier]] habe ich einen Artikel erstellt, der das wichtige dafür beschreibt.&lt;br /&gt;
&lt;br /&gt;
=== Aufnehmen von Audio-Daten ===&lt;br /&gt;
=== Abspielen von Video-Daten ===&lt;br /&gt;
&lt;br /&gt;
Ich selbst habe noch keinen Player, bis auf den vom originalen Image mit Qtopia gesehen/compiliert, welcher Filme einigermaßen flüssig abspielt.&lt;br /&gt;
&lt;br /&gt;
Mein Ansatz momentan ist, den MPlayer mit fbdev, directfb und sdl mit Framebuffer Ausgabe direkt auf den Framebuffer schreiben zu lassen.&lt;br /&gt;
Allerdings habe ich damit bisher nur sehr sehr magere Ergebnisse gehabt.&lt;br /&gt;
&lt;br /&gt;
=== Kamera-Interface ===&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
Nahezu alles ist über die verschiedenen Header auf dem Board zu erreichen&lt;br /&gt;
=== Pinouts ===&lt;br /&gt;
[[Bild:mini2440_pinout.jpg|450px]]&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Audio / UART&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Pin || Audio IN || CON1, CON2, CON3 || CON8 || J1 (ext. NAND/NOR-sw)&lt;br /&gt;
|-&lt;br /&gt;
| 1   || IN       || TX               || VIN  || NORBOOT   &lt;br /&gt;
|-&lt;br /&gt;
| 2   || GND      || RX               || GND  || OM0      &lt;br /&gt;
|-&lt;br /&gt;
| 3   || IN       || 5V               || GND  || NANDBOOT &lt;br /&gt;
|-&lt;br /&gt;
| 4   ||          || GND              || VDD5V||          &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;CON4 GPIO, CON5&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Pin || CON5 || CON4 GPIO || CAMERA || CON12 || JTAG&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 5V  || 5V || SDA || EINT8/GPG0  || 3.3V &lt;br /&gt;
|-&lt;br /&gt;
| 2 || GND || 3.3V || SCL|| EINT11/GPG3 ||  3.3V&lt;br /&gt;
|-&lt;br /&gt;
| 3 || EINT17|| GND || EINT20|| EINT13/GPG5  || /TRST&lt;br /&gt;
|-&lt;br /&gt;
| 4 || EINT18|| /RESET || CAMRST|| EINT14/GPG6  || /RESET&lt;br /&gt;
|-&lt;br /&gt;
| 5 || EINT3|| AIN0 || CAM_CLOCK|| EINT15/GPG7  || TDI&lt;br /&gt;
|-&lt;br /&gt;
| 6 || EINT9|| AIN1 || CAM_HREF|| EINT19/GPG11 || TDO&lt;br /&gt;
|-&lt;br /&gt;
| 7 || /GCS1|| AIN2 || CAM_VSYNC|| 3.3V || TMS&lt;br /&gt;
|-&lt;br /&gt;
| 8 || /GCS2 || AIN3 || CAM_PCLK|| GND || GND&lt;br /&gt;
|-&lt;br /&gt;
| 9  || /GCS3 || EINT0 || CAMDATA7|| ||TCK&lt;br /&gt;
|-&lt;br /&gt;
|  10 || /GCS5|| EINT1 || CAMDATA6|| ||GND&lt;br /&gt;
|-&lt;br /&gt;
| 11  || L/OE|| EINT2 || CAMDATA5  &lt;br /&gt;
|-&lt;br /&gt;
|  12 || L/WE|| EINT3 || CAMDATA4  &lt;br /&gt;
|-&lt;br /&gt;
|  13 || /WAIT|| EINT4 || CAMDATA3  &lt;br /&gt;
|-&lt;br /&gt;
|   14|| /RESET|| EINT5 || CAMDATA2  &lt;br /&gt;
|-&lt;br /&gt;
|  15 || /XDACK0|| EINT6 || CAMDATA1  &lt;br /&gt;
|-&lt;br /&gt;
|  16 || /XDREQ0|| EINT8 || CAMDATA0 &lt;br /&gt;
|-&lt;br /&gt;
|  17 || LADDR0|| EINT9 || 3.3V &lt;br /&gt;
|-&lt;br /&gt;
| 18  ||LADDR1|| EINT11 || VDDCAM &lt;br /&gt;
|-&lt;br /&gt;
|  19 ||LADDR2|| EINT13 || 1.8V &lt;br /&gt;
|-&lt;br /&gt;
|  20 ||LADDR3|| EINT14 || GND &lt;br /&gt;
|-&lt;br /&gt;
|   21||LADDR4|| EINT15 ||  &lt;br /&gt;
|-&lt;br /&gt;
|   22||LADDR5|| EINT17 ||  || &lt;br /&gt;
|-&lt;br /&gt;
|   23||LADDR6|| EINT18&lt;br /&gt;
|-&lt;br /&gt;
|   24||LADDR24|| EINT19&lt;br /&gt;
|-&lt;br /&gt;
|   25||LDATA0||MISO&lt;br /&gt;
|-&lt;br /&gt;
|   26||LDATA1||MOSI&lt;br /&gt;
|-&lt;br /&gt;
|   27||LDATA2||CLOCK&lt;br /&gt;
|-&lt;br /&gt;
|   28||LDATA3||SS&lt;br /&gt;
|-&lt;br /&gt;
|   29||LDATA4|| SCL&lt;br /&gt;
|-&lt;br /&gt;
|   30||LDATA5|| SDA&lt;br /&gt;
|-&lt;br /&gt;
|   31||LDATA6||GPB0&lt;br /&gt;
|-&lt;br /&gt;
|   32||LDATA7||GPB1&lt;br /&gt;
|-&lt;br /&gt;
|33   ||LDATA8||CLKOUT0&lt;br /&gt;
|-&lt;br /&gt;
|  34 ||LDATA9||CLKOUT1&lt;br /&gt;
|-&lt;br /&gt;
|   35||LDATA10&lt;br /&gt;
|-&lt;br /&gt;
|36   ||LDATA11&lt;br /&gt;
|-&lt;br /&gt;
|  37 ||LDATA12&lt;br /&gt;
|-&lt;br /&gt;
| 38  ||LDATA13&lt;br /&gt;
|-&lt;br /&gt;
|  39 ||LDATA14&lt;br /&gt;
|-&lt;br /&gt;
|  40 ||LDATA15&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Steckverbinder ===&lt;br /&gt;
Digi-Key:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Connector      || Hersteller || Artikelnummer || Teilenummer&lt;br /&gt;
|-&lt;br /&gt;
| CON1,2,3,8     || JST Sales America Inc || PHR-4               ||  [http://search.digikey.com/scripts/DkSearch/dksus.dll?keywords=455-1164-ND 	455-1164-ND]  &lt;br /&gt;
|-&lt;br /&gt;
| Audio IN, J1   || JST Sales America Inc || PHR-3               || [http://search.digikey.com/scripts/DkSearch/dksus.dll?keywords=455-1126-ND 455-1126-ND]      &lt;br /&gt;
|-&lt;br /&gt;
|                || JST Sales America Inc || SPH-002T-P0.5L      || [http://search.digikey.com/scripts/DkSearch/dksus.dll?Detail&amp;amp;name=455-2148-1-ND 455-2148-1-ND]&lt;br /&gt;
|-&lt;br /&gt;
| CON4           || Sullins Connector Solutions || SFH213-PPPN-D17-ID-BK-M181 || [http://search.digikey.com/scripts/DkSearch/dksus.dll?keywords=S9061-ND S9061-ND]&lt;br /&gt;
|-&lt;br /&gt;
|                || Sullins Connector Solutions || SBH21-NBPN-D17-ST-BK || [http://search.digikey.com/scripts/DkSearch/dksus.dll?keywords=S9023-ND	S9023-ND]&lt;br /&gt;
          &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== onboard Hardware ====&lt;br /&gt;
Sobald man mal anfangen möchte, sich mit der Hardware auseinanderzusetzen, sollte man natürlich auch wissen wie, was und wo dran.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;... an welchem EINT war ...  Low oder High aktiv? ...&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Bild:mini2440_eeprom.jpg||300px]][[Bild:mini2440_buttons.jpg||300px]][[Bild:mini2440_leds.jpg||300px]][[Bild:mini2440_poti.jpg||300px]]&lt;br /&gt;
[[Bild:mini2440_buzzer.jpg||300px]]&lt;br /&gt;
&lt;br /&gt;
=== [[UART]] ===&lt;br /&gt;
Die S3C2440 besitzt insgesamt drei unabhängige UARTs.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Die Spannungspegel der Rx und Tx Pins sind etwas verwirrend. Auf dem Stecker liegen 5V an, doch das Datenblatt sagt nicht, ob die Rx und Tx Pins auch 5V-Tolerant sind. Daher sollte man das ausschliessen. Ein Spannungsteiler aus 3k3 und 2k2 an der Rx-Leitung vom Prozessor sollte das Problem beheben, solange der Empfänger an der Tx-Leitung 3.3V noch als H-Signal versteht.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;UARTs&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! UART || 64 byte FIFO || IrDA 1.0 || RTS/CTS Leitungen|| Spannungspegel (L - H)&lt;br /&gt;
|-&lt;br /&gt;
| uart0 || * || * || * || 0V - 3,3V / RS232&lt;br /&gt;
|-&lt;br /&gt;
| uart1 || * || * || * || 0V - 3,3V&lt;br /&gt;
|-&lt;br /&gt;
| uart2 || * || * || x || 0V - 3,3V&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Über die Ansteuerung auf Hardwareebene braucht man sich, solange man ein Betriebssystem verwendet, &#039;&#039;&#039;keine&#039;&#039;&#039; Gedanken zu machen.&lt;br /&gt;
Unter Linux sind die drei UARTs über ttySAC0, ttySAC1 und ttySAC2 zu erreichen.&lt;br /&gt;
&lt;br /&gt;
=== [[LED|LEDs]] ===&lt;br /&gt;
Wenn der Kerneltreiber für die LEDs mit eincompiliert wurde, ist es ein leichtes, die LEDs mit einer kleinen Hand voll C-Zeilen anzusprechen.&lt;br /&gt;
&lt;br /&gt;
Man öffnet die Gerätedatei und mittels &#039;&#039;ioctl()&#039;&#039; schreibt man die Werte in die Gerätedatei.&lt;br /&gt;
&lt;br /&gt;
Der Aufruf von ioctl sieht so aus:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
ioctl(descriptor, AN/AUS, LED_NUMMER);&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
Also muss man um zum Beispiel LED0 anzuschalten für AN/AUS &#039;&#039;&#039;1&#039;&#039;&#039; angeben und für LED_NUMMER die &#039;&#039;&#039;0&#039;&#039;&#039;.&lt;br /&gt;
Dafür habe ich im Abschnitt C-Code zwei Beispiel-Funktionen geschrieben. Die erste erwartet AN/AUS und LED_NUMMER als Argument, die Zweite erwartet eine Bitmaske, was mir persönlich doch besser gefällt ;)&lt;br /&gt;
&lt;br /&gt;
==== C-Code ====&lt;br /&gt;
&amp;lt;c&amp;gt;int setleds(int on, int led_no) {&lt;br /&gt;
	int led_fd = open(&amp;quot;/dev/leds0&amp;quot;, 0);&lt;br /&gt;
	if (led_fd &amp;lt; 0) { led_fd = open(&amp;quot;/dev/leds&amp;quot;, 0); }&lt;br /&gt;
	if (led_fd &amp;lt; 0) { perror(&amp;quot;open device leds&amp;quot;); return(-1); }&lt;br /&gt;
	&lt;br /&gt;
	ioctl(led_fd, on, led_no);&lt;br /&gt;
	&lt;br /&gt;
	close(led_fd);&lt;br /&gt;
	return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int setledmask(int mask) {&lt;br /&gt;
	int led_fd = open(&amp;quot;/dev/leds0&amp;quot;, 0);&lt;br /&gt;
	if (led_fd &amp;lt; 0) { led_fd = open(&amp;quot;/dev/leds&amp;quot;, 0); }&lt;br /&gt;
	if (led_fd &amp;lt; 0) { perror(&amp;quot;open device leds&amp;quot;); return(-1); }&lt;br /&gt;
	&lt;br /&gt;
	if(mask &amp;amp; 0x01) ioctl(led_fd, 1, 0); else ioctl(led_fd, 0, 0);&lt;br /&gt;
	if(mask &amp;amp; 0x02) ioctl(led_fd, 1, 1); else ioctl(led_fd, 0, 1);&lt;br /&gt;
	if(mask &amp;amp; 0x04) ioctl(led_fd, 1, 2); else ioctl(led_fd, 0, 2);&lt;br /&gt;
	if(mask &amp;amp; 0x08) ioctl(led_fd, 1, 3); else ioctl(led_fd, 0, 3);&lt;br /&gt;
	&lt;br /&gt;
	close(led_fd);&lt;br /&gt;
	return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== LED-sysfs ====&lt;br /&gt;
Bei aktiviertem  sys-fs Kerneltreiber für LEDs, kann man diese im Verzeichnis &#039;/sys/class/leds/&#039; finden und ansteuern. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /sys/class/leds/           # wechselt in den Ordner&lt;br /&gt;
ls -lsa                       # listet alle Vorhandenen LEDs auf&lt;br /&gt;
echo 1 &amp;gt; led4/brightness      # LED AN&lt;br /&gt;
echo 0 &amp;gt; led4/brightness      # LED AUS&lt;br /&gt;
# oder&lt;br /&gt;
echo 1 &amp;gt; /sys/class/leds/led4/brightness      # LED AN&lt;br /&gt;
echo 0 &amp;gt; /sys/class/leds/led4/brightness      # LED AUS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[I2C]] ===&lt;br /&gt;
==== i2ctools ====&lt;br /&gt;
Die [http://www.lm-sensors.org/wiki/I2CTools i2ctools] sind Linux-Userspace Programme, welche dafür gedacht sind, auf einfache Weise auf der Konsole mit I2C Geräten zu kommunizieren.&lt;br /&gt;
==== 24xx [[EEPROM]]s ====&lt;br /&gt;
==== [[Port-Expander]] ====&lt;br /&gt;
===== PCF8574 / PCF8574a =====&lt;br /&gt;
Einen [[PCF8574]] anzusteuern ist sehr einfach. Mit den i2ctools kann man damit erste Tests machen um zu sehen, ob er funktioniert.&lt;br /&gt;
&lt;br /&gt;
Der Port-Expander wird mit den 3.3V versorgt, welche das Board liefert, SDA und SCL natürlich ebenfalls anschliessen.&lt;br /&gt;
Ich habe alle drei Adress-Pins auf &#039;&#039;&#039;L&#039;&#039;&#039; gelegt und erhalte von &#039;&#039;i2cdetect&#039;&#039; so die Adresse &#039;&#039;&#039;0x38&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== [[SPI]] ===&lt;br /&gt;
=== [[PWM]] ===&lt;br /&gt;
==== onboard buzzer ====&lt;br /&gt;
=== [[ADC]] ===&lt;br /&gt;
==== Touchscreen ====&lt;br /&gt;
Wenn der Kernel-Treiber installiert ist, kann der Touchscreen wie z. B. jede Maus über das event-Interface angesprochen werden.&lt;br /&gt;
Normalerweise liegt der Touchscreen auf &#039;&#039;/dev/input/event0&#039;&#039;.&lt;br /&gt;
Diese Gerätedatei muss man auch der tslib angeben.&lt;br /&gt;
&lt;br /&gt;
==== LCD Backlight ====&lt;br /&gt;
Wenn der Kernel-Treiber installiert ist, kann die Hintergrundbeleuchtung des Displays einfach über die entsprechende Geräte-Datei ein- bzw. ausgeschaltet werden.&amp;lt;br&amp;gt;&lt;br /&gt;
einschalten: &amp;lt;pre&amp;gt;# echo 1 &amp;gt; /dev/backlight&amp;lt;/pre&amp;gt;&lt;br /&gt;
ausschalten: &amp;lt;pre&amp;gt;# echo 0 &amp;gt; /dev/backlight&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== onboard Poti ====&lt;br /&gt;
Hierzu muss wieder der Kerneltreiber mit eincompiliert sein, damit man das Gerät &#039;&#039;/dev/adc&#039;&#039; hat. Im FriendlyARM-Kernel ist der Treiber fest mit drin.&lt;br /&gt;
&lt;br /&gt;
Die Funktion getpoti() liest in einer Schleife mehrmals den Potiwert ein und bildet einen Mittelwert, der zurückgegeben wird.&lt;br /&gt;
Die Anzahl der Werte, aus denen der Mittelwert gebildet wird, wird mit dem #define &#039;&#039;LOOPs&#039;&#039; angegeben.&lt;br /&gt;
===== C-Code =====&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
#define LOOPS 12 // 12 Werte fuer Mittelwert&lt;br /&gt;
&lt;br /&gt;
unsigned int getpoti() {&lt;br /&gt;
	int value, i, fd = open(&amp;quot;/dev/adc&amp;quot;, 0);&lt;br /&gt;
	unsigned int add = 0, ret;&lt;br /&gt;
	if (fd &amp;lt; 0) { printf(&amp;quot;cant open adc device!\n&amp;quot;); return -1; }&lt;br /&gt;
	&lt;br /&gt;
	for(i = 0; i &amp;lt; LOOPS; i++) {&lt;br /&gt;
		char buffer[30];&lt;br /&gt;
		int len = read(fd, buffer, sizeof buffer -1);&lt;br /&gt;
		if (len &amp;gt; 0) {&lt;br /&gt;
			buffer[len] = &#039;\0&#039;;&lt;br /&gt;
			value = -1;&lt;br /&gt;
			sscanf(buffer, &amp;quot;%d&amp;quot;, &amp;amp;value);&lt;br /&gt;
			add += value;&lt;br /&gt;
		} else {&lt;br /&gt;
			printf(&amp;quot;cant read from adc device!\n&amp;quot;);&lt;br /&gt;
                        close(fd);&lt;br /&gt;
			return -1;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	close(fd);&lt;br /&gt;
	ret = add / LOOPS;&lt;br /&gt;
	return ret;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== GPIO ===&lt;br /&gt;
Da der S3C2440 über sage und schreibe &#039;&#039;&#039;130&#039;&#039;&#039; GPIOs verfügt, mit diversen Funktionen, wie I2C, PWM, ..., das setzen der &amp;quot;Drive Strength&amp;quot; (maximaler Strom an machen Pins), ... ist das Ganze nicht mehr so einfach wie bei einem AVR.&lt;br /&gt;
Der Bastler sollte hier schon genau wissen was er will vorallem das [[Media:S3C2440_datasheet_samsung.pdf|Datenblatt]] zu Rate ziehen.&lt;br /&gt;
Die Funktionen und Register des Chips sind ab Seite &#039;&#039;&#039;274&#039;&#039;&#039; (Kapitel &#039;&#039;IO-Ports&#039;&#039;) zu finden.&lt;br /&gt;
Die elektrischen Daten sind ab Seite &#039;&#039;&#039;554&#039;&#039;&#039; zu finden.&lt;br /&gt;
&lt;br /&gt;
==== C-Code für die onboard-Buttons ====&lt;br /&gt;
Hierfür wird wird der Kerneltreiber benötigt. Im FriendlyARM-Kernel ist dieser fest mit drin.&lt;br /&gt;
&lt;br /&gt;
Wenn die Buttons eingelesen werden, erhält man für jeden nicht gerdrücken Buttons &#039;&#039;0x30&#039;&#039; und für jeden gedrückten Button &#039;&#039;0x31&#039;&#039;.&lt;br /&gt;
Die Funktion liest die Buttons ein und vergleicht den Wert, sobald 0x31 kommt, ist sie beendet. Die Buttons sind von 0 bis 5 nummeriert.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
int wait4button(int button) {&lt;br /&gt;
	char btn[6] = {&#039;0&#039;, &#039;0&#039;, &#039;0&#039;, &#039;0&#039;, &#039;0&#039;, &#039;0&#039;};&lt;br /&gt;
	int fd = open(&amp;quot;/dev/buttons&amp;quot;, 0);&lt;br /&gt;
	if (fd &amp;lt; 0) { printf(&amp;quot;cant open buttons device&amp;quot;); return(-1); }&lt;br /&gt;
&lt;br /&gt;
	while(btn[button] == 0x30) {	// if a button is released, we read 0x30, if pressed 0x31&lt;br /&gt;
		if (read(fd, btn, sizeof btn) != sizeof btn) {&lt;br /&gt;
			printf(&amp;quot;cant read buttons!&amp;quot;);&lt;br /&gt;
			close(fd);&lt;br /&gt;
			return(-1);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	close(fd);&lt;br /&gt;
	return 0;&lt;br /&gt;
}&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== GPIO-sysfs ====&lt;br /&gt;
Bei aktiviertem  sys-fs Kerneltreiber für GPIOs, kann man diese im Verzeichnis &#039;/sys/class/gpio/&#039; finden und ansteuern. Eine gute Erklärung ist dazu [http://www.avrfreaks.net/wiki/index.php/Documentation:Linux/GPIO#gpio-sysfs hier] zu finden.&lt;br /&gt;
&lt;br /&gt;
=== Real Time Clock ===&lt;br /&gt;
Für die Real Time Clock, welche fest im Prozessor integriert ist, gibt es einen Kerneltreiber.&lt;br /&gt;
&lt;br /&gt;
Lesen/Setzen lässt sich sich sehr einfach mit dem Tool [http://linux.die.net/man/8/hwclock hwclock].&lt;br /&gt;
=== Beispielprogramme ===&lt;br /&gt;
&lt;br /&gt;
Hier habe ich ein paar kleine Beispielprogramme im Quellcode hochgeladen.&lt;br /&gt;
&lt;br /&gt;
* [[Media:led_adc.c]] Herzschlag auf den LEDs, Geschwindigkeit mit Poti einstellen. Compilieren mit &#039;&#039;arm-linux-gcc led_adc.c -o led_adc&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Andere Betriebssysteme ==&lt;br /&gt;
&lt;br /&gt;
=== uCos2 ===&lt;br /&gt;
=== Windows CE ===&lt;br /&gt;
=== FreeRTOS ===&lt;br /&gt;
=== emdedian ===&lt;br /&gt;
&lt;br /&gt;
== Software mit Betriebssystem ==&lt;br /&gt;
* Grafische Oberfläche mit der SDL-Bibliothek erstellen:&amp;lt;br&amp;gt;[[Mini2440 SDL GUI Programmierung]]&lt;br /&gt;
&lt;br /&gt;
== Software ohne Betriebssystem ==&lt;br /&gt;
&lt;br /&gt;
=== Entwicklungsumgebung ===&lt;br /&gt;
=== Beispiele ===&lt;br /&gt;
&lt;br /&gt;
== Wo kaufen? ==&lt;br /&gt;
&lt;br /&gt;
Zu beziehen ist das Board entweder über Ebay, meist aus China, oder bei [http://www.watterott.com/de/FriendlyARM Watterott].&lt;br /&gt;
&lt;br /&gt;
== Eigene Displays an das Mini anschließen ==&lt;br /&gt;
&lt;br /&gt;
* Displays mit LVDS Anschluss können z.B. mit diesem selbst gebauten Adapter an das Mini angeschlossen werden. http://www.mikrocontroller.net/topic/217774#new&lt;br /&gt;
&lt;br /&gt;
== Links und Quellen ==&lt;br /&gt;
* [http://www.friendlyarm.net/products/mini2440 Übersicht auf der Friendlyarm Seite]&lt;br /&gt;
=== Howtos ===&lt;br /&gt;
* [http://wiki.linuxmce.org/index.php/Mini2440 Kernel, u-boot und qemu-mini2440 compilieren]&lt;br /&gt;
* [[Mini2440 SDL GUI Programmierung]]&lt;br /&gt;
&lt;br /&gt;
=== Repositories ===&lt;br /&gt;
&lt;br /&gt;
* [http://code.google.com/p/mini2440/downloads/list Emdebian+Angstrom Images, s3c_boot_usb]&lt;br /&gt;
&lt;br /&gt;
* [http://programmers-projects.de/node/10 Programmer&#039;s-Projects Mini2440 Projekt (überarbeitetes USB-Upload-Tool für Linux und mehr)]&lt;br /&gt;
&lt;br /&gt;
=== Youtube und ähnliche ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:ARM-Boards]]&lt;br /&gt;
[[Category:Linux-Boards]]&lt;/div&gt;</summary>
		<author><name>Avr-frickler</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=STM32F4-Discovery&amp;diff=63795</id>
		<title>STM32F4-Discovery</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=STM32F4-Discovery&amp;diff=63795"/>
		<updated>2012-02-03T19:49:58Z</updated>

		<summary type="html">&lt;p&gt;Avr-frickler: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieser Wiki-Artikel soll den Einstieg in die Prozessorfamilie STM32 von [http://www.st.com STMicroelectronics] erleichtern. Der Artikel begleitet dich von der Installation der benötigten Software bis hin zum flashen des Beispiels in den Prozessor.&amp;lt;br/&amp;gt;&lt;br /&gt;
Da es für Windows schon einiges im Internet zu finden gibt, wird die Installation der Toolchain für Linux beschrieben. Die verwendeten Tools sind allerdings als Quelltext oder als Windows-Installation verfügbar, somit lassen sich die meisten Schritte auch auf Windows-Betriebssystemen nachvollziehen.&lt;br /&gt;
== Hardware ==&lt;br /&gt;
Das in diesem Artikel verwendete Board [http://www.st.com/internet/evalboard/product/252419.jsp STM32F4-Discovery] lässt sich z.B. bei [http://www.watterott.com/de/STM32F4Discovery Watterott] bestellen.&lt;br /&gt;
Es lassen sich auch andere Boards verwenden, allerdings müssen die Beispiele dem Schaltplan entsprechend angepasst werden.&lt;br /&gt;
== Software ==&lt;br /&gt;
Um das Dateisystem möglicht sauber zu halten installiere ich hier sämtliche Software in das Unterverzeichnis /opt welches für solche Installationen vorgesehen ist. Damit auf dieses Verzeichnis schreibend zugegriffen werden darf sind root-Rechte erforderlich. Ich werde vor den Befehlen immer den Prompt schreiben damit zu erkennen ist welche Rechte notwendig sind.&lt;br /&gt;
&lt;br /&gt;
Es ist natürlich auch möglich alles in sein Heimat-Verzeichnis zu schreiben, hier kommt man dann grössten Teils ohne root-Rechte aus. Das muss aber jeder für sich selbst entscheiden wie er es mag.&lt;br /&gt;
&lt;br /&gt;
Nicht alle Linux-Distributionen sind gleich, ich arbeite hier mit einem (fast) frischem Lubuntu 11.10. Der grösste Teil sollte also mit Ubuntu und Debian-Systemen funktionieren. Für andere Distributionen kann man den entsprechenden Abschnitt editieren oder auf der [[Diskussion:STM32F4-Discovery]] zu diesem Artikel vermerken.&lt;br /&gt;
==== Sourcery CodeBench Lite Edition for ARM EABI ====&lt;br /&gt;
[[Datei:Sup_processors.jpg|thumb|left]]&lt;br /&gt;
Als erstes benötigen wir die Toolchain mit Compiler &amp;amp; Linker. Hier verwenden wir die [http://www.mentor.com/embedded-software/sourcery-tools/sourcery-codebench/editions/lite-edition/ Sourcery Codebench von Mentor]. In der Auswahlbox &amp;quot;Supported Prozessors&amp;quot; wählt man in der Rubrik &amp;quot;ARM processors&amp;quot; den Punkt &amp;quot;Download the EABI Release &amp;gt;&amp;quot; aus.&lt;br /&gt;
&lt;br /&gt;
Leider muss man sich registrieren. Nach der Registrierung erhält man einen Link per E-Mail zur Downloadseite. Man wählt das &amp;quot;Recommended Release&amp;quot; aus und lädt dort die Datei &amp;quot;IA32 GNU/Linux TAR&amp;quot; herunter.&lt;br /&gt;
&lt;br /&gt;
[https://sourcery.mentor.com/sgpp/lite/arm/portal/package9740/public/arm-none-eabi/arm-2011.09-69-arm-none-eabi-i686-pc-linux-gnu.tar.bz2 Direktlink Linux] [https://sourcery.mentor.com/sgpp/lite/arm/portal/package9741/public/arm-none-eabi/arm-2011.09-69-arm-none-eabi-i686-mingw32.tar.bz2 Direktlink Windows]&lt;br /&gt;
&lt;br /&gt;
Die Datei muss einfach nur an einem beliebigem Ort entpackt werden und die Umgebungsvariable PATH erweitert werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux:/home/user/Downloads# mkdir /opt/CodeSourcery&lt;br /&gt;
root@linux:/home/user/Downloads# cd /opt/CodeSourcery&lt;br /&gt;
root@linux:/opt/CodeSourcery# tar xvf /home/user/Downloads/arm-2011.09-69-arm-none-eabi-i686-pc-linux-gnu.tar.bz2&lt;br /&gt;
root@linux:/opt/CodeSourcery# ls&lt;br /&gt;
arm-2011.09&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anpassen der Umgebungsvariable PATH, die Anpassung ermöglicht es Eclipse den Compiler im Dateisystem zu finden ohne den absoluten Pfad anzugeben.&amp;lt;br /&amp;gt;&lt;br /&gt;
Es gibt verschiedene Orte wo sich die Variable anpassen lässt. Auf meinem System habe ich die Datei /etc/environment angepasst.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux:/opt/CodeSourcery# echo PATH=\&amp;quot;$PATH:/opt/CodeSourcery/arm-2011.09/bin\&amp;quot; &amp;gt;&amp;gt; /etc/environment&lt;br /&gt;
root@linux:/opt/CodeSourcery# source /etc/environment&lt;br /&gt;
root@linux:/opt/CodeSourcery# arm-none-eabi-gcc --version&lt;br /&gt;
arm-none-eabi-gcc (Sourcery CodeBench Lite 2011.09-69) 4.6.1&lt;br /&gt;
Copyright (C) 2011 Free Software Foundation, Inc.&lt;br /&gt;
This is free software; see the source for copying conditions.  There is NO&lt;br /&gt;
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer gerne mit der Konsole &amp;amp; vi/emacs arbeitet kann sofort zum Abschnitt stlink springen, für die Klickibunti-Fraktion folgt jetzt die Installation der IDE.&lt;br /&gt;
==== Eclipse IDE ====&lt;br /&gt;
Nach der Installation der Toolchain folgt jetzt die IDE hier habe ich mich für Eclipse entschieden. Zunächst sucht man sich auf [http://www.eclipse.org/downloads/ eclipse.org] aus einen der vielen Pakete das für sich passende raus. Das sinnvollste an dieser Stelle ist &amp;quot;Eclipse IDE for C/C++ Developers&amp;quot;. Wer aber vor hat die IDE nicht nur für C/C++ zu verwenden ist mit &amp;quot;Eclipse Classic&amp;quot; vielleicht besser bedient.&lt;br /&gt;
&lt;br /&gt;
Ich werde hier Eclipse Classic 3.7.1 verwenden und zeigen wie das CDT (C/C++ Development Tooling) installiert wird.&lt;br /&gt;
Um Eclipse zu &amp;quot;installieren&amp;quot; muss das Archiv nur an einem Ort seiner Wahl entpackt werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux:/home/user/Downloads# cd /opt&lt;br /&gt;
root@linux:/opt# tar xvf /home/user/Downloads/eclipse-SDK-3.7.1-linux-gtk.tar.gz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Die IDE lässt sich nun wie folgt starten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
user@linux:~$ /opt/eclipse/eclipse&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Wie ein Starter angelegt wird liest du am besten im Handbuch/Wiki zu deiner Distribution nach.&lt;br /&gt;
&lt;br /&gt;
Als nächstes folgt die Installation der benötigten Plugins. Der Abschnitt &amp;quot;CDT  (C/C++ Development Tooling)&amp;quot; kann übersprungen werden, wenn man das Eclipse-Paket &amp;quot;Eclipse IDE for C/C++ Developers&amp;quot; installiert hat.&lt;br /&gt;
===== CDT  (C/C++ Development Tooling) =====&lt;br /&gt;
Zum installieren des CDT wird zuerst die IDE gestartet. Im Hauptfenster wählt man dann den Menüpunkt &#039;&#039;&#039;Help &amp;gt; Install New Software...&#039;&#039;&#039; es erscheint ein neuer Dialog. Das Eingabefeld &#039;&#039;&#039;Work with:&#039;&#039;&#039; wird mit &#039;&#039;&#039;http://download.eclipse.org/tools/cdt/releases/indigo&#039;&#039;&#039; ausgefüllt und mit der &#039;&#039;&#039;Return-Taste&#039;&#039;&#039; abgeschickt.&lt;br /&gt;
&lt;br /&gt;
Im unteren Teil des Dialogs werden nun die verfügbaren Plugins aufgelistet, benötigt wird das Plugins &#039;&#039;&#039;C/C++ Development Tools&#039;&#039;&#039; aus der Rubrik &#039;&#039;&#039;CDT Main Features&#039;&#039;&#039; und &#039;&#039;&#039;C/C++ GDB Hardware Debugging&#039;&#039;&#039; aus der Rubrik &#039;&#039;&#039;CDT Optional Features&#039;&#039;&#039;. Einfach ein Haken vor den Plugins machen und auf &#039;&#039;&#039;Next&#039;&#039;&#039; klicken. Es erscheint eine Zusammenfassung und eine Seite weiter die Lizenz, die man sich durchlesen sollte und dann bestenfalls bestätigt. Mit einem klick auf &#039;&#039;&#039;Finish&#039;&#039;&#039; wird das Plugin heruntergeladen und installiert.&lt;br /&gt;
&lt;br /&gt;
Nach der Installation des Plugins sollte Eclipse neu gestartet werden. Auf der Willkommen-Seite ist nun ein Punkt C/C++ Development zusehen bzw. lässt sich im Menü per &#039;&#039;&#039;File &amp;gt; New &amp;gt; Project...&#039;&#039;&#039; ein C oder C++ Projekt anlegen.&lt;br /&gt;
&lt;br /&gt;
===== GNU ARM Eclipse Plug-in =====&lt;br /&gt;
Mit der jetzigen Installation ist es bereits möglich einfache C/C++ Projekte zu erstellen und Makefiles zu importieren. Jetzt fehlt noch das Bindeglied zwischen der Toolchain und Eclipse. Dazu gibt es das [http://sourceforge.net/projects/gnuarmeclipse/ GNU ARM Eclipse Plug-in]. Mit dem Plugin kann man nun die Konfiguration des Compilers und Linkers in Eclipse erledigen was sonst in einem Makefile geschieht.&lt;br /&gt;
&lt;br /&gt;
Die Installation des Plugins funktioniert genauso wie die Installation des CDT, nur mit anderer Quelle. Hier die Kurzfassung:&lt;br /&gt;
# &#039;&#039;&#039;Help &amp;gt; Install New Software...&#039;&#039;&#039;&lt;br /&gt;
# &#039;&#039;&#039;Work with:&#039;&#039;&#039; mit http://gnuarmeclipse.sourceforge.net/updates ausfüllen und mit &#039;&#039;&#039;Return-Taste&#039;&#039;&#039; bestätigen.&lt;br /&gt;
# Einen Haken vor CDT GNU Cross Development Tools machen und &#039;&#039;&#039;Next&#039;&#039;&#039; drücken.&lt;br /&gt;
# Es erscheint eine Zusammenfassung mit &#039;&#039;&#039;Next&#039;&#039;&#039; zu nächsten Seite.&lt;br /&gt;
# Lizenzvereinbarung lesen und akzeptieren Installation mit klick auf &#039;&#039;&#039;Finish&#039;&#039;&#039; starten.&lt;br /&gt;
# Es erscheint noch eine Warnung, dass die Dateien nicht signiert sind. Diesen bitte mit &#039;&#039;&#039;OK&#039;&#039;&#039; bestätigen.&lt;br /&gt;
#  Eclipse neu starten.&lt;br /&gt;
&lt;br /&gt;
Beim erstellen eines neuen C oder C++ Projekts kann nun die Toolchain ARM Linux GCC (Sourcery G++ Lite) gewählt werden.&lt;br /&gt;
Bevor mit den Beispielen begonnen werden kann muss noch die Frage geklärt werden wie die Daten auf den Chip kommen.&lt;br /&gt;
==== stlink ====&lt;br /&gt;
Das Entwicklungsboard STM32F4-Discovery von ST kann über USB per STLinkV2 Programmiert werden. Für Linux gibt es da den [https://github.com/texane/stlink &amp;quot;stm32 discovery line linux programmer&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
Die Tools liegen als Quelltext vor und müssen zuerst kompiliert werden. Dann mal los! Solltest du mit deinem Linux noch nie ein Programm kompiliert haben siehe am besten erst in dem Handbuch/Wiki zu deiner Distribution nach was du benötigst (Ubuntu benötigt z.B. die Pakete build-essential und git).&lt;br /&gt;
&lt;br /&gt;
Als erstes die Quelltexte laden&lt;br /&gt;
&amp;lt;pre&amp;gt;user@linux:~/src$ git clone git://github.com/texane/stlink.git&amp;lt;/pre&amp;gt;&lt;br /&gt;
Um die Tools nun kompilieren zu können werden noch die Quelltexte der libusb 1.0 benötigt. Bei einem Ubuntu-System ist dies das Paket libusb-1.0.0-dev (Lubuntu 11.10).&amp;lt;br /&amp;gt;&lt;br /&gt;
Jetzt kann der Quelltext kompiliert werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
user@linux:~/src$ cd stlink&lt;br /&gt;
user@linux:~/src/stlink$ make&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Wenn das ganze Fehlerfrei durch gelaufen ist kann man den ganzen Ordner oder alternativ auch nur ./flash/flash und ./gdbserver/st-util kopieren und per Umgebungsvariable PATH verfügbar machen.&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Achtung&#039;&#039;&#039;: &amp;lt;u&amp;gt;Im folgendem Block benenne ich flash in st-flash um, weil ich flash nicht besonders passend finde wenn man es per Umgebungsvariable verfügbar macht.&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux:~# mkdir /opt/stlink&lt;br /&gt;
root@linux:~# cd /opt/stlink&lt;br /&gt;
root@linux:/opt/stlink# cp /home/user/src/stlink/flash/flash ./st-flash&lt;br /&gt;
root@linux:/opt/stlink# cp /home/user/src/stlink/gdbserver/st-util .&lt;br /&gt;
root@linux:/opt/stlink# echo PATH=\&amp;quot;$PATH:/opt/stlink\&amp;quot; &amp;gt;&amp;gt; /etc/environment&lt;br /&gt;
root@linux:/opt/stlink# source /etc/environment&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nun brauchen die beiden Tools noch Schreibrechte für das USB-Gerät.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux:~# cp /home/user/src/stlink/49-stlinkv*.rules /etc/udev/rules.d&lt;br /&gt;
root@linux:~# udevadm control --reload-rules&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Wird nun das STM32F4-Discovery an den PC gesteckt wird ein neues Device erzeugt, bei mir war das &#039;&#039;&#039;/dev/stlinkv2_2&#039;&#039;&#039;.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Für Boards mit STLink v1 solltest du dir einmal die README zu stlink durchlesen.&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollte das soweit alles geklappt haben, ist das jetzt der perfekte Zeitpunkt um ein Backup der Firmware zu machen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
user@linux:~$ st-flash read ~/STM32F4-Discovery.bin 0x8000000 0x100000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Mit folgendem Befehl kann die Datei  wieder zurück geschrieben werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
user@linux:~$ st-flash write ~/STM32F4-Discovery.bin 0x8000000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==== stlink in Eclipse einbinden ====&lt;br /&gt;
Als nächstes wird der GDB-Server in Eclipse integriert. Man wählt aus dem Hauptmenu &#039;&#039;&#039;Run &amp;gt; External Tools &amp;gt; External Tools Configurations...&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Ein Klick mit der rechten Maustaste auf &#039;&#039;&#039;Program&#039;&#039;&#039; und &#039;&#039;&#039;New&#039;&#039;&#039; auswählen.&lt;br /&gt;
Als Name &#039;&#039;&#039;ST-Link&#039;&#039;&#039; eintragen. Bei Working Directory: wird &#039;&#039;&#039;${workspace_loc}${project_path}&#039;&#039;&#039; eingetragen.&lt;br /&gt;
Auf der Registerkarte &#039;&#039;&#039;Build&#039;&#039;&#039; wird der Haken vor &#039;&#039;&#039;Build before Launch&#039;&#039;&#039; raus genommen. Danach auf der Registerkarte &#039;&#039;&#039;Common&#039;&#039;&#039; einen Haken vor &#039;&#039;&#039;External Tools&#039;&#039;&#039; im Feld &#039;&#039;&#039;Display in Favorites menu&#039;&#039;&#039; machen.&lt;br /&gt;
Ein Klick auf &#039;&#039;&#039;Apply&#039;&#039;&#039; und den Dialog mit einem Klick auf &#039;&#039;&#039;Close&#039;&#039;&#039; schließen.&lt;br /&gt;
&lt;br /&gt;
== Beispiel-Projekte ==&lt;br /&gt;
=== Vorbereitungen ===&lt;br /&gt;
==== Standard Peripherals Library ====&lt;br /&gt;
Bevor jetzt der erste Quelltext in den Editor gehackt wird, kann man sich das Leben etwas leichter machen. STMicroelectronics stellt für seine Microprozessoren Bibliotheken bereit, die einem eine ganze Menge Arbeit abnimmt.&lt;br /&gt;
&lt;br /&gt;
Die Rede ist von der &amp;quot;Standard Peripherals Library&amp;quot;, diese lässt sich auf der Seite von [http://www.st.com STMicroelectronics] herunter laden. Der Weg dorthin ist dank einer wunderschön gestalteten Homepage etwas steinig.&amp;lt;br /&amp;gt;&lt;br /&gt;
Auf der Hauptseite wählt man zuerst in der Rubrik &#039;&#039;&#039;Products&#039;&#039;&#039; die Kategorie &#039;&#039;&#039;Micros &amp;amp; Memories&#039;&#039;&#039; und danach &#039;&#039;&#039;Mikrocontrollers&#039;&#039;&#039;. Als nächstes wird auf die Registerkarte &#039;&#039;&#039;Resources&#039;&#039;&#039; gewechselt. Im Bereich &#039;&#039;&#039;Software Resources&#039;&#039;&#039; wird der Punkt &#039;&#039;&#039;Firmware&#039;&#039;&#039; ausgewählt. Es öffnet sich ein neues Browserfenster/-tab mit einer Liste von Dateien. Im oberen Bereich gibt es ein Suchfeld. Hier kann nach den &amp;quot;standard peripherals library&amp;quot; gesucht werde&lt;br /&gt;
Für das STM32F4-Discovery benötigen wir die Datei [http://www.st.com/internet/com/SOFTWARE_RESOURCES/SW_COMPONENT/FIRMWARE/stm32f4_dsp_stdperiph_lib.zip STM32F4 DSP and standard peripherals library]&lt;br /&gt;
&lt;br /&gt;
Die Datei kann an einen beliebigen Ort entpackt werden.&lt;br /&gt;
==== Neues Projekt anlegen ====&lt;br /&gt;
Jetzt kann mit der Programmierarbeit begonnen werden. Falls noch nicht geschehen kann nun die IDE gestartet werden, im Terminal geht das bei meiner Installation mit:&lt;br /&gt;
&amp;lt;pre&amp;gt;user@linux:~$ /opt/eclipse/eclipse&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nun wird ein neues Projekt geöffnet folgende Schritte sind nötig:&lt;br /&gt;
# File &amp;gt; New &amp;gt; Project...&lt;br /&gt;
# C/C++ &amp;gt; C Project; Next&lt;br /&gt;
# ARM Cross Target Application &amp;gt; Empty Project&lt;br /&gt;
# Toolchains = ARM Linux GCC (Sourcery G++ Lite)&lt;br /&gt;
# Project name = (Hier den Projektnamen eingeben); Finish&lt;br /&gt;
# Eventuell wird nach der C/C++ Perspective gefragt, diesen Dialog mit &#039;&#039;&#039;Yes&#039;&#039;&#039; beantworten.&lt;br /&gt;
Auf der linken Seite im &#039;&#039;&#039;Project Explorer&#039;&#039;&#039; siehst du nun das neue Projekt, sobald du die Baumstruktur öffnest sollte bereits ein Ordner &#039;&#039;&#039;Includes&#039;&#039;&#039; vorhanden sein, dort gibt es bereits 3 Einträge:&lt;br /&gt;
* &#039;&#039;&#039;/opt/CodeSourcery/arm-2011.09/arm-none-eabi/include&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;/opt/CodeSourcery/arm-2011.09/lib/gcc/arm-none-eabi/4.6.1/include&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;/opt/CodeSourcery/arm-2011.09/lib/gcc/arm-none-eabi/4.6.1/include-fixed&#039;&#039;&#039;&lt;br /&gt;
Wenn diese Einträge &amp;lt;u&amp;gt;nicht&amp;lt;/u&amp;gt; vorhanden sind, ist bis hierhin etwas schief gegangen. Vermutlich wurde die Umgebungsvariable PATH nicht korrekt gesetzt.&lt;br /&gt;
&lt;br /&gt;
Wenn bis hierhin alles geklappt hat können nun die weiteren Einstellungen vorgenommen werden. Zuerst werden die Header-Datei der Standard Peripherals Library hinzu gefügt.&lt;br /&gt;
# Project &amp;gt; Properties&lt;br /&gt;
# C/C++ General &amp;gt; Paths and Symbols&lt;br /&gt;
# Configuration = [All configurations]&lt;br /&gt;
# Reiter Includes, Languages = GNU C&lt;br /&gt;
Hier werden nun die Pfade zu den Header-Dateien der Standard Peripherals Library eingetragen. Ich habe das von ST heruntergeladene Archiv nach /home/user/eclipse/STM32/ entpackt. daraus ergeben sich für mich folgende Pfade die eingetragen werden müssen:&lt;br /&gt;
* /home/user/eclipse/STM32/STM32F4xx StdPeriphLib V1.0.0/Libraries/CMSIS/Include&lt;br /&gt;
* /home/user/eclipse/STM32/STM32F4xx StdPeriphLib V1.0.0/Libraries/CMSIS/Device/ST/STM32F4xx/Include&lt;br /&gt;
* /home/user/eclipse/STM32/STM32F4xx StdPeriphLib V1.0.0/Libraries/STM32F4xx_StdPeriph_Driver/inc&lt;br /&gt;
* /${ProjDirPath}&lt;br /&gt;
Als nächstes werden die Quellcode-Dateien der Standard Peripherals Library hinzugefügt.&lt;br /&gt;
# Reiter Source Location&lt;br /&gt;
# Link Folder..., Folder Name = StdPeriph&lt;br /&gt;
# Link to folder in the filesystem aktivieren&lt;br /&gt;
# Browse..., Verzeichniss = /user/eclipse/STM32/STM32F4xx StdPeriphLib V1.0.0/Libraries/STM32F4xx_StdPeriph_Driver/src&lt;br /&gt;
Jetzt noch 2 Symbole anlegen:&lt;br /&gt;
# Reiter Symbols, Languages = GNU C&lt;br /&gt;
# Add..., Name: = USE_STDPERIPH_DRIVER &amp;gt; OK&lt;br /&gt;
# Add..., Name: = USE_STM32_DISCOVERY &amp;gt; OK&lt;br /&gt;
Nun noch ein Linker-Script aktivieren.&lt;br /&gt;
# C/C++ Build &amp;gt; Settings&lt;br /&gt;
# Configuration = [All configurations]&lt;br /&gt;
# ARM Sourcery Linux GCC Linker &amp;gt; General&lt;br /&gt;
# Script File  (-T) = /${ProjDirPath}/stm32_flash.ld&lt;br /&gt;
Als letztes noch das Ausgabeformat auf Binary einstellen.&lt;br /&gt;
# ARM Sourcery Linux GNU Create Flash Image &amp;gt; Output&lt;br /&gt;
# Output file format (-O) = binary&lt;br /&gt;
Der Dialog kann nun mit &#039;&#039;&#039;OK&#039;&#039;&#039; geschlossen werden.&lt;br /&gt;
&lt;br /&gt;
Jetzt müssen noch 3 Dateien ins Projekt kopiert werden.&lt;br /&gt;
* /home/user/eclipse/STM32/STM32F4xx StdPeriphLib V1.0.0/Project/STM32F4xx_StdPeriph_Templates/TrueSTUDIO/STM324xG_EVAL/stm32_flash.ld&lt;br /&gt;
* /home/user/eclipse/STM32/STM32F4xx StdPeriphLib V1.0.0/Libraries/CMSIS/Device/ST/STM32F4xx/Source/Templates/system_stm32f4xx.c&lt;br /&gt;
* /home/user/eclipse/STM32/STM32F4xx StdPeriphLib V1.0.0/Libraries/CMSIS/Device/ST/STM32F4xx/Source/Templates/TrueSTUDIO/startup_stm32f4xx.s&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Die Dateiendung der Datei startup_stm32f4xx.s muss noch in ein geoßes S geändert werden. Ausserdem muss in der Datei folgende Anweisung auskommentiert werden.&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/* Call static constructors */&lt;br /&gt;
//    bl __libc_init_array &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis zur Ausgabedatei&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
Die kompilierte Datei befindet sich im Ordner Debug oder Release im Projektverzeichniss. Die Datei  besitzt den Namen des Prejekts und endet auf .hex. Die Endung ist zwar hex beinhaltet aber trotzdem ein Binary.&lt;br /&gt;
&lt;br /&gt;
Jetzt kann mit der Programmierung begonnen werden.&lt;br /&gt;
==== Debugging mit GDB ====&lt;br /&gt;
Dieser Abschnitt zeigt wie der GDB-Server von stlink in Eclipse verwendet wird.&lt;br /&gt;
&lt;br /&gt;
Bei geöffnetem Projekt klickt man im Hauptmenü auf &#039;&#039;&#039;Run &amp;gt; Debug Configurations...&#039;&#039;&#039;. In der Liste links klickt man mit der Rechten Maustaste auf &#039;&#039;&#039;GDB Hardware Debugging&#039;&#039;&#039; und wählt &#039;&#039;&#039;New&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Bei Name trägt man den Namen der Konfiguration ein z.B. STM32F4-Discovery ST-Link. Die Datei für &#039;&#039;&#039;C/C++ Application:&#039;&#039;&#039; wählt man am besten aus, indem man auf &#039;&#039;&#039;Search Project...&#039;&#039;&#039; klickt. Das Eingabefeld &#039;&#039;&#039;Project:&#039;&#039;&#039; sollte bereits ausgefüllt sein.&lt;br /&gt;
Auf der Registerkarte &#039;&#039;&#039;Debugger&#039;&#039;&#039; wird in das Eingabefeld &#039;&#039;&#039;GDB-Command:&#039;&#039;&#039; &#039;&#039;&#039;arm-none-eabi-gdb&#039;&#039;&#039; eingetragen. In das Feld &#039;&#039;&#039;Port Number:&#039;&#039;&#039; wird 4242 eingetragen. Abschließend wird auf die Registerkarte Common gewechselt. Hier wird ein Haken vor &#039;&#039;&#039;Debug&#039;&#039;&#039; im Feld &#039;&#039;&#039;Display in Favorites menu&#039;&#039;&#039; gemacht.&lt;br /&gt;
Ein Klick auf &#039;&#039;&#039;Apply&#039;&#039;&#039; und &#039;&#039;&#039;Close&#039;&#039;&#039; schließt die Konfiguration ab.&lt;br /&gt;
&lt;br /&gt;
Um ein Projekt zu debuggen wählt man zuerst aus dem Hauptmenu &#039;&#039;&#039;Run &amp;gt; External Tools &amp;gt; ST-Link&#039;&#039;&#039; dadurch wird der GDB-Server gestartet.&lt;br /&gt;
&lt;br /&gt;
Sollte man die Meldung erhalten &amp;lt;u&amp;gt;Variable References empty selection: ${project_path}&amp;lt;/u&amp;gt; hilft es einmal in eine Projektdatei oder den Projekt-Explorer zu klicken.&lt;br /&gt;
&lt;br /&gt;
Danach wählt man aus dem Hauptmenü &#039;&#039;&#039;Run &amp;gt; Debug Configurations...&#039;&#039;&#039;, in der Liste links wählt man die angelegte Configuration unter &#039;&#039;&#039;GDB Hardware Debugging&#039;&#039;&#039; aus und klickt auf Debug. Eclipse möchte nun in die Debug-Perspektive wchseln, das sollte mit &#039;&#039;&#039;Yes&#039;&#039;&#039; beantworten werden.&lt;br /&gt;
&lt;br /&gt;
Das Programm wird in den Mikrocontroller geladen und nach dem Flashvorgang direkt gestoppt. Mit F8 kann die Ausführung wieder gestartet werden.&lt;br /&gt;
=== Beispiel: Blinky ===&lt;br /&gt;
Hier ein Beispiel welches die 4 LEDs um den MEMS-Sensor herum leuchten lässt.&lt;br /&gt;
&lt;br /&gt;
main.c&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
#include &amp;quot;stm32f4xx.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
GPIO_InitTypeDef  GPIO_InitStructure;&lt;br /&gt;
&lt;br /&gt;
void Delay(__IO uint32_t nCount) {&lt;br /&gt;
  while(nCount--) {&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main(void) {&lt;br /&gt;
  /* GPIOD Periph clock enable */&lt;br /&gt;
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);&lt;br /&gt;
&lt;br /&gt;
  /* Configure PD12, 13, 14 and PD15 in output pushpull mode */&lt;br /&gt;
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;&lt;br /&gt;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;&lt;br /&gt;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;&lt;br /&gt;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;&lt;br /&gt;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;&lt;br /&gt;
  GPIO_Init(GPIOD, &amp;amp;GPIO_InitStructure);&lt;br /&gt;
&lt;br /&gt;
  while (1) {&lt;br /&gt;
    /* Set PD12 Green */&lt;br /&gt;
    GPIOD-&amp;gt;BSRRL = GPIO_Pin_12;&lt;br /&gt;
    /* Reset PD13 Orange, PD14 Red, PD15 Blue */&lt;br /&gt;
    GPIOD-&amp;gt;BSRRH = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;&lt;br /&gt;
    Delay(10000000L);&lt;br /&gt;
&lt;br /&gt;
    /* Set PD13 Orange */&lt;br /&gt;
    GPIOD-&amp;gt;BSRRL = GPIO_Pin_13;&lt;br /&gt;
    /* Reset PD12 Green, PD14 Red, PD15 Blue */&lt;br /&gt;
    GPIOD-&amp;gt;BSRRH = GPIO_Pin_12 | GPIO_Pin_14 | GPIO_Pin_15;&lt;br /&gt;
    Delay(10000000L);&lt;br /&gt;
&lt;br /&gt;
    /* Set PD14 Red */&lt;br /&gt;
    GPIOD-&amp;gt;BSRRL = GPIO_Pin_14;&lt;br /&gt;
    /* Reset PD12 Green, PD13 Orange, PD15 Blue */&lt;br /&gt;
    GPIOD-&amp;gt;BSRRH = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_15;&lt;br /&gt;
    Delay(10000000L);&lt;br /&gt;
&lt;br /&gt;
    /* Set PD15 Blue */&lt;br /&gt;
    GPIOD-&amp;gt;BSRRL = GPIO_Pin_15;&lt;br /&gt;
    /* Reset PD12 Green, PD13 Orange, PD14 Red */&lt;br /&gt;
    GPIOD-&amp;gt;BSRRH = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14;&lt;br /&gt;
    Delay(10000000L);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
stm32f4xx_conf.h&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
#ifndef __STM32F4xx_CONF_H&lt;br /&gt;
#define __STM32F4xx_CONF_H&lt;br /&gt;
&lt;br /&gt;
/* Includes ------------------------------------------------------------------*/&lt;br /&gt;
/* Uncomment the line below to enable peripheral header file inclusion */&lt;br /&gt;
// #include &amp;quot;stm32f4xx_adc.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_can.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_crc.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_cryp.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_dac.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_dbgmcu.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_dcmi.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_dma.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_exti.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_flash.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_fsmc.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_hash.h&amp;quot;&lt;br /&gt;
#include &amp;quot;stm32f4xx_gpio.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_i2c.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_iwdg.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_pwr.h&amp;quot;&lt;br /&gt;
#include &amp;quot;stm32f4xx_rcc.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_rng.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_rtc.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_sdio.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_spi.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_syscfg.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_tim.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_usart.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_wwdg.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;misc.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#ifdef  USE_FULL_ASSERT&lt;br /&gt;
  #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__))&lt;br /&gt;
  void assert_failed(uint8_t* file, uint32_t line);&lt;br /&gt;
#else&lt;br /&gt;
  #define assert_param(expr) ((void)0)&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
[[Kategorie:STM32]]&lt;/div&gt;</summary>
		<author><name>Avr-frickler</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=STM32F4-Discovery&amp;diff=63778</id>
		<title>STM32F4-Discovery</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=STM32F4-Discovery&amp;diff=63778"/>
		<updated>2012-02-03T18:28:09Z</updated>

		<summary type="html">&lt;p&gt;Avr-frickler: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieser Wiki-Artikel soll den Einstieg in die Prozessorfamilie STM32 von [http://www.st.com STMicroelectronics] erleichtern. Der Artikel begleitet dich von der Installation der benötigten Software bis hin zum flashen des Beispiels in den Prozessor.&amp;lt;br/&amp;gt;&lt;br /&gt;
Da es für Windows schon einiges im Internet zu finden gibt, wird die Installation der Toolchain für Linux beschrieben. Die verwendeten Tools sind allerdings als Quelltext oder als Windows-Installation verfügbar, somit lassen sich die meisten Schritte auch auf Windows-Betriebssystemen nachvollziehen.&lt;br /&gt;
== Hardware ==&lt;br /&gt;
Das in diesem Artikel verwendete Board [http://www.st.com/internet/evalboard/product/252419.jsp STM32F4-Discovery] lässt sich z.B. bei [http://www.watterott.com/de/STM32F4Discovery Watterott] bestellen.&lt;br /&gt;
Es lassen sich auch andere Boards verwenden, allerdings müssen die Beispiele dem Schaltplan entsprechend angepasst werden.&lt;br /&gt;
== Software ==&lt;br /&gt;
Um das Dateisystem möglicht sauber zu halten installiere ich hier sämtliche Software in das Unterverzeichnis /opt welches für solche Installationen vorgesehen ist. Damit auf dieses Verzeichnis schreibend zugegriffen werden darf sind root-Rechte erforderlich. Ich werde vor den Befehlen immer den Prompt schreiben damit zu erkennen ist welche Rechte notwendig sind.&lt;br /&gt;
&lt;br /&gt;
Es ist natürlich auch möglich alles in sein Heimat-Verzeichnis zu schreiben, hier kommt man dann grössten Teils ohne root-Rechte aus. Das muss aber jeder für sich selbst entscheiden wie er es mag.&lt;br /&gt;
&lt;br /&gt;
Nicht alle Linux-Distributionen sind gleich, ich arbeite hier mit einem (fast) frischem Lubuntu 11.10. Der grösste Teil sollte also mit Ubuntu und Debian-Systemen funktionieren. Für andere Distributionen kann man den entsprechenden Abschnitt editieren oder auf der [[Diskussion:STM32F4-Discovery]] zu diesem Artikel vermerken.&lt;br /&gt;
==== Sourcery CodeBench Lite Edition for ARM EABI ====&lt;br /&gt;
[[Datei:Sup_processors.jpg|thumb|left]]&lt;br /&gt;
Als erstes benötigen wir die Toolchain mit Compiler &amp;amp; Linker. Hier verwenden wir die [http://www.mentor.com/embedded-software/sourcery-tools/sourcery-codebench/editions/lite-edition/ Sourcery Codebench von Mentor]. In der Auswahlbox &amp;quot;Supported Prozessors&amp;quot; wählt man in der Rubrik &amp;quot;ARM processors&amp;quot; den Punkt &amp;quot;Download the EABI Release &amp;gt;&amp;quot; aus.&lt;br /&gt;
&lt;br /&gt;
Leider muss man sich registrieren. Nach der Registrierung erhält man einen Link per E-Mail zur Downloadseite. Man wählt das &amp;quot;Recommended Release&amp;quot; aus und lädt dort die Datei &amp;quot;IA32 GNU/Linux TAR&amp;quot; herunter.&lt;br /&gt;
&lt;br /&gt;
[https://sourcery.mentor.com/sgpp/lite/arm/portal/package9740/public/arm-none-eabi/arm-2011.09-69-arm-none-eabi-i686-pc-linux-gnu.tar.bz2 Direktlink Linux] [https://sourcery.mentor.com/sgpp/lite/arm/portal/package9741/public/arm-none-eabi/arm-2011.09-69-arm-none-eabi-i686-mingw32.tar.bz2 Direktlink Windows]&lt;br /&gt;
&lt;br /&gt;
Die Datei muss einfach nur an einem beliebigem Ort entpackt werden und die Umgebungsvariable PATH erweitert werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux:/home/user/Downloads# mkdir /opt/CodeSourcery&lt;br /&gt;
root@linux:/home/user/Downloads# cd /opt/CodeSourcery&lt;br /&gt;
root@linux:/opt/CodeSourcery# tar xvf /home/user/Downloads/arm-2011.09-69-arm-none-eabi-i686-pc-linux-gnu.tar.bz2&lt;br /&gt;
root@linux:/opt/CodeSourcery# ls&lt;br /&gt;
arm-2011.09&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anpassen der Umgebungsvariable PATH, die Anpassung ermöglicht es Eclipse den Compiler im Dateisystem zu finden ohne den absoluten Pfad anzugeben.&amp;lt;br /&amp;gt;&lt;br /&gt;
Es gibt verschiedene Orte wo sich die Variable anpassen lässt. Auf meinem System habe ich die Datei /etc/environment angepasst.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux:/opt/CodeSourcery# echo PATH=\&amp;quot;$PATH:/opt/CodeSourcery/arm-2011.09/bin\&amp;quot; &amp;gt;&amp;gt; /etc/environment&lt;br /&gt;
root@linux:/opt/CodeSourcery# source /etc/environment&lt;br /&gt;
root@linux:/opt/CodeSourcery# arm-none-eabi-gcc --version&lt;br /&gt;
arm-none-eabi-gcc (Sourcery CodeBench Lite 2011.09-69) 4.6.1&lt;br /&gt;
Copyright (C) 2011 Free Software Foundation, Inc.&lt;br /&gt;
This is free software; see the source for copying conditions.  There is NO&lt;br /&gt;
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer gerne mit der Konsole &amp;amp; vi/emacs arbeitet kann sofort zum Abschnitt stlink springen, für die Klickibunti-Fraktion folgt jetzt die Installation der IDE.&lt;br /&gt;
==== Eclipse IDE ====&lt;br /&gt;
Nach der Installation der Toolchain folgt jetzt die IDE hier habe ich mich für Eclipse entschieden. Zunächst sucht man sich auf [http://www.eclipse.org/downloads/ eclipse.org] aus einen der vielen Pakete das für sich passende raus. Das sinnvollste an dieser Stelle ist &amp;quot;Eclipse IDE for C/C++ Developers&amp;quot;. Wer aber vor hat die IDE nicht nur für C/C++ zu verwenden ist mit &amp;quot;Eclipse Classic&amp;quot; vielleicht besser bedient.&lt;br /&gt;
&lt;br /&gt;
Ich werde hier Eclipse Classic 3.7.1 verwenden und zeigen wie das CDT (C/C++ Development Tooling) installiert wird.&lt;br /&gt;
Um Eclipse zu &amp;quot;installieren&amp;quot; muss das Archiv nur an einem Ort seiner Wahl entpackt werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux:/home/user/Downloads# cd /opt&lt;br /&gt;
root@linux:/opt# tar xvf /home/user/Downloads/eclipse-SDK-3.7.1-linux-gtk.tar.gz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Die IDE lässt sich nun wie folgt starten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
user@linux:~$ /opt/eclipse/eclipse&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Wie ein Starter angelegt wird liest du am besten im Handbuch/Wiki zu deiner Distribution nach.&lt;br /&gt;
&lt;br /&gt;
Als nächstes folgt die Installation der benötigten Plugins. Der Abschnitt &amp;quot;CDT  (C/C++ Development Tooling)&amp;quot; kann übersprungen werden, wenn man das Eclipse-Paket &amp;quot;Eclipse IDE for C/C++ Developers&amp;quot; installiert hat.&lt;br /&gt;
===== CDT  (C/C++ Development Tooling) =====&lt;br /&gt;
Zum installieren des CDT wird zuerst die IDE gestartet. Im Hauptfenster wählt man dann den Menüpunkt &#039;&#039;&#039;Help &amp;gt; Install New Software...&#039;&#039;&#039; es erscheint ein neuer Dialog. Das Eingabefeld &#039;&#039;&#039;Work with:&#039;&#039;&#039; wird mit &#039;&#039;&#039;http://download.eclipse.org/tools/cdt/releases/indigo&#039;&#039;&#039; ausgefüllt und mit der &#039;&#039;&#039;Return-Taste&#039;&#039;&#039; abgeschickt.&lt;br /&gt;
&lt;br /&gt;
Im unteren Teil des Dialogs werden nun die verfügbaren Plugins aufgelistet, benötigt wird das Plugins &#039;&#039;&#039;C/C++ Development Tools&#039;&#039;&#039; aus der Rubrik &#039;&#039;&#039;CDT Main Features&#039;&#039;&#039; und &#039;&#039;&#039;C/C++ GDB Hardware Debugging&#039;&#039;&#039; aus der Rubrik &#039;&#039;&#039;CDT Optional Features&#039;&#039;&#039;. Einfach ein Haken vor den Plugins machen und auf &#039;&#039;&#039;Next&#039;&#039;&#039; klicken. Es erscheint eine Zusammenfassung und eine Seite weiter die Lizenz, die man sich durchlesen sollte und dann bestenfalls bestätigt. Mit einem klick auf &#039;&#039;&#039;Finish&#039;&#039;&#039; wird das Plugin heruntergeladen und installiert.&lt;br /&gt;
&lt;br /&gt;
Nach der Installation des Plugins sollte Eclipse neu gestartet werden. Auf der Willkommen-Seite ist nun ein Punkt C/C++ Development zusehen bzw. lässt sich im Menü per &#039;&#039;&#039;File &amp;gt; New &amp;gt; Project...&#039;&#039;&#039; ein C oder C++ Projekt anlegen.&lt;br /&gt;
&lt;br /&gt;
===== GNU ARM Eclipse Plug-in =====&lt;br /&gt;
Mit der jetzigen Installation ist es bereits möglich einfache C/C++ Projekte zu erstellen und Makefiles zu importieren. Jetzt fehlt noch das Bindeglied zwischen der Toolchain und Eclipse. Dazu gibt es das [http://sourceforge.net/projects/gnuarmeclipse/ GNU ARM Eclipse Plug-in]. Mit dem Plugin kann man nun die Konfiguration des Compilers und Linkers in Eclipse erledigen was sonst in einem Makefile geschieht.&lt;br /&gt;
&lt;br /&gt;
Die Installation des Plugins funktioniert genauso wie die Installation des CDT, nur mit anderer Quelle. Hier die Kurzfassung:&lt;br /&gt;
# &#039;&#039;&#039;Help &amp;gt; Install New Software...&#039;&#039;&#039;&lt;br /&gt;
# &#039;&#039;&#039;Work with:&#039;&#039;&#039; mit http://gnuarmeclipse.sourceforge.net/updates ausfüllen und mit &#039;&#039;&#039;Return-Taste&#039;&#039;&#039; bestätigen.&lt;br /&gt;
# Einen Haken vor CDT GNU Cross Development Tools machen und &#039;&#039;&#039;Next&#039;&#039;&#039; drücken.&lt;br /&gt;
# Es erscheint eine Zusammenfassung mit &#039;&#039;&#039;Next&#039;&#039;&#039; zu nächsten Seite.&lt;br /&gt;
# Lizenzvereinbarung lesen und akzeptieren Installation mit klick auf &#039;&#039;&#039;Finish&#039;&#039;&#039; starten.&lt;br /&gt;
# Es erscheint noch eine Warnung, dass die Dateien nicht signiert sind. Diesen bitte mit &#039;&#039;&#039;OK&#039;&#039;&#039; bestätigen.&lt;br /&gt;
#  Eclipse neu starten.&lt;br /&gt;
&lt;br /&gt;
Beim erstellen eines neuen C oder C++ Projekts kann nun die Toolchain ARM Linux GCC (Sourcery G++ Lite) gewählt werden.&lt;br /&gt;
Bevor mit den Beispielen begonnen werden kann muss noch die Frage geklärt werden wie die Daten auf den Chip kommen.&lt;br /&gt;
==== stlink ====&lt;br /&gt;
Das Entwicklungsboard STM32F4-Discovery von ST kann über USB per STLinkV2 Programmiert werden. Für Linux gibt es da den [https://github.com/texane/stlink &amp;quot;stm32 discovery line linux programmer&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
Die Tools liegen als Quelltext vor und müssen zuerst kompiliert werden. Dann mal los! Solltest du mit deinem Linux noch nie ein Programm kompiliert haben siehe am besten erst in dem Handbuch/Wiki zu deiner Distribution nach was du benötigst (Ubuntu benötigt z.B. die Pakete build-essential und git).&lt;br /&gt;
&lt;br /&gt;
Als erstes die Quelltexte laden&lt;br /&gt;
&amp;lt;pre&amp;gt;user@linux:~/src$ git clone git://github.com/texane/stlink.git&amp;lt;/pre&amp;gt;&lt;br /&gt;
Um die Tools nun kompilieren zu können werden noch die Quelltexte der libusb 1.0 benötigt. Bei einem Ubuntu-System ist dies das Paket libusb-1.0.0-dev (Lubuntu 11.10).&amp;lt;br /&amp;gt;&lt;br /&gt;
Jetzt kann der Quelltext kompiliert werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
user@linux:~/src$ cd stlink&lt;br /&gt;
user@linux:~/src/stlink$ make&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Wenn das ganze Fehlerfrei durch gelaufen ist kann man den ganzen Ordner oder alternativ auch nur ./flash/flash und ./gdbserver/st-util kopieren und per Umgebungsvariable PATH verfügbar machen.&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Achtung&#039;&#039;&#039;: &amp;lt;u&amp;gt;Im folgendem Block benenne ich flash in st-flash um, weil ich flash nicht besonders passend finde wenn man es per Umgebungsvariable verfügbar macht.&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux:~# mkdir /opt/stlink&lt;br /&gt;
root@linux:~# cd /opt/stlink&lt;br /&gt;
root@linux:/opt/stlink# cp /home/user/src/stlink/flash/flash ./st-flash&lt;br /&gt;
root@linux:/opt/stlink# cp /home/user/src/stlink/gdbserver/st-util .&lt;br /&gt;
root@linux:/opt/stlink# echo PATH=\&amp;quot;$PATH:/opt/stlink\&amp;quot; &amp;gt;&amp;gt; /etc/environment&lt;br /&gt;
root@linux:/opt/stlink# source /etc/environment&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nun brauchen die beiden Tools noch Schreibrechte für das USB-Gerät.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux:~# cp /home/user/src/stlink/49-stlinkv*.rules /etc/udev/rules.d&lt;br /&gt;
root@linux:~# udevadm control --reload-rules&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Wird nun das STM32F4-Discovery an den PC gesteckt wird ein neues Device erzeugt, bei mir war das &#039;&#039;&#039;/dev/stlinkv2_2&#039;&#039;&#039;.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Für Boards mit STLink v1 solltest du dir einmal die README zu stlink durchlesen.&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollte das soweit alles geklappt haben, ist das jetzt der perfekte Zeitpunkt um ein Backup der Firmware zu machen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
user@linux:~$ st-flash read ~/STM32F4-Discovery.bin 0x8000000 0x100000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Mit folgendem Befehl kann die Datei  wieder zurück geschrieben werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
user@linux:~$ st-flash write ~/STM32F4-Discovery.bin 0x8000000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==== stlink in Eclipse einbinden ====&lt;br /&gt;
Als nächstes wird der GDB-Server in Eclipse integriert. Man wählt aus dem Hauptmenu &#039;&#039;&#039;Run &amp;gt; External Tools &amp;gt; External Tools Configurations...&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Ein Klick mit der rechten Maustaste auf &#039;&#039;&#039;Program&#039;&#039;&#039; und &#039;&#039;&#039;New&#039;&#039;&#039; auswählen.&lt;br /&gt;
Als Name &#039;&#039;&#039;ST-Link&#039;&#039;&#039; eintragen. Bei Working Directory: wird &#039;&#039;&#039;${workspace_loc}${project_path}&#039;&#039;&#039; eingetragen.&lt;br /&gt;
Auf der Registerkarte &#039;&#039;&#039;Build&#039;&#039;&#039; wird der Haken vor &#039;&#039;&#039;Build before Launch&#039;&#039;&#039; raus genommen. Danach auf der Registerkarte &#039;&#039;&#039;Common&#039;&#039;&#039; einen Haken vor &#039;&#039;&#039;External Tools&#039;&#039;&#039; im Feld &#039;&#039;&#039;Display in Favorites menu&#039;&#039;&#039; machen.&lt;br /&gt;
Ein Klick auf &#039;&#039;&#039;Apply&#039;&#039;&#039; und den Dialog mit einem Klick auf &#039;&#039;&#039;Close&#039;&#039;&#039; schließen.&lt;br /&gt;
&lt;br /&gt;
== Beispiel-Projekte ==&lt;br /&gt;
=== Vorbereitungen ===&lt;br /&gt;
==== Standard Peripherals Library ====&lt;br /&gt;
Bevor jetzt der erste Quelltext in den Editor gehackt wird, kann man sich das Leben etwas leichter machen. STMicroelectronics stellt für seine Microprozessoren Bibliotheken bereit, die einem eine ganze Menge Arbeit abnimmt.&lt;br /&gt;
&lt;br /&gt;
Die Rede ist von der &amp;quot;Standard Peripherals Library&amp;quot;, diese lässt sich auf der Seite von [http://www.st.com STMicroelectronics] herunter laden. Der Weg dorthin ist dank einer wunderschön gestalteten Homepage etwas steinig.&amp;lt;br /&amp;gt;&lt;br /&gt;
Auf der Hauptseite wählt man zuerst in der Rubrik &#039;&#039;&#039;Products&#039;&#039;&#039; die Kategorie &#039;&#039;&#039;Micros &amp;amp; Memories&#039;&#039;&#039; und danach &#039;&#039;&#039;Mikrocontrollers&#039;&#039;&#039;. Als nächstes wird auf die Registerkarte &#039;&#039;&#039;Resources&#039;&#039;&#039; gewechselt. Im Bereich &#039;&#039;&#039;Software Resources&#039;&#039;&#039; wird der Punkt &#039;&#039;&#039;Firmware&#039;&#039;&#039; ausgewählt. Es öffnet sich ein neues Browserfenster/-tab mit einer Liste von Dateien. Im oberen Bereich gibt es ein Suchfeld. Hier kann nach den &amp;quot;standard peripherals library&amp;quot; gesucht werde&lt;br /&gt;
Für das STM32F4-Discovery benötigen wir die Datei [http://www.st.com/internet/com/SOFTWARE_RESOURCES/SW_COMPONENT/FIRMWARE/stm32f4_dsp_stdperiph_lib.zip STM32F4 DSP and standard peripherals library]&lt;br /&gt;
&lt;br /&gt;
Die Datei kann an einen beliebigen Ort entpackt werden.&lt;br /&gt;
==== Neues Projekt anlegen ====&lt;br /&gt;
Jetzt kann mit der Programmierarbeit begonnen werden. Falls noch nicht geschehen kann nun die IDE gestartet werden, im Terminal geht das bei meiner Installation mit:&lt;br /&gt;
&amp;lt;pre&amp;gt;user@linux:~$ /opt/eclipse/eclipse&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nun wird ein neues Projekt geöffnet folgende Schritte sind nötig:&lt;br /&gt;
# File &amp;gt; New &amp;gt; Project...&lt;br /&gt;
# C/C++ &amp;gt; C Project; Next&lt;br /&gt;
# ARM Cross Target Application &amp;gt; Empty Project&lt;br /&gt;
# Toolchains = ARM Linux GCC (Sourcery G++ Lite)&lt;br /&gt;
# Project name = (Hier den Projektnamen eingeben); Finish&lt;br /&gt;
# Eventuell wird nach der C/C++ Perspective gefragt, diesen Dialog mit &#039;&#039;&#039;Yes&#039;&#039;&#039; beantworten.&lt;br /&gt;
Auf der linken Seite im &#039;&#039;&#039;Project Explorer&#039;&#039;&#039; siehst du nun das neue Projekt, sobald du die Baumstruktur öffnest sollte bereits ein Ordner &#039;&#039;&#039;Includes&#039;&#039;&#039; vorhanden sein, dort gibt es bereits 3 Einträge:&lt;br /&gt;
* &#039;&#039;&#039;/opt/CodeSourcery/arm-2011.09/arm-none-eabi/include&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;/opt/CodeSourcery/arm-2011.09/lib/gcc/arm-none-eabi/4.6.1/include&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;/opt/CodeSourcery/arm-2011.09/lib/gcc/arm-none-eabi/4.6.1/include-fixed&#039;&#039;&#039;&lt;br /&gt;
Wenn diese Einträge &amp;lt;u&amp;gt;nicht&amp;lt;/u&amp;gt; vorhanden sind, ist bis hierhin etwas schief gegangen. Vermutlich wurde die Umgebungsvariable PATH nicht korrekt gesetzt.&lt;br /&gt;
&lt;br /&gt;
Wenn bis hierhin alles geklappt hat können nun die weiteren Einstellungen vorgenommen werden. Zuerst werden die Header-Datei der Standard Peripherals Library hinzu gefügt.&lt;br /&gt;
# Project &amp;gt; Properties&lt;br /&gt;
# C/C++ General &amp;gt; Paths and Symbols&lt;br /&gt;
# Configuration = [All configurations]&lt;br /&gt;
# Reiter Includes, Languages = GNU C&lt;br /&gt;
Hier werden nun die Pfade zu den Header-Dateien der Standard Peripherals Library eingetragen. Ich habe das von ST heruntergeladene Archiv nach /home/user/eclipse/STM32/ entpackt. daraus ergeben sich für mich folgende Pfade die eingetragen werden müssen:&lt;br /&gt;
* /home/user/eclipse/STM32/STM32F4xx StdPeriphLib V1.0.0/Libraries/CMSIS/Include&lt;br /&gt;
* /home/user/eclipse/STM32/STM32F4xx StdPeriphLib V1.0.0/Libraries/CMSIS/Device/ST/STM32F4xx/Include&lt;br /&gt;
* /home/user/eclipse/STM32/STM32F4xx StdPeriphLib V1.0.0/Libraries/STM32F4xx_StdPeriph_Driver/inc&lt;br /&gt;
* /${ProjDirPath}&lt;br /&gt;
Als nächstes werden die Quellcode-Dateien der Standard Peripherals Library hinzugefügt.&lt;br /&gt;
# Reiter Source Location&lt;br /&gt;
# Link Folder..., Folder Name = StdPeriph&lt;br /&gt;
# Link to folder in the filesystem aktivieren&lt;br /&gt;
# Browse..., Verzeichniss = /user/eclipse/STM32/STM32F4xx StdPeriphLib V1.0.0/Libraries/STM32F4xx_StdPeriph_Driver/src&lt;br /&gt;
Jetzt noch 2 Symbole anlegen:&lt;br /&gt;
# Reiter Symbols, Languages = GNU C&lt;br /&gt;
# Add..., Name: = USE_STDPERIPH_DRIVER &amp;gt; OK&lt;br /&gt;
# Add..., Name: = USE_STM32_DISCOVERY &amp;gt; OK&lt;br /&gt;
Nun noch ein Linker-Script aktivieren.&lt;br /&gt;
# C/C++ Build &amp;gt; Settings&lt;br /&gt;
# Configuration = [All configurations]&lt;br /&gt;
# ARM Sourcery Linux GCC Linker &amp;gt; General&lt;br /&gt;
# Script File  (-T) = /${ProjDirPath}/stm32_flash.ld&lt;br /&gt;
Als letztes noch das Ausgabeformat auf Binary einstellen.&lt;br /&gt;
# ARM Sourcery Linux GNU Create Flash Image &amp;gt; Output&lt;br /&gt;
# Output file format (-O) = binary&lt;br /&gt;
Der Dialog kann nun mit &#039;&#039;&#039;OK&#039;&#039;&#039; geschlossen werden.&lt;br /&gt;
&lt;br /&gt;
Jetzt müssen noch 3 Dateien ins Projekt kopiert werden.&lt;br /&gt;
* /home/user/eclipse/STM32/STM32F4xx StdPeriphLib V1.0.0/Project/STM32F4xx_StdPeriph_Templates/TrueSTUDIO/STM324xG_EVAL/stm32_flash.ld&lt;br /&gt;
* /home/user/eclipse/STM32/STM32F4xx StdPeriphLib V1.0.0/Libraries/CMSIS/Device/ST/STM32F4xx/Source/Templates/system_stm32f4xx.c&lt;br /&gt;
* /home/user/eclipse/STM32/STM32F4xx StdPeriphLib V1.0.0/Libraries/CMSIS/Device/ST/STM32F4xx/Source/Templates/TrueSTUDIO/startup_stm32f4xx.s&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Die Dateiendung der Datei startup_stm32f4xx.s muss noch in ein geoßes S geändert werden. Ausserdem muss in der Datei folgende Anweisung auskommentiert werden.&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/* Call static constructors */&lt;br /&gt;
//    bl __libc_init_array &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis zur Ausgabedatei&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
Die kompilierte Datei befindet sich im Ordner Debug oder Release im Projektverzeichniss. Die Datei  besitzt den Namen des Prejekts und endet auf .hex. Die Endung ist zwar hex beinhaltet aber trotzdem ein Binary.&lt;br /&gt;
&lt;br /&gt;
Jetzt kann mit der Programmierung begonnen werden.&lt;br /&gt;
=== Beispiel: Blinky ===&lt;br /&gt;
Hier ein Beispiel welches die 4 LEDs um den MEMS-Sensor herum leuchten lässt.&lt;br /&gt;
&lt;br /&gt;
main.c&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
#include &amp;quot;stm32f4xx.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
GPIO_InitTypeDef  GPIO_InitStructure;&lt;br /&gt;
&lt;br /&gt;
void Delay(__IO uint32_t nCount) {&lt;br /&gt;
  while(nCount--) {&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main(void) {&lt;br /&gt;
  /* GPIOD Periph clock enable */&lt;br /&gt;
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);&lt;br /&gt;
&lt;br /&gt;
  /* Configure PD12, 13, 14 and PD15 in output pushpull mode */&lt;br /&gt;
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;&lt;br /&gt;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;&lt;br /&gt;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;&lt;br /&gt;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;&lt;br /&gt;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;&lt;br /&gt;
  GPIO_Init(GPIOD, &amp;amp;GPIO_InitStructure);&lt;br /&gt;
&lt;br /&gt;
  while (1) {&lt;br /&gt;
    /* Set PD12 Green */&lt;br /&gt;
    GPIOD-&amp;gt;BSRRL = GPIO_Pin_12;&lt;br /&gt;
    /* Reset PD13 Orange, PD14 Red, PD15 Blue */&lt;br /&gt;
    GPIOD-&amp;gt;BSRRH = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;&lt;br /&gt;
    Delay(10000000L);&lt;br /&gt;
&lt;br /&gt;
    /* Set PD13 Orange */&lt;br /&gt;
    GPIOD-&amp;gt;BSRRL = GPIO_Pin_13;&lt;br /&gt;
    /* Reset PD12 Green, PD14 Red, PD15 Blue */&lt;br /&gt;
    GPIOD-&amp;gt;BSRRH = GPIO_Pin_12 | GPIO_Pin_14 | GPIO_Pin_15;&lt;br /&gt;
    Delay(10000000L);&lt;br /&gt;
&lt;br /&gt;
    /* Set PD14 Red */&lt;br /&gt;
    GPIOD-&amp;gt;BSRRL = GPIO_Pin_14;&lt;br /&gt;
    /* Reset PD12 Green, PD13 Orange, PD15 Blue */&lt;br /&gt;
    GPIOD-&amp;gt;BSRRH = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_15;&lt;br /&gt;
    Delay(10000000L);&lt;br /&gt;
&lt;br /&gt;
    /* Set PD15 Blue */&lt;br /&gt;
    GPIOD-&amp;gt;BSRRL = GPIO_Pin_15;&lt;br /&gt;
    /* Reset PD12 Green, PD13 Orange, PD14 Red */&lt;br /&gt;
    GPIOD-&amp;gt;BSRRH = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14;&lt;br /&gt;
    Delay(10000000L);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
stm32f4xx_conf.h&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
#ifndef __STM32F4xx_CONF_H&lt;br /&gt;
#define __STM32F4xx_CONF_H&lt;br /&gt;
&lt;br /&gt;
/* Includes ------------------------------------------------------------------*/&lt;br /&gt;
/* Uncomment the line below to enable peripheral header file inclusion */&lt;br /&gt;
// #include &amp;quot;stm32f4xx_adc.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_can.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_crc.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_cryp.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_dac.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_dbgmcu.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_dcmi.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_dma.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_exti.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_flash.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_fsmc.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_hash.h&amp;quot;&lt;br /&gt;
#include &amp;quot;stm32f4xx_gpio.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_i2c.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_iwdg.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_pwr.h&amp;quot;&lt;br /&gt;
#include &amp;quot;stm32f4xx_rcc.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_rng.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_rtc.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_sdio.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_spi.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_syscfg.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_tim.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_usart.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_wwdg.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;misc.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#ifdef  USE_FULL_ASSERT&lt;br /&gt;
  #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__))&lt;br /&gt;
  void assert_failed(uint8_t* file, uint32_t line);&lt;br /&gt;
#else&lt;br /&gt;
  #define assert_param(expr) ((void)0)&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
[[Kategorie:STM32]]&lt;/div&gt;</summary>
		<author><name>Avr-frickler</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=STM32F4-Discovery&amp;diff=63777</id>
		<title>STM32F4-Discovery</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=STM32F4-Discovery&amp;diff=63777"/>
		<updated>2012-02-03T18:22:33Z</updated>

		<summary type="html">&lt;p&gt;Avr-frickler: Abschnitt &amp;#039;stlink in Eclipse einbinden&amp;#039; hinzugefügt.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieser Wiki-Artikel soll den Einstieg in die Prozessorfamilie STM32 von [http://www.st.com STMicroelectronics] erleichtern. Der Artikel begleitet dich von der Installation der benötigten Software bis hin zum flashen des Beispiels in den Prozessor.&amp;lt;br/&amp;gt;&lt;br /&gt;
Da es für Windows schon einiges im Internet zu finden gibt, wird die Installation der Toolchain für Linux beschrieben. Die verwendeten Tools sind allerdings als Quelltext oder als Windows-Installation verfügbar, somit lassen sich die meisten Schritte auch auf Windows-Betriebssystemen nachvollziehen.&lt;br /&gt;
== Hardware ==&lt;br /&gt;
Das in diesem Artikel verwendete Board [http://www.st.com/internet/evalboard/product/252419.jsp STM32F4-Discovery] lässt sich z.B. bei [http://www.watterott.com/de/STM32F4Discovery Watterott] bestellen.&lt;br /&gt;
Es lassen sich auch andere Boards verwenden, allerdings müssen die Beispiele dem Schaltplan entsprechend angepasst werden.&lt;br /&gt;
== Software ==&lt;br /&gt;
Um das Dateisystem möglicht sauber zu halten installiere ich hier sämtliche Software in das Unterverzeichnis /opt welches für solche Installationen vorgesehen ist. Damit auf dieses Verzeichnis schreibend zugegriffen werden darf sind root-Rechte erforderlich. Ich werde vor den Befehlen immer den Prompt schreiben damit zu erkennen ist welche Rechte notwendig sind.&lt;br /&gt;
&lt;br /&gt;
Es ist natürlich auch möglich alles in sein Heimat-Verzeichnis zu schreiben, hier kommt man dann grössten Teils ohne root-Rechte aus. Das muss aber jeder für sich selbst entscheiden wie er es mag.&lt;br /&gt;
&lt;br /&gt;
Nicht alle Linux-Distributionen sind gleich, ich arbeite hier mit einem (fast) frischem Lubuntu 11.10. Der grösste Teil sollte also mit Ubuntu und Debian-Systemen funktionieren. Für andere Distributionen kann man den entsprechenden Abschnitt editieren oder auf der [[Diskussion:STM32F4-Discovery]] zu diesem Artikel vermerken.&lt;br /&gt;
==== Sourcery CodeBench Lite Edition for ARM EABI ====&lt;br /&gt;
[[Datei:Sup_processors.jpg|thumb|left]]&lt;br /&gt;
Als erstes benötigen wir die Toolchain mit Compiler &amp;amp; Linker. Hier verwenden wir die [http://www.mentor.com/embedded-software/sourcery-tools/sourcery-codebench/editions/lite-edition/ Sourcery Codebench von Mentor]. In der Auswahlbox &amp;quot;Supported Prozessors&amp;quot; wählt man in der Rubrik &amp;quot;ARM processors&amp;quot; den Punkt &amp;quot;Download the EABI Release &amp;gt;&amp;quot; aus.&lt;br /&gt;
&lt;br /&gt;
Leider muss man sich registrieren. Nach der Registrierung erhält man einen Link per E-Mail zur Downloadseite. Man wählt das &amp;quot;Recommended Release&amp;quot; aus und lädt dort die Datei &amp;quot;IA32 GNU/Linux TAR&amp;quot; herunter.&lt;br /&gt;
&lt;br /&gt;
[https://sourcery.mentor.com/sgpp/lite/arm/portal/package9740/public/arm-none-eabi/arm-2011.09-69-arm-none-eabi-i686-pc-linux-gnu.tar.bz2 Direktlink Linux] [https://sourcery.mentor.com/sgpp/lite/arm/portal/package9741/public/arm-none-eabi/arm-2011.09-69-arm-none-eabi-i686-mingw32.tar.bz2 Direktlink Windows]&lt;br /&gt;
&lt;br /&gt;
Die Datei muss einfach nur an einem beliebigem Ort entpackt werden und die Umgebungsvariable PATH erweitert werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux:/home/user/Downloads# mkdir /opt/CodeSourcery&lt;br /&gt;
root@linux:/home/user/Downloads# cd /opt/CodeSourcery&lt;br /&gt;
root@linux:/opt/CodeSourcery# tar xvf /home/user/Downloads/arm-2011.09-69-arm-none-eabi-i686-pc-linux-gnu.tar.bz2&lt;br /&gt;
root@linux:/opt/CodeSourcery# ls&lt;br /&gt;
arm-2011.09&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anpassen der Umgebungsvariable PATH, die Anpassung ermöglicht es Eclipse den Compiler im Dateisystem zu finden ohne den absoluten Pfad anzugeben.&amp;lt;br /&amp;gt;&lt;br /&gt;
Es gibt verschiedene Orte wo sich die Variable anpassen lässt. Auf meinem System habe ich die Datei /etc/environment angepasst.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux:/opt/CodeSourcery# echo PATH=\&amp;quot;$PATH:/opt/CodeSourcery/arm-2011.09/bin\&amp;quot; &amp;gt;&amp;gt; /etc/environment&lt;br /&gt;
root@linux:/opt/CodeSourcery# source /etc/environment&lt;br /&gt;
root@linux:/opt/CodeSourcery# arm-none-eabi-gcc --version&lt;br /&gt;
arm-none-eabi-gcc (Sourcery CodeBench Lite 2011.09-69) 4.6.1&lt;br /&gt;
Copyright (C) 2011 Free Software Foundation, Inc.&lt;br /&gt;
This is free software; see the source for copying conditions.  There is NO&lt;br /&gt;
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer gerne mit der Konsole &amp;amp; vi/emacs arbeitet kann sofort zum Abschnitt stlink springen, für die Klickibunti-Fraktion folgt jetzt die Installation der IDE.&lt;br /&gt;
==== Eclipse IDE ====&lt;br /&gt;
Nach der Installation der Toolchain folgt jetzt die IDE hier habe ich mich für Eclipse entschieden. Zunächst sucht man sich auf [http://www.eclipse.org/downloads/ eclipse.org] aus einen der vielen Pakete das für sich passende raus. Das sinnvollste an dieser Stelle ist &amp;quot;Eclipse IDE for C/C++ Developers&amp;quot;. Wer aber vor hat die IDE nicht nur für C/C++ zu verwenden ist mit &amp;quot;Eclipse Classic&amp;quot; vielleicht besser bedient.&lt;br /&gt;
&lt;br /&gt;
Ich werde hier Eclipse Classic 3.7.1 verwenden und zeigen wie das CDT (C/C++ Development Tooling) installiert wird.&lt;br /&gt;
Um Eclipse zu &amp;quot;installieren&amp;quot; muss das Archiv nur an einem Ort seiner Wahl entpackt werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux:/home/user/Downloads# cd /opt&lt;br /&gt;
root@linux:/opt# tar xvf /home/user/Downloads/eclipse-SDK-3.7.1-linux-gtk.tar.gz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Die IDE lässt sich nun wie folgt starten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
user@linux:~$ /opt/eclipse/eclipse&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Wie ein Starter angelegt wird liest du am besten im Handbuch/Wiki zu deiner Distribution nach.&lt;br /&gt;
&lt;br /&gt;
Als nächstes folgt die Installation der benötigten Plugins. Der Abschnitt &amp;quot;CDT  (C/C++ Development Tooling)&amp;quot; kann übersprungen werden, wenn man das Eclipse-Paket &amp;quot;Eclipse IDE for C/C++ Developers&amp;quot; installiert hat.&lt;br /&gt;
===== CDT  (C/C++ Development Tooling) =====&lt;br /&gt;
Zum installieren des CDT wird zuerst die IDE gestartet. Im Hauptfenster wählt man dann den Menüpunkt &#039;&#039;&#039;Help &amp;gt; Install New Software...&#039;&#039;&#039; es erscheint ein neuer Dialog. Das Eingabefeld &#039;&#039;&#039;Work with:&#039;&#039;&#039; wird mit &#039;&#039;&#039;http://download.eclipse.org/tools/cdt/releases/indigo&#039;&#039;&#039; ausgefüllt und mit der &#039;&#039;&#039;Return-Taste&#039;&#039;&#039; abgeschickt.&lt;br /&gt;
&lt;br /&gt;
Im unteren Teil des Dialogs werden nun die verfügbaren Plugins aufgelistet, benötigt wird das Plugins &#039;&#039;&#039;C/C++ Development Tools&#039;&#039;&#039; aus der Rubrik &#039;&#039;&#039;CDT Main Features&#039;&#039;&#039; und &#039;&#039;&#039;C/C++ GDB Hardware Debugging&#039;&#039;&#039; aus der Rubrik &#039;&#039;&#039;CDT Optional Features&#039;&#039;&#039;. Einfach ein Haken vor den Plugins machen und auf &#039;&#039;&#039;Next&#039;&#039;&#039; klicken. Es erscheint eine Zusammenfassung und eine Seite weiter die Lizenz, die man sich durchlesen sollte und dann bestenfalls bestätigt. Mit einem klick auf &#039;&#039;&#039;Finish&#039;&#039;&#039; wird das Plugin heruntergeladen und installiert.&lt;br /&gt;
&lt;br /&gt;
Nach der Installation des Plugins sollte Eclipse neu gestartet werden. Auf der Willkommen-Seite ist nun ein Punkt C/C++ Development zusehen bzw. lässt sich im Menü per &#039;&#039;&#039;File &amp;gt; New &amp;gt; Project...&#039;&#039;&#039; ein C oder C++ Projekt anlegen.&lt;br /&gt;
&lt;br /&gt;
===== GNU ARM Eclipse Plug-in =====&lt;br /&gt;
Mit der jetzigen Installation ist es bereits möglich einfache C/C++ Projekte zu erstellen und Makefiles zu importieren. Jetzt fehlt noch das Bindeglied zwischen der Toolchain und Eclipse. Dazu gibt es das [http://sourceforge.net/projects/gnuarmeclipse/ GNU ARM Eclipse Plug-in]. Mit dem Plugin kann man nun die Konfiguration des Compilers und Linkers in Eclipse erledigen was sonst in einem Makefile geschieht.&lt;br /&gt;
&lt;br /&gt;
Die Installation des Plugins funktioniert genauso wie die Installation des CDT, nur mit anderer Quelle. Hier die Kurzfassung:&lt;br /&gt;
# &#039;&#039;&#039;Help &amp;gt; Install New Software...&#039;&#039;&#039;&lt;br /&gt;
# &#039;&#039;&#039;Work with:&#039;&#039;&#039; mit http://gnuarmeclipse.sourceforge.net/updates ausfüllen und mit &#039;&#039;&#039;Return-Taste&#039;&#039;&#039; bestätigen.&lt;br /&gt;
# Einen Haken vor CDT GNU Cross Development Tools machen und &#039;&#039;&#039;Next&#039;&#039;&#039; drücken.&lt;br /&gt;
# Es erscheint eine Zusammenfassung mit &#039;&#039;&#039;Next&#039;&#039;&#039; zu nächsten Seite.&lt;br /&gt;
# Lizenzvereinbarung lesen und akzeptieren Installation mit klick auf &#039;&#039;&#039;Finish&#039;&#039;&#039; starten.&lt;br /&gt;
# Es erscheint noch eine Warnung, dass die Dateien nicht signiert sind. Diesen bitte mit &#039;&#039;&#039;OK&#039;&#039;&#039; bestätigen.&lt;br /&gt;
#  Eclipse neu starten.&lt;br /&gt;
&lt;br /&gt;
Beim erstellen eines neuen C oder C++ Projekts kann nun die Toolchain ARM Linux GCC (Sourcery G++ Lite) gewählt werden.&lt;br /&gt;
Bevor mit den Beispielen begonnen werden kann muss noch die Frage geklärt werden wie die Daten auf den Chip kommen.&lt;br /&gt;
==== stlink ====&lt;br /&gt;
Das Entwicklungsboard STM32F4-Discovery von ST kann über USB per STLinkV2 Programmiert werden. Für Linux gibt es da den [https://github.com/texane/stlink &amp;quot;stm32 discovery line linux programmer&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
Die Tools liegen als Quelltext vor und müssen zuerst kompiliert werden. Dann mal los! Solltest du mit deinem Linux noch nie ein Programm kompiliert haben siehe am besten erst in dem Handbuch/Wiki zu deiner Distribution nach was du benötigst (Ubuntu benötigt z.B. die Pakete build-essential und git).&lt;br /&gt;
&lt;br /&gt;
Als erstes die Quelltexte laden&lt;br /&gt;
&amp;lt;pre&amp;gt;user@linux:~/src$ git clone git://github.com/texane/stlink.git&amp;lt;/pre&amp;gt;&lt;br /&gt;
Um die Tools nun kompilieren zu können werden noch die Quelltexte der libusb 1.0 benötigt. Bei einem Ubuntu-System ist dies das Paket libusb-1.0.0-dev (Lubuntu 11.10).&amp;lt;br /&amp;gt;&lt;br /&gt;
Jetzt kann der Quelltext kompiliert werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
user@linux:~/src$ cd stlink&lt;br /&gt;
user@linux:~/src/stlink$ make&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Wenn das ganze Fehlerfrei durch gelaufen ist kann man den ganzen Ordner oder alternativ auch nur ./flash/flash und ./gdbserver/st-util kopieren und per Umgebungsvariable PATH verfügbar machen.&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Achtung&#039;&#039;&#039;: &amp;lt;u&amp;gt;Im folgendem Block benenne ich flash in st-flash um, weil ich flash nicht besonders passend finde wenn man es per Umgebungsvariable verfügbar macht.&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux:~# mkdir /opt/stlink&lt;br /&gt;
root@linux:~# cd /opt/stlink&lt;br /&gt;
root@linux:/opt/stlink# cp /home/user/src/stlink/flash/flash ./st-flash&lt;br /&gt;
root@linux:/opt/stlink# cp /home/user/src/stlink/gdbserver/st-util .&lt;br /&gt;
root@linux:/opt/stlink# echo PATH=\&amp;quot;$PATH:/opt/stlink\&amp;quot; &amp;gt;&amp;gt; /etc/environment&lt;br /&gt;
root@linux:/opt/stlink# source /etc/environment&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nun brauchen die beiden Tools noch Schreibrechte für das USB-Gerät.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux:~# cp /home/user/src/stlink/49-stlinkv*.rules /etc/udev/rules.d&lt;br /&gt;
root@linux:~# udevadm control --reload-rules&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Wird nun das STM32F4-Discovery an den PC gesteckt wird ein neues Device erzeugt, bei mir war das &#039;&#039;&#039;/dev/stlinkv2_2&#039;&#039;&#039;.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Für Boards mit STLink v1 solltest du dir einmal die README zu stlink durchlesen.&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollte das soweit alles geklappt haben, ist das jetzt der perfekte Zeitpunkt um ein Backup der Firmware zu machen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
user@linux:~$ st-flash read ~/STM32F4-Discovery.bin 0x8000000 0x100000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Mit folgendem Befehl kann die Datei  wieder zurück geschrieben werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
user@linux:~$ st-flash write ~/STM32F4-Discovery.bin 0x8000000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==== stlink in Eclipse einbinden ====&lt;br /&gt;
Als nächstes wird der GDB-Server in Eclipse integriert. Man wählt aus dem Hauptmenu &#039;&#039;&#039;Run &amp;gt; External Tools &amp;gt; External Tools Configurations...&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Ein Klick mit der rechten Maustaste auf &#039;&#039;&#039;Program&#039;&#039;&#039; und &#039;&#039;&#039;New&#039;&#039;&#039; auswählen.&lt;br /&gt;
Als Name &#039;&#039;&#039;ST-Link&#039;&#039;&#039; eintragen. Bei Working Directory: wird &#039;&#039;&#039;${workspace_loc}${project_path}&#039;&#039;&#039; eingetragen.&lt;br /&gt;
Auf der Registerkarte &#039;&#039;&#039;Build&#039;&#039;&#039; wird der Haken vor &#039;&#039;&#039;Build before Launch&#039;&#039;&#039; raus genommen. Danach auf der Registerkarte &#039;&#039;&#039;Common&#039;&#039;&#039; einen Haken vor &#039;&#039;&#039;External Tools&#039;&#039;&#039; im Feld &#039;&#039;&#039;Display in Favorites menu&#039;&#039;&#039; machen.&lt;br /&gt;
Ein Klick auf &#039;&#039;&#039;Apply&#039;&#039;&#039; und den Dialog mit einem Klick auf &#039;&#039;&#039;Close&#039;&#039;&#039; schließen.&lt;br /&gt;
&lt;br /&gt;
== Beispiel-Projekte ==&lt;br /&gt;
=== Vorbereitungen ===&lt;br /&gt;
==== Standard Peripherals Library ====&lt;br /&gt;
Bevor jetzt der erste Quelltext in den Editor gehackt wird, kann man sich das Leben etwas leichter machen. STMicroelectronics stellt für seine Microprozessoren Bibliotheken bereit, die einem eine ganze Menge Arbeit abnimmt.&lt;br /&gt;
&lt;br /&gt;
Die Rede ist von der &amp;quot;Standard Peripherals Library&amp;quot;, diese lässt sich auf der Seite von [http://www.st.com STMicroelectronics] herunter laden. Der Weg dorthin ist dank einer wunderschön gestalteten Homepage etwas steinig.&amp;lt;br /&amp;gt;&lt;br /&gt;
Auf der Hauptseite wählt man zuerst in der Rubrik &#039;&#039;&#039;Products&#039;&#039;&#039; die Kategorie &#039;&#039;&#039;Micros &amp;amp; Memories&#039;&#039;&#039; und danach &#039;&#039;&#039;Mikrocontrollers&#039;&#039;&#039;. Als nächstes wird auf die Registerkarte &#039;&#039;&#039;Resources&#039;&#039;&#039; gewechselt. Im Bereich &#039;&#039;&#039;Software Resources&#039;&#039;&#039; wird der Punkt &#039;&#039;&#039;Firmware&#039;&#039;&#039; ausgewählt. Es öffnet sich ein neues Browserfenster/-tab mit einer Liste von Dateien. Im oberen Bereich gibt es ein Suchfeld. Hier kann nach den &amp;quot;standard peripherals library&amp;quot; gesucht werde&lt;br /&gt;
Für das STM32F4-Discovery benötigen wir die Datei [http://www.st.com/internet/com/SOFTWARE_RESOURCES/SW_COMPONENT/FIRMWARE/stm32f4_dsp_stdperiph_lib.zip STM32F4 DSP and standard peripherals library]&lt;br /&gt;
&lt;br /&gt;
Die Datei kann an einen beliebigen Ort entpackt werden.&lt;br /&gt;
==== Neues Projekt anlegen ====&lt;br /&gt;
Jetzt kann mit der Programmierarbeit begonnen werden. Falls noch nicht geschehen kann nun die IDE gestartet werden, im Terminal geht das bei meiner Installation mit:&lt;br /&gt;
&amp;lt;pre&amp;gt;user@linux:~$ /opt/eclipse/eclipse&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nun wird ein neues Projekt geöffnet folgende Schritte sind nötig:&lt;br /&gt;
# File &amp;gt; New &amp;gt; Project...&lt;br /&gt;
# C/C++ &amp;gt; C Project; Next&lt;br /&gt;
# ARM Cross Target Application &amp;gt; Empty Project&lt;br /&gt;
# Toolchains = ARM Linux GCC (Sourcery G++ Lite)&lt;br /&gt;
# Project name = (Hier den Projektnamen eingeben); Finish&lt;br /&gt;
# Eventuell wird nach der C/C++ Perspective gefragt, diesen Dialog mit &#039;&#039;&#039;Yes&#039;&#039;&#039; beantworten.&lt;br /&gt;
Auf der linken Seite im &#039;&#039;&#039;Project Explorer&#039;&#039;&#039; siehst du nun das neue Projekt, sobald du die Baumstruktur öffnest sollte bereits ein Ordner &#039;&#039;&#039;Includes&#039;&#039;&#039; vorhanden sein, dort gibt es bereits 3 Einträge:&lt;br /&gt;
* &#039;&#039;&#039;/opt/CodeSourcery/arm-2011.09/arm-none-eabi/include&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;/opt/CodeSourcery/arm-2011.09/lib/gcc/arm-none-eabi/4.6.1/include&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;/opt/CodeSourcery/arm-2011.09/lib/gcc/arm-none-eabi/4.6.1/include-fixed&#039;&#039;&#039;&lt;br /&gt;
Wenn diese Einträge &amp;lt;u&amp;gt;nicht&amp;lt;/u&amp;gt; vorhanden sind, ist bis hierhin etwas schief gegangen. Vermutlich wurde die Umgebungsvariable PATH nicht korrekt gesetzt.&lt;br /&gt;
&lt;br /&gt;
Wenn bis hierhin alles geklappt hat können nun die weiteren Einstellungen vorgenommen werden. Zuerst werden die Header-Datei der Standard Peripherals Library hinzu gefügt.&lt;br /&gt;
# Project &amp;gt; Properties&lt;br /&gt;
# C/C++ General &amp;gt; Paths and Symbols&lt;br /&gt;
# Configuration = [All configurations]&lt;br /&gt;
# Reiter Includes, Languages = GNU C&lt;br /&gt;
Hier werden nun die Pfade zu den Header-Dateien der Standard Peripherals Library eingetragen. Ich habe das von ST heruntergeladene Archiv nach /home/user/eclipse/STM32/ entpackt. daraus ergeben sich für mich folgende Pfade die eingetragen werden müssen:&lt;br /&gt;
* /home/user/eclipse/STM32/STM32F4xx StdPeriphLib V1.0.0/Libraries/CMSIS/Include&lt;br /&gt;
* /home/user/eclipse/STM32/STM32F4xx StdPeriphLib V1.0.0/Libraries/CMSIS/Device/ST/STM32F4xx/Include&lt;br /&gt;
* /home/user/eclipse/STM32/STM32F4xx StdPeriphLib V1.0.0/Libraries/STM32F4xx_StdPeriph_Driver/inc&lt;br /&gt;
* /${ProjDirPath}&lt;br /&gt;
Als nächstes werden die Quellcode-Dateien der Standard Peripherals Library hinzugefügt.&lt;br /&gt;
# Reiter Source Location&lt;br /&gt;
# Link Folder..., Folder Name = StdPeriph&lt;br /&gt;
# Link to folder in the filesystem aktivieren&lt;br /&gt;
# Browse..., Verzeichniss = /user/eclipse/STM32/STM32F4xx StdPeriphLib V1.0.0/Libraries/STM32F4xx_StdPeriph_Driver/src&lt;br /&gt;
Jetzt noch 2 Symbole anlegen:&lt;br /&gt;
# Reiter Symbols, Languages = GNU C&lt;br /&gt;
# Add..., Name: = USE_STDPERIPH_DRIVER &amp;gt; OK&lt;br /&gt;
# Add..., Name: = USE_STM32_DISCOVERY &amp;gt; OK&lt;br /&gt;
Nun noch ein Linker-Script aktivieren.&lt;br /&gt;
# C/C++ Build &amp;gt; Settings&lt;br /&gt;
# Configuration = [All configurations]&lt;br /&gt;
# ARM Sourcery Linux GCC Linker &amp;gt; General&lt;br /&gt;
# Script File  (-T) = /${ProjDirPath}/stm32_flash.ld&lt;br /&gt;
Als letztes noch das Ausgabeformat auf Binary einstellen.&lt;br /&gt;
# ARM Sourcery Linux GNU Create Flash Image &amp;gt; Output&lt;br /&gt;
# Output file format (-O) = binary&lt;br /&gt;
Der Dialog kann nun mit &#039;&#039;&#039;OK&#039;&#039;&#039; geschlossen werden.&lt;br /&gt;
&lt;br /&gt;
Jetzt müssen noch 3 Dateien ins Projekt kopiert werden.&lt;br /&gt;
* /home/user/eclipse/STM32/STM32F4xx StdPeriphLib V1.0.0/Project/STM32F4xx_StdPeriph_Templates/TrueSTUDIO/STM324xG_EVAL/stm32_flash.ld&lt;br /&gt;
* /home/user/eclipse/STM32/STM32F4xx StdPeriphLib V1.0.0/Libraries/CMSIS/Device/ST/STM32F4xx/Source/Templates/system_stm32f4xx.c&lt;br /&gt;
* /home/user/eclipse/STM32/STM32F4xx StdPeriphLib V1.0.0/Libraries/CMSIS/Device/ST/STM32F4xx/Source/Templates/TrueSTUDIO/startup_stm32f4xx.s&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Die Dateiendung der Datei startup_stm32f4xx.s muss noch in ein geoßes S geändert werden. Ausserdem muss in der Datei folgende Anweisung auskommentiert werden.&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/* Call static constructors */&lt;br /&gt;
//    bl __libc_init_array &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis zur Ausgabedatei&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
Die kompilierte Datei befindet sich im Ordner Debug oder Release im Projektverzeichniss. Die Datei  besitzt den Namen des Prejekts und endet auf .hex. Die Endung ist zwar hex beinhaltet aber trotzdem ein Binary.&lt;br /&gt;
&lt;br /&gt;
Jetzt kann mit der Programmierung begonnen werden.&lt;br /&gt;
=== Beispiel: Blinky ===&lt;br /&gt;
Hier ein Beispiel welches die 4 LEDs um den MEMS-Sensor herum leuchten.&lt;br /&gt;
&lt;br /&gt;
main.c&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
#include &amp;quot;stm32f4xx.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
GPIO_InitTypeDef  GPIO_InitStructure;&lt;br /&gt;
&lt;br /&gt;
void Delay(__IO uint32_t nCount) {&lt;br /&gt;
  while(nCount--) {&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main(void) {&lt;br /&gt;
  /* GPIOD Periph clock enable */&lt;br /&gt;
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);&lt;br /&gt;
&lt;br /&gt;
  /* Configure PD12, 13, 14 and PD15 in output pushpull mode */&lt;br /&gt;
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;&lt;br /&gt;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;&lt;br /&gt;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;&lt;br /&gt;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;&lt;br /&gt;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;&lt;br /&gt;
  GPIO_Init(GPIOD, &amp;amp;GPIO_InitStructure);&lt;br /&gt;
&lt;br /&gt;
  while (1) {&lt;br /&gt;
    /* Set PD12 Green */&lt;br /&gt;
    GPIOD-&amp;gt;BSRRL = GPIO_Pin_12;&lt;br /&gt;
    /* Reset PD13 Orange, PD14 Red, PD15 Blue */&lt;br /&gt;
    GPIOD-&amp;gt;BSRRH = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;&lt;br /&gt;
    Delay(10000000L);&lt;br /&gt;
&lt;br /&gt;
    /* Set PD13 Orange */&lt;br /&gt;
    GPIOD-&amp;gt;BSRRL = GPIO_Pin_13;&lt;br /&gt;
    /* Reset PD12 Green, PD14 Red, PD15 Blue */&lt;br /&gt;
    GPIOD-&amp;gt;BSRRH = GPIO_Pin_12 | GPIO_Pin_14 | GPIO_Pin_15;&lt;br /&gt;
    Delay(10000000L);&lt;br /&gt;
&lt;br /&gt;
    /* Set PD14 Red */&lt;br /&gt;
    GPIOD-&amp;gt;BSRRL = GPIO_Pin_14;&lt;br /&gt;
    /* Reset PD12 Green, PD13 Orange, PD15 Blue */&lt;br /&gt;
    GPIOD-&amp;gt;BSRRH = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_15;&lt;br /&gt;
    Delay(10000000L);&lt;br /&gt;
&lt;br /&gt;
    /* Set PD15 Blue */&lt;br /&gt;
    GPIOD-&amp;gt;BSRRL = GPIO_Pin_15;&lt;br /&gt;
    /* Reset PD12 Green, PD13 Orange, PD14 Red */&lt;br /&gt;
    GPIOD-&amp;gt;BSRRH = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14;&lt;br /&gt;
    Delay(10000000L);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
stm32f4xx_conf.h&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
#ifndef __STM32F4xx_CONF_H&lt;br /&gt;
#define __STM32F4xx_CONF_H&lt;br /&gt;
&lt;br /&gt;
/* Includes ------------------------------------------------------------------*/&lt;br /&gt;
/* Uncomment the line below to enable peripheral header file inclusion */&lt;br /&gt;
// #include &amp;quot;stm32f4xx_adc.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_can.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_crc.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_cryp.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_dac.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_dbgmcu.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_dcmi.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_dma.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_exti.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_flash.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_fsmc.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_hash.h&amp;quot;&lt;br /&gt;
#include &amp;quot;stm32f4xx_gpio.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_i2c.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_iwdg.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_pwr.h&amp;quot;&lt;br /&gt;
#include &amp;quot;stm32f4xx_rcc.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_rng.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_rtc.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_sdio.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_spi.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_syscfg.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_tim.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_usart.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_wwdg.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;misc.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#ifdef  USE_FULL_ASSERT&lt;br /&gt;
  #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__))&lt;br /&gt;
  void assert_failed(uint8_t* file, uint32_t line);&lt;br /&gt;
#else&lt;br /&gt;
  #define assert_param(expr) ((void)0)&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
[[Kategorie:STM32]]&lt;/div&gt;</summary>
		<author><name>Avr-frickler</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=STM32F4-Discovery&amp;diff=63759</id>
		<title>STM32F4-Discovery</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=STM32F4-Discovery&amp;diff=63759"/>
		<updated>2012-02-03T17:44:31Z</updated>

		<summary type="html">&lt;p&gt;Avr-frickler: /* CDT  (C/C++ Development Tooling) */ Erweiterung um das Plugin C/C++ GDB Hardware Debugging&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieser Wiki-Artikel soll den Einstieg in die Prozessorfamilie STM32 von [http://www.st.com STMicroelectronics] erleichtern. Der Artikel begleitet dich von der Installation der benötigten Software bis hin zum flashen des Beispiels in den Prozessor.&amp;lt;br/&amp;gt;&lt;br /&gt;
Da es für Windows schon einiges im Internet zu finden gibt, wird die Installation der Toolchain für Linux beschrieben. Die verwendeten Tools sind allerdings als Quelltext oder als Windows-Installation verfügbar, somit lassen sich die meisten Schritte auch auf Windows-Betriebssystemen nachvollziehen.&lt;br /&gt;
== Hardware ==&lt;br /&gt;
Das in diesem Artikel verwendete Board [http://www.st.com/internet/evalboard/product/252419.jsp STM32F4-Discovery] lässt sich z.B. bei [http://www.watterott.com/de/STM32F4Discovery Watterott] bestellen.&lt;br /&gt;
Es lassen sich auch andere Boards verwenden, allerdings müssen die Beispiele dem Schaltplan entsprechend angepasst werden.&lt;br /&gt;
== Software ==&lt;br /&gt;
Um das Dateisystem möglicht sauber zu halten installiere ich hier sämtliche Software in das Unterverzeichnis /opt welches für solche Installationen vorgesehen ist. Damit auf dieses Verzeichnis schreibend zugegriffen werden darf sind root-Rechte erforderlich. Ich werde vor den Befehlen immer den Prompt schreiben damit zu erkennen ist welche Rechte notwendig sind.&lt;br /&gt;
&lt;br /&gt;
Es ist natürlich auch möglich alles in sein Heimat-Verzeichnis zu schreiben, hier kommt man dann grössten Teils ohne root-Rechte aus. Das muss aber jeder für sich selbst entscheiden wie er es mag.&lt;br /&gt;
&lt;br /&gt;
Nicht alle Linux-Distributionen sind gleich, ich arbeite hier mit einem (fast) frischem Lubuntu 11.10. Der grösste Teil sollte also mit Ubuntu und Debian-Systemen funktionieren. Für andere Distributionen kann man den entsprechenden Abschnitt editieren oder auf der [[Diskussion:STM32F4-Discovery]] zu diesem Artikel vermerken.&lt;br /&gt;
==== Sourcery CodeBench Lite Edition for ARM EABI ====&lt;br /&gt;
[[Datei:Sup_processors.jpg|thumb|left]]&lt;br /&gt;
Als erstes benötigen wir die Toolchain mit Compiler &amp;amp; Linker. Hier verwenden wir die [http://www.mentor.com/embedded-software/sourcery-tools/sourcery-codebench/editions/lite-edition/ Sourcery Codebench von Mentor]. In der Auswahlbox &amp;quot;Supported Prozessors&amp;quot; wählt man in der Rubrik &amp;quot;ARM processors&amp;quot; den Punkt &amp;quot;Download the EABI Release &amp;gt;&amp;quot; aus.&lt;br /&gt;
&lt;br /&gt;
Leider muss man sich registrieren. Nach der Registrierung erhält man einen Link per E-Mail zur Downloadseite. Man wählt das &amp;quot;Recommended Release&amp;quot; aus und lädt dort die Datei &amp;quot;IA32 GNU/Linux TAR&amp;quot; herunter.&lt;br /&gt;
&lt;br /&gt;
[https://sourcery.mentor.com/sgpp/lite/arm/portal/package9740/public/arm-none-eabi/arm-2011.09-69-arm-none-eabi-i686-pc-linux-gnu.tar.bz2 Direktlink Linux] [https://sourcery.mentor.com/sgpp/lite/arm/portal/package9741/public/arm-none-eabi/arm-2011.09-69-arm-none-eabi-i686-mingw32.tar.bz2 Direktlink Windows]&lt;br /&gt;
&lt;br /&gt;
Die Datei muss einfach nur an einem beliebigem Ort entpackt werden und die Umgebungsvariable PATH erweitert werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux:/home/user/Downloads# mkdir /opt/CodeSourcery&lt;br /&gt;
root@linux:/home/user/Downloads# cd /opt/CodeSourcery&lt;br /&gt;
root@linux:/opt/CodeSourcery# tar xvf /home/user/Downloads/arm-2011.09-69-arm-none-eabi-i686-pc-linux-gnu.tar.bz2&lt;br /&gt;
root@linux:/opt/CodeSourcery# ls&lt;br /&gt;
arm-2011.09&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anpassen der Umgebungsvariable PATH, die Anpassung ermöglicht es Eclipse den Compiler im Dateisystem zu finden ohne den absoluten Pfad anzugeben.&amp;lt;br /&amp;gt;&lt;br /&gt;
Es gibt verschiedene Orte wo sich die Variable anpassen lässt. Auf meinem System habe ich die Datei /etc/environment angepasst.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux:/opt/CodeSourcery# echo PATH=\&amp;quot;$PATH:/opt/CodeSourcery/arm-2011.09/bin\&amp;quot; &amp;gt;&amp;gt; /etc/environment&lt;br /&gt;
root@linux:/opt/CodeSourcery# source /etc/environment&lt;br /&gt;
root@linux:/opt/CodeSourcery# arm-none-eabi-gcc --version&lt;br /&gt;
arm-none-eabi-gcc (Sourcery CodeBench Lite 2011.09-69) 4.6.1&lt;br /&gt;
Copyright (C) 2011 Free Software Foundation, Inc.&lt;br /&gt;
This is free software; see the source for copying conditions.  There is NO&lt;br /&gt;
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer gerne mit der Konsole &amp;amp; vi/emacs arbeitet kann sofort zum Abschnitt stlink springen, für die Klickibunti-Fraktion folgt jetzt die Installation der IDE.&lt;br /&gt;
==== Eclipse IDE ====&lt;br /&gt;
Nach der Installation der Toolchain folgt jetzt die IDE hier habe ich mich für Eclipse entschieden. Zunächst sucht man sich auf [http://www.eclipse.org/downloads/ eclipse.org] aus einen der vielen Pakete das für sich passende raus. Das sinnvollste an dieser Stelle ist &amp;quot;Eclipse IDE for C/C++ Developers&amp;quot;. Wer aber vor hat die IDE nicht nur für C/C++ zu verwenden ist mit &amp;quot;Eclipse Classic&amp;quot; vielleicht besser bedient.&lt;br /&gt;
&lt;br /&gt;
Ich werde hier Eclipse Classic 3.7.1 verwenden und zeigen wie das CDT (C/C++ Development Tooling) installiert wird.&lt;br /&gt;
Um Eclipse zu &amp;quot;installieren&amp;quot; muss das Archiv nur an einem Ort seiner Wahl entpackt werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux:/home/user/Downloads# cd /opt&lt;br /&gt;
root@linux:/opt# tar xvf /home/user/Downloads/eclipse-SDK-3.7.1-linux-gtk.tar.gz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Die IDE lässt sich nun wie folgt starten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
user@linux:~$ /opt/eclipse/eclipse&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Wie ein Starter angelegt wird liest du am besten im Handbuch/Wiki zu deiner Distribution nach.&lt;br /&gt;
&lt;br /&gt;
Als nächstes folgt die Installation der benötigten Plugins. Der Abschnitt &amp;quot;CDT  (C/C++ Development Tooling)&amp;quot; kann übersprungen werden, wenn man das Eclipse-Paket &amp;quot;Eclipse IDE for C/C++ Developers&amp;quot; installiert hat.&lt;br /&gt;
===== CDT  (C/C++ Development Tooling) =====&lt;br /&gt;
Zum installieren des CDT wird zuerst die IDE gestartet. Im Hauptfenster wählt man dann den Menüpunkt &#039;&#039;&#039;Help &amp;gt; Install New Software...&#039;&#039;&#039; es erscheint ein neuer Dialog. Das Eingabefeld &#039;&#039;&#039;Work with:&#039;&#039;&#039; wird mit &#039;&#039;&#039;http://download.eclipse.org/tools/cdt/releases/indigo&#039;&#039;&#039; ausgefüllt und mit der &#039;&#039;&#039;Return-Taste&#039;&#039;&#039; abgeschickt.&lt;br /&gt;
&lt;br /&gt;
Im unteren Teil des Dialogs werden nun die verfügbaren Plugins aufgelistet, benötigt wird das Plugins &#039;&#039;&#039;C/C++ Development Tools&#039;&#039;&#039; aus der Rubrik &#039;&#039;&#039;CDT Main Features&#039;&#039;&#039; und &#039;&#039;&#039;C/C++ GDB Hardware Debugging&#039;&#039;&#039; aus der Rubrik &#039;&#039;&#039;CDT Optional Features&#039;&#039;&#039;. Einfach ein Haken vor den Plugins machen und auf &#039;&#039;&#039;Next&#039;&#039;&#039; klicken. Es erscheint eine Zusammenfassung und eine Seite weiter die Lizenz, die man sich durchlesen sollte und dann bestenfalls bestätigt. Mit einem klick auf &#039;&#039;&#039;Finish&#039;&#039;&#039; wird das Plugin heruntergeladen und installiert.&lt;br /&gt;
&lt;br /&gt;
Nach der Installation des Plugins sollte Eclipse neu gestartet werden. Auf der Willkommen-Seite ist nun ein Punkt C/C++ Development zusehen bzw. lässt sich im Menü per &#039;&#039;&#039;File &amp;gt; New &amp;gt; Project...&#039;&#039;&#039; ein C oder C++ Projekt anlegen.&lt;br /&gt;
&lt;br /&gt;
===== GNU ARM Eclipse Plug-in =====&lt;br /&gt;
Mit der jetzigen Installation ist es bereits möglich einfache C/C++ Projekte zu erstellen und Makefiles zu importieren. Jetzt fehlt noch das Bindeglied zwischen der Toolchain und Eclipse. Dazu gibt es das [http://sourceforge.net/projects/gnuarmeclipse/ GNU ARM Eclipse Plug-in]. Mit dem Plugin kann man nun die Konfiguration des Compilers und Linkers in Eclipse erledigen was sonst in einem Makefile geschieht.&lt;br /&gt;
&lt;br /&gt;
Die Installation des Plugins funktioniert genauso wie die Installation des CDT, nur mit anderer Quelle. Hier die Kurzfassung:&lt;br /&gt;
# &#039;&#039;&#039;Help &amp;gt; Install New Software...&#039;&#039;&#039;&lt;br /&gt;
# &#039;&#039;&#039;Work with:&#039;&#039;&#039; mit http://gnuarmeclipse.sourceforge.net/updates ausfüllen und mit &#039;&#039;&#039;Return-Taste&#039;&#039;&#039; bestätigen.&lt;br /&gt;
# Einen Haken vor CDT GNU Cross Development Tools machen und &#039;&#039;&#039;Next&#039;&#039;&#039; drücken.&lt;br /&gt;
# Es erscheint eine Zusammenfassung mit &#039;&#039;&#039;Next&#039;&#039;&#039; zu nächsten Seite.&lt;br /&gt;
# Lizenzvereinbarung lesen und akzeptieren Installation mit klick auf &#039;&#039;&#039;Finish&#039;&#039;&#039; starten.&lt;br /&gt;
# Es erscheint noch eine Warnung, dass die Dateien nicht signiert sind. Diesen bitte mit &#039;&#039;&#039;OK&#039;&#039;&#039; bestätigen.&lt;br /&gt;
#  Eclipse neu starten.&lt;br /&gt;
&lt;br /&gt;
Beim erstellen eines neuen C oder C++ Projekts kann nun die Toolchain ARM Linux GCC (Sourcery G++ Lite) gewählt werden.&lt;br /&gt;
Bevor mit den Beispielen begonnen werden kann muss noch die Frage geklärt werden wie die Daten auf den Chip kommen.&lt;br /&gt;
==== stlink ====&lt;br /&gt;
Das Entwicklungsboard STM32F4-Discovery von ST kann über USB per STLinkV2 Programmiert werden. Für Linux gibt es da den [https://github.com/texane/stlink &amp;quot;stm32 discovery line linux programmer&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
Die Tools liegen als Quelltext vor und müssen zuerst kompiliert werden. Dann mal los! Solltest du mit deinem Linux noch nie ein Programm kompiliert haben siehe am besten erst in dem Handbuch/Wiki zu deiner Distribution nach was du benötigst (Ubuntu benötigt z.B. die Pakete build-essential und git).&lt;br /&gt;
&lt;br /&gt;
Als erstes die Quelltexte laden&lt;br /&gt;
&amp;lt;pre&amp;gt;user@linux:~/src$ git clone git://github.com/texane/stlink.git&amp;lt;/pre&amp;gt;&lt;br /&gt;
Um die Tools nun kompilieren zu können werden noch die Quelltexte der libusb 1.0 benötigt. Bei einem Ubuntu-System ist dies das Paket libusb-1.0.0-dev (Lubuntu 11.10).&amp;lt;br /&amp;gt;&lt;br /&gt;
Jetzt kann der Quelltext kompiliert werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
user@linux:~/src$ cd stlink&lt;br /&gt;
user@linux:~/src/stlink$ make&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Wenn das ganze Fehlerfrei durch gelaufen ist kann man den ganzen Ordner oder alternativ auch nur ./flash/flash und ./gdbserver/st-util kopieren und per Umgebungsvariable PATH verfügbar machen.&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Achtung&#039;&#039;&#039;: &amp;lt;u&amp;gt;Im folgendem Block benenne ich flash in st-flash um, weil ich flash nicht besonders passend finde wenn man es per Umgebungsvariable verfügbar macht.&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux:~# mkdir /opt/stlink&lt;br /&gt;
root@linux:~# cd /opt/stlink&lt;br /&gt;
root@linux:/opt/stlink# cp /home/user/src/stlink/flash/flash ./st-flash&lt;br /&gt;
root@linux:/opt/stlink# cp /home/user/src/stlink/gdbserver/st-util .&lt;br /&gt;
root@linux:/opt/stlink# echo PATH=\&amp;quot;$PATH:/opt/stlink\&amp;quot; &amp;gt;&amp;gt; /etc/environment&lt;br /&gt;
root@linux:/opt/stlink# source /etc/environment&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nun brauchen die beiden Tools noch Schreibrechte für das USB-Gerät.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux:~# cp /home/user/src/stlink/49-stlinkv*.rules /etc/udev/rules.d&lt;br /&gt;
root@linux:~# udevadm control --reload-rules&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Wird nun das STM32F4-Discovery an den PC gesteckt wird ein neues Device erzeugt, bei mir war das &#039;&#039;&#039;/dev/stlinkv2_2&#039;&#039;&#039;.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Für Boards mit STLink v1 solltest du dir einmal die README zu stlink durchlesen.&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollte das soweit alles geklappt haben, ist das jetzt der perfekte Zeitpunkt um ein Backup der Firmware zu machen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
user@linux:~$ st-flash read ~/STM32F4-Discovery.bin 0x8000000 0x100000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Mit folgendem Befehl kann die Datei  wieder zurück geschrieben werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
user@linux:~$ st-flash write ~/STM32F4-Discovery.bin 0x8000000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==== TODO ====&lt;br /&gt;
Einbindung des gdb-Servers und flash-Tools in Eclipse.&lt;br /&gt;
== Beispiel-Projekte ==&lt;br /&gt;
=== Vorbereitungen ===&lt;br /&gt;
==== Standard Peripherals Library ====&lt;br /&gt;
Bevor jetzt der erste Quelltext in den Editor gehackt wird, kann man sich das Leben etwas leichter machen. STMicroelectronics stellt für seine Microprozessoren Bibliotheken bereit, die einem eine ganze Menge Arbeit abnimmt.&lt;br /&gt;
&lt;br /&gt;
Die Rede ist von der &amp;quot;Standard Peripherals Library&amp;quot;, diese lässt sich auf der Seite von [http://www.st.com STMicroelectronics] herunter laden. Der Weg dorthin ist dank einer wunderschön gestalteten Homepage etwas steinig.&amp;lt;br /&amp;gt;&lt;br /&gt;
Auf der Hauptseite wählt man zuerst in der Rubrik &#039;&#039;&#039;Products&#039;&#039;&#039; die Kategorie &#039;&#039;&#039;Micros &amp;amp; Memories&#039;&#039;&#039; und danach &#039;&#039;&#039;Mikrocontrollers&#039;&#039;&#039;. Als nächstes wird auf die Registerkarte &#039;&#039;&#039;Resources&#039;&#039;&#039; gewechselt. Im Bereich &#039;&#039;&#039;Software Resources&#039;&#039;&#039; wird der Punkt &#039;&#039;&#039;Firmware&#039;&#039;&#039; ausgewählt. Es öffnet sich ein neues Browserfenster/-tab mit einer Liste von Dateien. Im oberen Bereich gibt es ein Suchfeld. Hier kann nach den &amp;quot;standard peripherals library&amp;quot; gesucht werde&lt;br /&gt;
Für das STM32F4-Discovery benötigen wir die Datei [http://www.st.com/internet/com/SOFTWARE_RESOURCES/SW_COMPONENT/FIRMWARE/stm32f4_dsp_stdperiph_lib.zip STM32F4 DSP and standard peripherals library]&lt;br /&gt;
&lt;br /&gt;
Die Datei kann an einen beliebigen Ort entpackt werden.&lt;br /&gt;
==== Neues Projekt anlegen ====&lt;br /&gt;
Jetzt kann mit der Programmierarbeit begonnen werden. Falls noch nicht geschehen kann nun die IDE gestartet werden, im Terminal geht das bei meiner Installation mit:&lt;br /&gt;
&amp;lt;pre&amp;gt;user@linux:~$ /opt/eclipse/eclipse&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nun wird ein neues Projekt geöffnet folgende Schritte sind nötig:&lt;br /&gt;
# File &amp;gt; New &amp;gt; Project...&lt;br /&gt;
# C/C++ &amp;gt; C Project; Next&lt;br /&gt;
# ARM Cross Target Application &amp;gt; Empty Project&lt;br /&gt;
# Toolchains = ARM Linux GCC (Sourcery G++ Lite)&lt;br /&gt;
# Project name = (Hier den Projektnamen eingeben); Finish&lt;br /&gt;
# Eventuell wird nach der C/C++ Perspective gefragt, diesen Dialog mit &#039;&#039;&#039;Yes&#039;&#039;&#039; beantworten.&lt;br /&gt;
Auf der linken Seite im &#039;&#039;&#039;Project Explorer&#039;&#039;&#039; siehst du nun das neue Projekt, sobald du die Baumstruktur öffnest sollte bereits ein Ordner &#039;&#039;&#039;Includes&#039;&#039;&#039; vorhanden sein, dort gibt es bereits 3 Einträge:&lt;br /&gt;
* &#039;&#039;&#039;/opt/CodeSourcery/arm-2011.09/arm-none-eabi/include&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;/opt/CodeSourcery/arm-2011.09/lib/gcc/arm-none-eabi/4.6.1/include&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;/opt/CodeSourcery/arm-2011.09/lib/gcc/arm-none-eabi/4.6.1/include-fixed&#039;&#039;&#039;&lt;br /&gt;
Wenn diese Einträge &amp;lt;u&amp;gt;nicht&amp;lt;/u&amp;gt; vorhanden sind, ist bis hierhin etwas schief gegangen. Vermutlich wurde die Umgebungsvariable PATH nicht korrekt gesetzt.&lt;br /&gt;
&lt;br /&gt;
Wenn bis hierhin alles geklappt hat können nun die weiteren Einstellungen vorgenommen werden. Zuerst werden die Header-Datei der Standard Peripherals Library hinzu gefügt.&lt;br /&gt;
# Project &amp;gt; Properties&lt;br /&gt;
# C/C++ General &amp;gt; Paths and Symbols&lt;br /&gt;
# Configuration = [All configurations]&lt;br /&gt;
# Reiter Includes, Languages = GNU C&lt;br /&gt;
Hier werden nun die Pfade zu den Header-Dateien der Standard Peripherals Library eingetragen. Ich habe das von ST heruntergeladene Archiv nach /home/user/eclipse/STM32/ entpackt. daraus ergeben sich für mich folgende Pfade die eingetragen werden müssen:&lt;br /&gt;
* /home/user/eclipse/STM32/STM32F4xx StdPeriphLib V1.0.0/Libraries/CMSIS/Include&lt;br /&gt;
* /home/user/eclipse/STM32/STM32F4xx StdPeriphLib V1.0.0/Libraries/CMSIS/Device/ST/STM32F4xx/Include&lt;br /&gt;
* /home/user/eclipse/STM32/STM32F4xx StdPeriphLib V1.0.0/Libraries/STM32F4xx_StdPeriph_Driver/inc&lt;br /&gt;
* /${ProjDirPath}&lt;br /&gt;
Als nächstes werden die Quellcode-Dateien der Standard Peripherals Library hinzugefügt.&lt;br /&gt;
# Reiter Source Location&lt;br /&gt;
# Link Folder..., Folder Name = StdPeriph&lt;br /&gt;
# Link to folder in the filesystem aktivieren&lt;br /&gt;
# Browse..., Verzeichniss = /user/eclipse/STM32/STM32F4xx StdPeriphLib V1.0.0/Libraries/STM32F4xx_StdPeriph_Driver/src&lt;br /&gt;
Jetzt noch 2 Symbole anlegen:&lt;br /&gt;
# Reiter Symbols, Languages = GNU C&lt;br /&gt;
# Add..., Name: = USE_STDPERIPH_DRIVER &amp;gt; OK&lt;br /&gt;
# Add..., Name: = USE_STM32_DISCOVERY &amp;gt; OK&lt;br /&gt;
Nun noch ein Linker-Script aktivieren.&lt;br /&gt;
# C/C++ Build &amp;gt; Settings&lt;br /&gt;
# Configuration = [All configurations]&lt;br /&gt;
# ARM Sourcery Linux GCC Linker &amp;gt; General&lt;br /&gt;
# Script File  (-T) = /${ProjDirPath}/stm32_flash.ld&lt;br /&gt;
Als letztes noch das Ausgabeformat auf Binary einstellen.&lt;br /&gt;
# ARM Sourcery Linux GNU Create Flash Image &amp;gt; Output&lt;br /&gt;
# Output file format (-O) = binary&lt;br /&gt;
Der Dialog kann nun mit &#039;&#039;&#039;OK&#039;&#039;&#039; geschlossen werden.&lt;br /&gt;
&lt;br /&gt;
Jetzt müssen noch 3 Dateien ins Projekt kopiert werden.&lt;br /&gt;
* /home/user/eclipse/STM32/STM32F4xx StdPeriphLib V1.0.0/Project/STM32F4xx_StdPeriph_Templates/TrueSTUDIO/STM324xG_EVAL/stm32_flash.ld&lt;br /&gt;
* /home/user/eclipse/STM32/STM32F4xx StdPeriphLib V1.0.0/Libraries/CMSIS/Device/ST/STM32F4xx/Source/Templates/system_stm32f4xx.c&lt;br /&gt;
* /home/user/eclipse/STM32/STM32F4xx StdPeriphLib V1.0.0/Libraries/CMSIS/Device/ST/STM32F4xx/Source/Templates/TrueSTUDIO/startup_stm32f4xx.s&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Die Dateiendung der Datei startup_stm32f4xx.s muss noch in ein geoßes S geändert werden. Ausserdem muss in der Datei folgende Anweisung auskommentiert werden.&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/* Call static constructors */&lt;br /&gt;
//    bl __libc_init_array &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis zur Ausgabedatei&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
Die kompilierte Datei befindet sich im Ordner Debug oder Release im Projektverzeichniss. Die Datei  besitzt den Namen des Prejekts und endet auf .hex. Die Endung ist zwar hex beinhaltet aber trotzdem ein Binary.&lt;br /&gt;
&lt;br /&gt;
Jetzt kann mit der Programmierung begonnen werden.&lt;br /&gt;
=== Beispiel: Blinky ===&lt;br /&gt;
Hier ein Beispiel welches die 4 LEDs um den MEMS-Sensor herum leuchten.&lt;br /&gt;
&lt;br /&gt;
main.c&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
#include &amp;quot;stm32f4xx.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
GPIO_InitTypeDef  GPIO_InitStructure;&lt;br /&gt;
&lt;br /&gt;
void Delay(__IO uint32_t nCount) {&lt;br /&gt;
  while(nCount--) {&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main(void) {&lt;br /&gt;
  /* GPIOD Periph clock enable */&lt;br /&gt;
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);&lt;br /&gt;
&lt;br /&gt;
  /* Configure PD12, 13, 14 and PD15 in output pushpull mode */&lt;br /&gt;
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;&lt;br /&gt;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;&lt;br /&gt;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;&lt;br /&gt;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;&lt;br /&gt;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;&lt;br /&gt;
  GPIO_Init(GPIOD, &amp;amp;GPIO_InitStructure);&lt;br /&gt;
&lt;br /&gt;
  while (1) {&lt;br /&gt;
    /* Set PD12 Green */&lt;br /&gt;
    GPIOD-&amp;gt;BSRRL = GPIO_Pin_12;&lt;br /&gt;
    /* Reset PD13 Orange, PD14 Red, PD15 Blue */&lt;br /&gt;
    GPIOD-&amp;gt;BSRRH = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;&lt;br /&gt;
    Delay(10000000L);&lt;br /&gt;
&lt;br /&gt;
    /* Set PD13 Orange */&lt;br /&gt;
    GPIOD-&amp;gt;BSRRL = GPIO_Pin_13;&lt;br /&gt;
    /* Reset PD12 Green, PD14 Red, PD15 Blue */&lt;br /&gt;
    GPIOD-&amp;gt;BSRRH = GPIO_Pin_12 | GPIO_Pin_14 | GPIO_Pin_15;&lt;br /&gt;
    Delay(10000000L);&lt;br /&gt;
&lt;br /&gt;
    /* Set PD14 Red */&lt;br /&gt;
    GPIOD-&amp;gt;BSRRL = GPIO_Pin_14;&lt;br /&gt;
    /* Reset PD12 Green, PD13 Orange, PD15 Blue */&lt;br /&gt;
    GPIOD-&amp;gt;BSRRH = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_15;&lt;br /&gt;
    Delay(10000000L);&lt;br /&gt;
&lt;br /&gt;
    /* Set PD15 Blue */&lt;br /&gt;
    GPIOD-&amp;gt;BSRRL = GPIO_Pin_15;&lt;br /&gt;
    /* Reset PD12 Green, PD13 Orange, PD14 Red */&lt;br /&gt;
    GPIOD-&amp;gt;BSRRH = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14;&lt;br /&gt;
    Delay(10000000L);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
stm32f4xx_conf.h&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
#ifndef __STM32F4xx_CONF_H&lt;br /&gt;
#define __STM32F4xx_CONF_H&lt;br /&gt;
&lt;br /&gt;
/* Includes ------------------------------------------------------------------*/&lt;br /&gt;
/* Uncomment the line below to enable peripheral header file inclusion */&lt;br /&gt;
// #include &amp;quot;stm32f4xx_adc.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_can.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_crc.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_cryp.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_dac.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_dbgmcu.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_dcmi.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_dma.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_exti.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_flash.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_fsmc.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_hash.h&amp;quot;&lt;br /&gt;
#include &amp;quot;stm32f4xx_gpio.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_i2c.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_iwdg.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_pwr.h&amp;quot;&lt;br /&gt;
#include &amp;quot;stm32f4xx_rcc.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_rng.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_rtc.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_sdio.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_spi.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_syscfg.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_tim.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_usart.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_wwdg.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;misc.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#ifdef  USE_FULL_ASSERT&lt;br /&gt;
  #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__))&lt;br /&gt;
  void assert_failed(uint8_t* file, uint32_t line);&lt;br /&gt;
#else&lt;br /&gt;
  #define assert_param(expr) ((void)0)&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
[[Kategorie:STM32]]&lt;/div&gt;</summary>
		<author><name>Avr-frickler</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=STM32F4-Discovery&amp;diff=63571</id>
		<title>STM32F4-Discovery</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=STM32F4-Discovery&amp;diff=63571"/>
		<updated>2012-01-27T20:23:56Z</updated>

		<summary type="html">&lt;p&gt;Avr-frickler: Abschnitt Vorbereitungen ertweitert, Beispiel hinzugefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieser Wiki-Artikel soll den Einstieg in die Prozessorfamilie STM32 von [http://www.st.com STMicroelectronics] erleichtern. Der Artikel begleitet dich von der Installation der benötigten Software bis hin zum flashen des Beispiels in den Prozessor.&amp;lt;br/&amp;gt;&lt;br /&gt;
Da es für Windows schon einiges im Internet zu finden gibt, wird die Installation der Toolchain für Linux beschrieben. Die verwendeten Tools sind allerdings als Quelltext oder als Windows-Installation verfügbar, somit lassen sich die meisten Schritte auch auf Windows-Betriebssystemen nachvollziehen.&lt;br /&gt;
== Hardware ==&lt;br /&gt;
Das in diesem Artikel verwendete Board [http://www.st.com/internet/evalboard/product/252419.jsp STM32F4-Discovery] lässt sich z.B. bei [http://www.watterott.com/de/STM32F4Discovery Watterott] bestellen.&lt;br /&gt;
Es lassen sich auch andere Boards verwenden, allerdings müssen die Beispiele dem Schaltplan entsprechend angepasst werden.&lt;br /&gt;
== Software ==&lt;br /&gt;
Um das Dateisystem möglicht sauber zu halten installiere ich hier sämtliche Software in das Unterverzeichnis /opt welches für solche Installationen vorgesehen ist. Damit auf dieses Verzeichnis schreibend zugegriffen werden darf sind root-Rechte erforderlich. Ich werde vor den Befehlen immer den Prompt schreiben damit zu erkennen ist welche Rechte notwendig sind.&lt;br /&gt;
&lt;br /&gt;
Es ist natürlich auch möglich alles in sein Heimat-Verzeichnis zu schreiben, hier kommt man dann grössten Teils ohne root-Rechte aus. Das muss aber jeder für sich selbst entscheiden wie er es mag.&lt;br /&gt;
&lt;br /&gt;
Nicht alle Linux-Distributionen sind gleich, ich arbeite hier mit einem (fast) frischem Lubuntu 11.10. Der grösste Teil sollte also mit Ubuntu und Debian-Systemen funktionieren. Für andere Distributionen kann man den entsprechenden Abschnitt editieren oder auf der [[Diskussion:STM32F4-Discovery]] zu diesem Artikel vermerken.&lt;br /&gt;
==== Sourcery CodeBench Lite Edition for ARM EABI ====&lt;br /&gt;
[[Datei:Sup_processors.jpg|thumb|left]]&lt;br /&gt;
Als erstes benötigen wir die Toolchain mit Compiler &amp;amp; Linker. Hier verwenden wir die [http://www.mentor.com/embedded-software/sourcery-tools/sourcery-codebench/editions/lite-edition/ Sourcery Codebench von Mentor]. In der Auswahlbox &amp;quot;Supported Prozessors&amp;quot; wählt man in der Rubrik &amp;quot;ARM processors&amp;quot; den Punkt &amp;quot;Download the EABI Release &amp;gt;&amp;quot; aus.&lt;br /&gt;
&lt;br /&gt;
Leider muss man sich registrieren. Nach der Registrierung erhält man einen Link per E-Mail zur Downloadseite. Man wählt das &amp;quot;Recommended Release&amp;quot; aus und lädt dort die Datei &amp;quot;IA32 GNU/Linux TAR&amp;quot; herunter.&lt;br /&gt;
&lt;br /&gt;
[https://sourcery.mentor.com/sgpp/lite/arm/portal/package9740/public/arm-none-eabi/arm-2011.09-69-arm-none-eabi-i686-pc-linux-gnu.tar.bz2 Direktlink Linux] [https://sourcery.mentor.com/sgpp/lite/arm/portal/package9741/public/arm-none-eabi/arm-2011.09-69-arm-none-eabi-i686-mingw32.tar.bz2 Direktlink Windows]&lt;br /&gt;
&lt;br /&gt;
Die Datei muss einfach nur an einem beliebigem Ort entpackt werden und die Umgebungsvariable PATH erweitert werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux:/home/user/Downloads# mkdir /opt/CodeSourcery&lt;br /&gt;
root@linux:/home/user/Downloads# cd /opt/CodeSourcery&lt;br /&gt;
root@linux:/opt/CodeSourcery# tar xvf /home/user/Downloads/arm-2011.09-69-arm-none-eabi-i686-pc-linux-gnu.tar.bz2&lt;br /&gt;
root@linux:/opt/CodeSourcery# ls&lt;br /&gt;
arm-2011.09&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anpassen der Umgebungsvariable PATH, die Anpassung ermöglicht es Eclipse den Compiler im Dateisystem zu finden ohne den absoluten Pfad anzugeben.&amp;lt;br /&amp;gt;&lt;br /&gt;
Es gibt verschiedene Orte wo sich die Variable anpassen lässt. Auf meinem System habe ich die Datei /etc/environment angepasst.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux:/opt/CodeSourcery# echo PATH=\&amp;quot;$PATH:/opt/CodeSourcery/arm-2011.09/bin\&amp;quot; &amp;gt;&amp;gt; /etc/environment&lt;br /&gt;
root@linux:/opt/CodeSourcery# source /etc/environment&lt;br /&gt;
root@linux:/opt/CodeSourcery# arm-none-eabi-gcc --version&lt;br /&gt;
arm-none-eabi-gcc (Sourcery CodeBench Lite 2011.09-69) 4.6.1&lt;br /&gt;
Copyright (C) 2011 Free Software Foundation, Inc.&lt;br /&gt;
This is free software; see the source for copying conditions.  There is NO&lt;br /&gt;
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer gerne mit der Konsole &amp;amp; vi/emacs arbeitet kann sofort zum Abschnitt stlink springen, für die Klickibunti-Fraktion folgt jetzt die Installation der IDE.&lt;br /&gt;
==== Eclipse IDE ====&lt;br /&gt;
Nach der Installation der Toolchain folgt jetzt die IDE hier habe ich mich für Eclipse entschieden. Zunächst sucht man sich auf [http://www.eclipse.org/downloads/ eclipse.org] aus einen der vielen Pakete das für sich passende raus. Das sinnvollste an dieser Stelle ist &amp;quot;Eclipse IDE for C/C++ Developers&amp;quot;. Wer aber vor hat die IDE nicht nur für C/C++ zu verwenden ist mit &amp;quot;Eclipse Classic&amp;quot; vielleicht besser bedient.&lt;br /&gt;
&lt;br /&gt;
Ich werde hier Eclipse Classic 3.7.1 verwenden und zeigen wie das CDT (C/C++ Development Tooling) installiert wird.&lt;br /&gt;
Um Eclipse zu &amp;quot;installieren&amp;quot; muss das Archiv nur an einem Ort seiner Wahl entpackt werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux:/home/user/Downloads# cd /opt&lt;br /&gt;
root@linux:/opt# tar xvf /home/user/Downloads/eclipse-SDK-3.7.1-linux-gtk.tar.gz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Die IDE lässt sich nun wie folgt starten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
user@linux:~$ /opt/eclipse/eclipse&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Wie ein Starter angelegt wird liest du am besten im Handbuch/Wiki zu deiner Distribution nach.&lt;br /&gt;
&lt;br /&gt;
Als nächstes folgt die Installation der benötigten Plugins. Der Abschnitt &amp;quot;CDT  (C/C++ Development Tooling)&amp;quot; kann übersprungen werden, wenn man das Eclipse-Paket &amp;quot;Eclipse IDE for C/C++ Developers&amp;quot; installiert hat.&lt;br /&gt;
===== CDT  (C/C++ Development Tooling) =====&lt;br /&gt;
Zum installieren des CDT wird zuerst die IDE gestartet. Im Hauptfenster wählt man dann den Menüpunkt &#039;&#039;&#039;Help &amp;gt; Install New Software...&#039;&#039;&#039; es erscheint ein neuer Dialog. Das Eingabefeld &#039;&#039;&#039;Work with:&#039;&#039;&#039; wird mit &#039;&#039;&#039;http://download.eclipse.org/tools/cdt/releases/indigo&#039;&#039;&#039; ausgefüllt und mit der &#039;&#039;&#039;Return-Taste&#039;&#039;&#039; abgeschickt.&lt;br /&gt;
&lt;br /&gt;
Im unteren Teil des Dialogs werden nun die verfügbaren Plugins aufgelistet, benötigt wird das Plugin &#039;&#039;&#039;C/C++ Development Tools&#039;&#039;&#039; aus der Rubrik &#039;&#039;&#039;CDT Main Features&#039;&#039;&#039;. Einfach ein Haken davor machen und auf &#039;&#039;&#039;Next&#039;&#039;&#039; klicken. Es erscheint eine Zusammenfassung und eine Seite weiter die Lizenz, die man sich durchlesen sollte und dann bestenfalls bestätigt. Mit einem klick auf &#039;&#039;&#039;Finish&#039;&#039;&#039; wird das Plugin heruntergeladen und installiert.&lt;br /&gt;
&lt;br /&gt;
Nach der Installation des Plugins sollte Eclipse neu gestartet werden. Auf der Willkommen-Seite ist nun ein Punkt C/C++ Development zusehen bzw. lässt sich im Menü per &#039;&#039;&#039;File &amp;gt; New &amp;gt; Project...&#039;&#039;&#039; ein C oder C++ Projekt anlegen.&lt;br /&gt;
===== GNU ARM Eclipse Plug-in =====&lt;br /&gt;
Mit der jetzigen Installation ist es bereits möglich einfache C/C++ Projekte zu erstellen und Makefiles zu importieren. Jetzt fehlt noch das Bindeglied zwischen der Toolchain und Eclipse. Dazu gibt es das [http://sourceforge.net/projects/gnuarmeclipse/ GNU ARM Eclipse Plug-in]. Mit dem Plugin kann man nun die Konfiguration des Compilers und Linkers in Eclipse erledigen was sonst in einem Makefile geschieht.&lt;br /&gt;
&lt;br /&gt;
Die Installation des Plugins funktioniert genauso wie die Installation des CDT, nur mit anderer Quelle. Hier die Kurzfassung:&lt;br /&gt;
# &#039;&#039;&#039;Help &amp;gt; Install New Software...&#039;&#039;&#039;&lt;br /&gt;
# &#039;&#039;&#039;Work with:&#039;&#039;&#039; mit http://gnuarmeclipse.sourceforge.net/updates ausfüllen und mit &#039;&#039;&#039;Return-Taste&#039;&#039;&#039; bestätigen.&lt;br /&gt;
# Einen Haken vor CDT GNU Cross Development Tools machen und &#039;&#039;&#039;Next&#039;&#039;&#039; drücken.&lt;br /&gt;
# Es erscheint eine Zusammenfassung mit &#039;&#039;&#039;Next&#039;&#039;&#039; zu nächsten Seite.&lt;br /&gt;
# Lizenzvereinbarung lesen und akzeptieren Installation mit klick auf &#039;&#039;&#039;Finish&#039;&#039;&#039; starten.&lt;br /&gt;
# Es erscheint noch eine Warnung, dass die Dateien nicht signiert sind. Diesen bitte mit &#039;&#039;&#039;OK&#039;&#039;&#039; bestätigen.&lt;br /&gt;
#  Eclipse neu starten.&lt;br /&gt;
&lt;br /&gt;
Beim erstellen eines neuen C oder C++ Projekts kann nun die Toolchain ARM Linux GCC (Sourcery G++ Lite) gewählt werden.&lt;br /&gt;
Bevor mit den Beispielen begonnen werden kann muss noch die Frage geklärt werden wie die Daten auf den Chip kommen.&lt;br /&gt;
==== stlink ====&lt;br /&gt;
Das Entwicklungsboard STM32F4-Discovery von ST kann über USB per STLinkV2 Programmiert werden. Für Linux gibt es da den [https://github.com/texane/stlink &amp;quot;stm32 discovery line linux programmer&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
Die Tools liegen als Quelltext vor und müssen zuerst kompiliert werden. Dann mal los! Solltest du mit deinem Linux noch nie ein Programm kompiliert haben siehe am besten erst in dem Handbuch/Wiki zu deiner Distribution nach was du benötigst (Ubuntu benötigt z.B. die Pakete build-essential und git).&lt;br /&gt;
&lt;br /&gt;
Als erstes die Quelltexte laden&lt;br /&gt;
&amp;lt;pre&amp;gt;user@linux:~/src$ git clone git://github.com/texane/stlink.git&amp;lt;/pre&amp;gt;&lt;br /&gt;
Um die Tools nun kompilieren zu können werden noch die Quelltexte der libusb 1.0 benötigt. Bei einem Ubuntu-System ist dies das Paket libusb-1.0.0-dev (Lubuntu 11.10).&amp;lt;br /&amp;gt;&lt;br /&gt;
Jetzt kann der Quelltext kompiliert werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
user@linux:~/src$ cd stlink&lt;br /&gt;
user@linux:~/src/stlink$ make&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Wenn das ganze Fehlerfrei durch gelaufen ist kann man den ganzen Ordner oder alternativ auch nur ./flash/flash und ./gdbserver/st-util kopieren und per Umgebungsvariable PATH verfügbar machen.&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Achtung&#039;&#039;&#039;: &amp;lt;u&amp;gt;Im folgendem Block benenne ich flash in st-flash um, weil ich flash nicht besonders passend finde wenn man es per Umgebungsvariable verfügbar macht.&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux:~# mkdir /opt/stlink&lt;br /&gt;
root@linux:~# cd /opt/stlink&lt;br /&gt;
root@linux:/opt/stlink# cp /home/user/src/stlink/flash/flash ./st-flash&lt;br /&gt;
root@linux:/opt/stlink# cp /home/user/src/stlink/gdbserver/st-util .&lt;br /&gt;
root@linux:/opt/stlink# echo PATH=\&amp;quot;$PATH:/opt/stlink\&amp;quot; &amp;gt;&amp;gt; /etc/environment&lt;br /&gt;
root@linux:/opt/stlink# source /etc/environment&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nun brauchen die beiden Tools noch Schreibrechte für das USB-Gerät.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux:~# cp /home/user/src/stlink/49-stlinkv*.rules /etc/udev/rules.d&lt;br /&gt;
root@linux:~# udevadm control --reload-rules&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Wird nun das STM32F4-Discovery an den PC gesteckt wird ein neues Device erzeugt, bei mir war das &#039;&#039;&#039;/dev/stlinkv2_2&#039;&#039;&#039;.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Für Boards mit STLink v1 solltest du dir einmal die README zu stlink durchlesen.&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollte das soweit alles geklappt haben, ist das jetzt der perfekte Zeitpunkt um ein Backup der Firmware zu machen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
user@linux:~$ st-flash read ~/STM32F4-Discovery.bin 0x8000000 0x100000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Mit folgendem Befehl kann die Datei  wieder zurück geschrieben werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
user@linux:~$ st-flash write ~/STM32F4-Discovery.bin 0x8000000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==== TODO ====&lt;br /&gt;
Einbindung des gdb-Servers und flash-Tools in Eclipse.&lt;br /&gt;
== Beispiel-Projekte ==&lt;br /&gt;
=== Vorbereitungen ===&lt;br /&gt;
==== Standard Peripherals Library ====&lt;br /&gt;
Bevor jetzt der erste Quelltext in den Editor gehackt wird, kann man sich das Leben etwas leichter machen. STMicroelectronics stellt für seine Microprozessoren Bibliotheken bereit, die einem eine ganze Menge Arbeit abnimmt.&lt;br /&gt;
&lt;br /&gt;
Die Rede ist von der &amp;quot;Standard Peripherals Library&amp;quot;, diese lässt sich auf der Seite von [http://www.st.com STMicroelectronics] herunter laden. Der Weg dorthin ist dank einer wunderschön gestalteten Homepage etwas steinig.&amp;lt;br /&amp;gt;&lt;br /&gt;
Auf der Hauptseite wählt man zuerst in der Rubrik &#039;&#039;&#039;Products&#039;&#039;&#039; die Kategorie &#039;&#039;&#039;Micros &amp;amp; Memories&#039;&#039;&#039; und danach &#039;&#039;&#039;Mikrocontrollers&#039;&#039;&#039;. Als nächstes wird auf die Registerkarte &#039;&#039;&#039;Resources&#039;&#039;&#039; gewechselt. Im Bereich &#039;&#039;&#039;Software Resources&#039;&#039;&#039; wird der Punkt &#039;&#039;&#039;Firmware&#039;&#039;&#039; ausgewählt. Es öffnet sich ein neues Browserfenster/-tab mit einer Liste von Dateien. Im oberen Bereich gibt es ein Suchfeld. Hier kann nach den &amp;quot;standard peripherals library&amp;quot; gesucht werde&lt;br /&gt;
Für das STM32F4-Discovery benötigen wir die Datei [http://www.st.com/internet/com/SOFTWARE_RESOURCES/SW_COMPONENT/FIRMWARE/stm32f4_dsp_stdperiph_lib.zip STM32F4 DSP and standard peripherals library]&lt;br /&gt;
&lt;br /&gt;
Die Datei kann an einen beliebigen Ort entpackt werden.&lt;br /&gt;
==== Neues Projekt anlegen ====&lt;br /&gt;
Jetzt kann mit der Programmierarbeit begonnen werden. Falls noch nicht geschehen kann nun die IDE gestartet werden, im Terminal geht das bei meiner Installation mit:&lt;br /&gt;
&amp;lt;pre&amp;gt;user@linux:~$ /opt/eclipse/eclipse&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nun wird ein neues Projekt geöffnet folgende Schritte sind nötig:&lt;br /&gt;
# File &amp;gt; New &amp;gt; Project...&lt;br /&gt;
# C/C++ &amp;gt; C Project; Next&lt;br /&gt;
# ARM Cross Target Application &amp;gt; Empty Project&lt;br /&gt;
# Toolchains = ARM Linux GCC (Sourcery G++ Lite)&lt;br /&gt;
# Project name = (Hier den Projektnamen eingeben); Finish&lt;br /&gt;
# Eventuell wird nach der C/C++ Perspective gefragt, diesen Dialog mit &#039;&#039;&#039;Yes&#039;&#039;&#039; beantworten.&lt;br /&gt;
Auf der linken Seite im &#039;&#039;&#039;Project Explorer&#039;&#039;&#039; siehst du nun das neue Projekt, sobald du die Baumstruktur öffnest sollte bereits ein Ordner &#039;&#039;&#039;Includes&#039;&#039;&#039; vorhanden sein, dort gibt es bereits 3 Einträge:&lt;br /&gt;
* &#039;&#039;&#039;/opt/CodeSourcery/arm-2011.09/arm-none-eabi/include&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;/opt/CodeSourcery/arm-2011.09/lib/gcc/arm-none-eabi/4.6.1/include&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;/opt/CodeSourcery/arm-2011.09/lib/gcc/arm-none-eabi/4.6.1/include-fixed&#039;&#039;&#039;&lt;br /&gt;
Wenn diese Einträge &amp;lt;u&amp;gt;nicht&amp;lt;/u&amp;gt; vorhanden sind, ist bis hierhin etwas schief gegangen. Vermutlich wurde die Umgebungsvariable PATH nicht korrekt gesetzt.&lt;br /&gt;
&lt;br /&gt;
Wenn bis hierhin alles geklappt hat können nun die weiteren Einstellungen vorgenommen werden. Zuerst werden die Header-Datei der Standard Peripherals Library hinzu gefügt.&lt;br /&gt;
# Project &amp;gt; Properties&lt;br /&gt;
# C/C++ General &amp;gt; Paths and Symbols&lt;br /&gt;
# Configuration = [All configurations]&lt;br /&gt;
# Reiter Includes, Languages = GNU C&lt;br /&gt;
Hier werden nun die Pfade zu den Header-Dateien der Standard Peripherals Library eingetragen. Ich habe das von ST heruntergeladene Archiv nach /home/user/eclipse/STM32/ entpackt. daraus ergeben sich für mich folgende Pfade die eingetragen werden müssen:&lt;br /&gt;
* /home/user/eclipse/STM32/STM32F4xx StdPeriphLib V1.0.0/Libraries/CMSIS/Include&lt;br /&gt;
* /home/user/eclipse/STM32/STM32F4xx StdPeriphLib V1.0.0/Libraries/CMSIS/Device/ST/STM32F4xx/Include&lt;br /&gt;
* /home/user/eclipse/STM32/STM32F4xx StdPeriphLib V1.0.0/Libraries/STM32F4xx_StdPeriph_Driver/inc&lt;br /&gt;
* /${ProjDirPath}&lt;br /&gt;
Als nächstes werden die Quellcode-Dateien der Standard Peripherals Library hinzugefügt.&lt;br /&gt;
# Reiter Source Location&lt;br /&gt;
# Link Folder..., Folder Name = StdPeriph&lt;br /&gt;
# Link to folder in the filesystem aktivieren&lt;br /&gt;
# Browse..., Verzeichniss = /user/eclipse/STM32/STM32F4xx StdPeriphLib V1.0.0/Libraries/STM32F4xx_StdPeriph_Driver/src&lt;br /&gt;
Jetzt noch 2 Symbole anlegen:&lt;br /&gt;
# Reiter Symbols, Languages = GNU C&lt;br /&gt;
# Add..., Name: = USE_STDPERIPH_DRIVER &amp;gt; OK&lt;br /&gt;
# Add..., Name: = USE_STM32_DISCOVERY &amp;gt; OK&lt;br /&gt;
Nun noch ein Linker-Script aktivieren.&lt;br /&gt;
# C/C++ Build &amp;gt; Settings&lt;br /&gt;
# Configuration = [All configurations]&lt;br /&gt;
# ARM Sourcery Linux GCC Linker &amp;gt; General&lt;br /&gt;
# Script File  (-T) = /${ProjDirPath}/stm32_flash.ld&lt;br /&gt;
Als letztes noch das Ausgabeformat auf Binary einstellen.&lt;br /&gt;
# ARM Sourcery Linux GNU Create Flash Image &amp;gt; Output&lt;br /&gt;
# Output file format (-O) = binary&lt;br /&gt;
Der Dialog kann nun mit &#039;&#039;&#039;OK&#039;&#039;&#039; geschlossen werden.&lt;br /&gt;
&lt;br /&gt;
Jetzt müssen noch 3 Dateien ins Projekt kopiert werden.&lt;br /&gt;
* /home/user/eclipse/STM32/STM32F4xx StdPeriphLib V1.0.0/Project/STM32F4xx_StdPeriph_Templates/TrueSTUDIO/STM324xG_EVAL/stm32_flash.ld&lt;br /&gt;
* /home/user/eclipse/STM32/STM32F4xx StdPeriphLib V1.0.0/Libraries/CMSIS/Device/ST/STM32F4xx/Source/Templates/system_stm32f4xx.c&lt;br /&gt;
* /home/user/eclipse/STM32/STM32F4xx StdPeriphLib V1.0.0/Libraries/CMSIS/Device/ST/STM32F4xx/Source/Templates/TrueSTUDIO/startup_stm32f4xx.s&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Die Dateiendung der Datei startup_stm32f4xx.s muss noch in ein geoßes S geändert werden. Ausserdem muss in der Datei folgende Anweisung auskommentiert werden.&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/* Call static constructors */&lt;br /&gt;
//    bl __libc_init_array &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis zur Ausgabedatei&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
Die kompilierte Datei befindet sich im Ordner Debug oder Release im Projektverzeichniss. Die Datei  besitzt den Namen des Prejekts und endet auf .hex. Die Endung ist zwar hex beinhaltet aber trotzdem ein Binary.&lt;br /&gt;
&lt;br /&gt;
Jetzt kann mit der Programmierung begonnen werden.&lt;br /&gt;
=== Beispiel: Blinky ===&lt;br /&gt;
Hier ein Beispiel welches die 4 LEDs um den MEMS-Sensor herum leuchten.&lt;br /&gt;
&lt;br /&gt;
main.c&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
#include &amp;quot;stm32f4xx.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
GPIO_InitTypeDef  GPIO_InitStructure;&lt;br /&gt;
&lt;br /&gt;
void Delay(__IO uint32_t nCount) {&lt;br /&gt;
  while(nCount--) {&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main(void) {&lt;br /&gt;
  /* GPIOD Periph clock enable */&lt;br /&gt;
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);&lt;br /&gt;
&lt;br /&gt;
  /* Configure PD12, 13, 14 and PD15 in output pushpull mode */&lt;br /&gt;
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;&lt;br /&gt;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;&lt;br /&gt;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;&lt;br /&gt;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;&lt;br /&gt;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;&lt;br /&gt;
  GPIO_Init(GPIOD, &amp;amp;GPIO_InitStructure);&lt;br /&gt;
&lt;br /&gt;
  while (1) {&lt;br /&gt;
    /* Set PD12 Green */&lt;br /&gt;
    GPIOD-&amp;gt;BSRRL = GPIO_Pin_12;&lt;br /&gt;
    /* Reset PD13 Orange, PD14 Red, PD15 Blue */&lt;br /&gt;
    GPIOD-&amp;gt;BSRRH = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;&lt;br /&gt;
    Delay(10000000L);&lt;br /&gt;
&lt;br /&gt;
    /* Set PD13 Orange */&lt;br /&gt;
    GPIOD-&amp;gt;BSRRL = GPIO_Pin_13;&lt;br /&gt;
    /* Reset PD12 Green, PD14 Red, PD15 Blue */&lt;br /&gt;
    GPIOD-&amp;gt;BSRRH = GPIO_Pin_12 | GPIO_Pin_14 | GPIO_Pin_15;&lt;br /&gt;
    Delay(10000000L);&lt;br /&gt;
&lt;br /&gt;
    /* Set PD14 Red */&lt;br /&gt;
    GPIOD-&amp;gt;BSRRL = GPIO_Pin_14;&lt;br /&gt;
    /* Reset PD12 Green, PD13 Orange, PD15 Blue */&lt;br /&gt;
    GPIOD-&amp;gt;BSRRH = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_15;&lt;br /&gt;
    Delay(10000000L);&lt;br /&gt;
&lt;br /&gt;
    /* Set PD15 Blue */&lt;br /&gt;
    GPIOD-&amp;gt;BSRRL = GPIO_Pin_15;&lt;br /&gt;
    /* Reset PD12 Green, PD13 Orange, PD14 Red */&lt;br /&gt;
    GPIOD-&amp;gt;BSRRH = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14;&lt;br /&gt;
    Delay(10000000L);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
stm32f4xx_conf.h&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
#ifndef __STM32F4xx_CONF_H&lt;br /&gt;
#define __STM32F4xx_CONF_H&lt;br /&gt;
&lt;br /&gt;
/* Includes ------------------------------------------------------------------*/&lt;br /&gt;
/* Uncomment the line below to enable peripheral header file inclusion */&lt;br /&gt;
// #include &amp;quot;stm32f4xx_adc.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_can.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_crc.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_cryp.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_dac.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_dbgmcu.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_dcmi.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_dma.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_exti.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_flash.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_fsmc.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_hash.h&amp;quot;&lt;br /&gt;
#include &amp;quot;stm32f4xx_gpio.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_i2c.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_iwdg.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_pwr.h&amp;quot;&lt;br /&gt;
#include &amp;quot;stm32f4xx_rcc.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_rng.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_rtc.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_sdio.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_spi.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_syscfg.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_tim.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_usart.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;stm32f4xx_wwdg.h&amp;quot;&lt;br /&gt;
// #include &amp;quot;misc.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#ifdef  USE_FULL_ASSERT&lt;br /&gt;
  #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__))&lt;br /&gt;
  void assert_failed(uint8_t* file, uint32_t line);&lt;br /&gt;
#else&lt;br /&gt;
  #define assert_param(expr) ((void)0)&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
[[Kategorie:STM32]]&lt;/div&gt;</summary>
		<author><name>Avr-frickler</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=STM32F4-Discovery&amp;diff=63243</id>
		<title>STM32F4-Discovery</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=STM32F4-Discovery&amp;diff=63243"/>
		<updated>2012-01-10T21:06:10Z</updated>

		<summary type="html">&lt;p&gt;Avr-frickler: Abschnitt Projekt-Konfiguration hinzugefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieser Wiki-Artikel soll den Einstieg in die Prozessorfamilie STM32 von [http://www.st.com STMicroelectronics] erleichtern. Der Artikel begleitet dich von der Installation der benötigten Software bis hin zum flashen des Beispiels in den Prozessor.&amp;lt;br/&amp;gt;&lt;br /&gt;
Da es für Windows schon einiges im Internet zu finden gibt, wird die Installation der Toolchain für Linux beschrieben. Die verwendeten Tools sind allerdings als Quelltext oder als Windows-Installation verfügbar, somit lassen sich die meisten Schritte auch auf Windows-Betriebssystemen nachvollziehen.&lt;br /&gt;
== Hardware ==&lt;br /&gt;
Das in diesem Artikel verwendete Board [http://www.st.com/internet/evalboard/product/252419.jsp STM32F4-Discovery] lässt sich z.B. bei [http://www.watterott.com/de/STM32F4Discovery Watterott] bestellen.&lt;br /&gt;
Es lassen sich auch andere Boards verwenden, allerdings müssen die Beispiele dem Schaltplan entsprechend angepasst werden.&lt;br /&gt;
== Software ==&lt;br /&gt;
Um das Dateisystem möglicht sauber zu halten installiere ich hier sämtliche Software in das Unterverzeichnis /opt welches für solche Installationen vorgesehen ist. Damit auf dieses Verzeichnis schreibend zugegriffen werden darf sind root-Rechte erforderlich. Ich werde vor den Befehlen immer den Prompt schreiben damit zu erkennen ist welche Rechte notwendig sind.&lt;br /&gt;
&lt;br /&gt;
Es ist natürlich auch möglich alles in sein Heimat-Verzeichnis zu schreiben, hier kommt man dann grössten Teils ohne root-Rechte aus. Das muss aber jeder für sich selbst entscheiden wie er es mag.&lt;br /&gt;
&lt;br /&gt;
Nicht alle Linux-Distributionen sind gleich, ich arbeite hier mit einem (fast) frischem Lubuntu 11.10. Der grösste Teil sollte also mit Ubuntu und Debian-Systemen funktionieren. Für andere Distributionen kann man den entsprechenden Abschnitt editieren oder auf der [[Diskussion:STM32F4-Discovery]] zu diesem Artikel vermerken.&lt;br /&gt;
==== Sourcery CodeBench Lite Edition for ARM EABI ====&lt;br /&gt;
[[Datei:Sup_processors.jpg|thumb|left]]&lt;br /&gt;
Als erstes benötigen wir die Toolchain mit Compiler &amp;amp; Linker. Hier verwenden wir die [http://www.mentor.com/embedded-software/sourcery-tools/sourcery-codebench/editions/lite-edition/ Sourcery Codebench von Mentor]. In der Auswahlbox &amp;quot;Supported Prozessors&amp;quot; wählt man in der Rubrik &amp;quot;ARM processors&amp;quot; den Punkt &amp;quot;Download the EABI Release &amp;gt;&amp;quot; aus.&lt;br /&gt;
&lt;br /&gt;
Leider muss man sich registrieren. Nach der Registrierung erhält man einen Link per E-Mail zur Downloadseite. Man wählt das &amp;quot;Recommended Release&amp;quot; aus und lädt dort die Datei &amp;quot;IA32 GNU/Linux TAR&amp;quot; herunter.&lt;br /&gt;
&lt;br /&gt;
[https://sourcery.mentor.com/sgpp/lite/arm/portal/package9740/public/arm-none-eabi/arm-2011.09-69-arm-none-eabi-i686-pc-linux-gnu.tar.bz2 Direktlink Linux] [https://sourcery.mentor.com/sgpp/lite/arm/portal/package9741/public/arm-none-eabi/arm-2011.09-69-arm-none-eabi-i686-mingw32.tar.bz2 Direktlink Windows]&lt;br /&gt;
&lt;br /&gt;
Die Datei muss einfach nur an einem beliebigem Ort entpackt werden und die Umgebungsvariable PATH erweitert werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux:/home/user/Downloads# mkdir /opt/CodeSourcery&lt;br /&gt;
root@linux:/home/user/Downloads# cd /opt/CodeSourcery&lt;br /&gt;
root@linux:/opt/CodeSourcery# tar xvf /home/user/Downloads/arm-2011.09-69-arm-none-eabi-i686-pc-linux-gnu.tar.bz2&lt;br /&gt;
root@linux:/opt/CodeSourcery# ls&lt;br /&gt;
arm-2011.09&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anpassen der Umgebungsvariable PATH, die Anpassung ermöglicht es Eclipse den Compiler im Dateisystem zu finden ohne den absoluten Pfad anzugeben.&amp;lt;br /&amp;gt;&lt;br /&gt;
Es gibt verschiedene Orte wo sich die Variable anpassen lässt. Auf meinem System habe ich die Datei /etc/environment angepasst.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux:/opt/CodeSourcery# echo PATH=\&amp;quot;$PATH:/opt/CodeSourcery/arm-2011.09/bin\&amp;quot; &amp;gt;&amp;gt; /etc/environment&lt;br /&gt;
root@linux:/opt/CodeSourcery# source /etc/environment&lt;br /&gt;
root@linux:/opt/CodeSourcery# arm-none-eabi-gcc --version&lt;br /&gt;
arm-none-eabi-gcc (Sourcery CodeBench Lite 2011.09-69) 4.6.1&lt;br /&gt;
Copyright (C) 2011 Free Software Foundation, Inc.&lt;br /&gt;
This is free software; see the source for copying conditions.  There is NO&lt;br /&gt;
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer gerne mit der Konsole &amp;amp; vi/emacs arbeitet kann sofort zum Abschnitt stlink springen, für die Klickibunti-Fraktion folgt jetzt die Installation der IDE.&lt;br /&gt;
==== Eclipse IDE ====&lt;br /&gt;
Nach der Installation der Toolchain folgt jetzt die IDE hier habe ich mich für Eclipse entschieden. Zunächst sucht man sich auf [http://www.eclipse.org/downloads/ eclipse.org] aus einen der vielen Pakete das für sich passende raus. Das sinnvollste an dieser Stelle ist &amp;quot;Eclipse IDE for C/C++ Developers&amp;quot;. Wer aber vor hat die IDE nicht nur für C/C++ zu verwenden ist mit &amp;quot;Eclipse Classic&amp;quot; vielleicht besser bedient.&lt;br /&gt;
&lt;br /&gt;
Ich werde hier Eclipse Classic 3.7.1 verwenden und zeigen wie das CDT (C/C++ Development Tooling) installiert wird.&lt;br /&gt;
Um Eclipse zu &amp;quot;installieren&amp;quot; muss das Archiv nur an einem Ort seiner Wahl entpackt werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux:/home/user/Downloads# cd /opt&lt;br /&gt;
root@linux:/opt# tar xvf /home/user/Downloads/eclipse-SDK-3.7.1-linux-gtk.tar.gz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Die IDE lässt sich nun wie folgt starten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
user@linux:~$ /opt/eclipse/eclipse&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Wie ein Starter angelegt wird liest du am besten im Handbuch/Wiki zu deiner Distribution nach.&lt;br /&gt;
&lt;br /&gt;
Als nächstes folgt die Installation der benötigten Plugins. Der Abschnitt &amp;quot;CDT  (C/C++ Development Tooling)&amp;quot; kann übersprungen werden, wenn man das Eclipse-Paket &amp;quot;Eclipse IDE for C/C++ Developers&amp;quot; installiert hat.&lt;br /&gt;
===== CDT  (C/C++ Development Tooling) =====&lt;br /&gt;
Zum installieren des CDT wird zuerst die IDE gestartet. Im Hauptfenster wählt man dann den Menüpunkt &#039;&#039;&#039;Help &amp;gt; Install New Software...&#039;&#039;&#039; es erscheint ein neuer Dialog. Das Eingabefeld &#039;&#039;&#039;Work with:&#039;&#039;&#039; wird mit &#039;&#039;&#039;http://download.eclipse.org/tools/cdt/releases/indigo&#039;&#039;&#039; ausgefüllt und mit der &#039;&#039;&#039;Return-Taste&#039;&#039;&#039; abgeschickt.&lt;br /&gt;
&lt;br /&gt;
Im unteren Teil des Dialogs werden nun die verfügbaren Plugins aufgelistet, benötigt wird das Plugin &#039;&#039;&#039;C/C++ Development Tools&#039;&#039;&#039; aus der Rubrik &#039;&#039;&#039;CDT Main Features&#039;&#039;&#039;. Einfach ein Haken davor machen und auf &#039;&#039;&#039;Next&#039;&#039;&#039; klicken. Es erscheint eine Zusammenfassung und eine Seite weiter die Lizenz, die man sich durchlesen sollte und dann bestenfalls bestätigt. Mit einem klick auf &#039;&#039;&#039;Finish&#039;&#039;&#039; wird das Plugin heruntergeladen und installiert.&lt;br /&gt;
&lt;br /&gt;
Nach der Installation des Plugins sollte Eclipse neu gestartet werden. Auf der Willkommen-Seite ist nun ein Punkt C/C++ Development zusehen bzw. lässt sich im Menü per &#039;&#039;&#039;File &amp;gt; New &amp;gt; Project...&#039;&#039;&#039; ein C oder C++ Projekt anlegen.&lt;br /&gt;
===== GNU ARM Eclipse Plug-in =====&lt;br /&gt;
Mit der jetzigen Installation ist es bereits möglich einfache C/C++ Projekte zu erstellen und Makefiles zu importieren. Jetzt fehlt noch das Bindeglied zwischen der Toolchain und Eclipse. Dazu gibt es das [http://sourceforge.net/projects/gnuarmeclipse/ GNU ARM Eclipse Plug-in]. Mit dem Plugin kann man nun die Konfiguration des Compilers und Linkers in Eclipse erledigen was sonst in einem Makefile geschieht.&lt;br /&gt;
&lt;br /&gt;
Die Installation des Plugins funktioniert genauso wie die Installation des CDT, nur mit anderer Quelle. Hier die Kurzfassung:&lt;br /&gt;
# &#039;&#039;&#039;Help &amp;gt; Install New Software...&#039;&#039;&#039;&lt;br /&gt;
# &#039;&#039;&#039;Work with:&#039;&#039;&#039; mit http://gnuarmeclipse.sourceforge.net/updates ausfüllen und mit &#039;&#039;&#039;Return-Taste&#039;&#039;&#039; bestätigen.&lt;br /&gt;
# Einen Haken vor CDT GNU Cross Development Tools machen und &#039;&#039;&#039;Next&#039;&#039;&#039; drücken.&lt;br /&gt;
# Es erscheint eine Zusammenfassung mit &#039;&#039;&#039;Next&#039;&#039;&#039; zu nächsten Seite.&lt;br /&gt;
# Lizenzvereinbarung lesen und akzeptieren Installation mit klick auf &#039;&#039;&#039;Finish&#039;&#039;&#039; starten.&lt;br /&gt;
# Es erscheint noch eine Warnung, dass die Dateien nicht signiert sind. Diesen bitte mit &#039;&#039;&#039;OK&#039;&#039;&#039; bestätigen.&lt;br /&gt;
#  Eclipse neu starten.&lt;br /&gt;
&lt;br /&gt;
Beim erstellen eines neuen C oder C++ Projekts kann nun die Toolchain ARM Linux GCC (Sourcery G++ Lite) gewählt werden.&lt;br /&gt;
Bevor mit den Beispielen begonnen werden kann muss noch die Frage geklärt werden wie die Daten auf den Chip kommen.&lt;br /&gt;
==== stlink ====&lt;br /&gt;
Das Entwicklungsboard STM32F4-Discovery von ST kann über USB per STLinkV2 Programmiert werden. Für Linux gibt es da den [https://github.com/texane/stlink &amp;quot;stm32 discovery line linux programmer&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
Die Tools liegen als Quelltext vor und müssen zuerst kompiliert werden. Dann mal los! Solltest du mit deinem Linux noch nie ein Programm kompiliert haben siehe am besten erst in dem Handbuch/Wiki zu deiner Distribution nach was du benötigst (Ubuntu benötigt z.B. die Pakete build-essential und git).&lt;br /&gt;
&lt;br /&gt;
Als erstes die Quelltexte laden&lt;br /&gt;
&amp;lt;pre&amp;gt;user@linux:~/src$ git clone git://github.com/texane/stlink.git&amp;lt;/pre&amp;gt;&lt;br /&gt;
Um die Tools nun kompilieren zu können werden noch die Quelltexte der libusb 1.0 benötigt. Bei einem Ubuntu-System ist dies das Paket libusb-1.0.0-dev (Lubuntu 11.10).&amp;lt;br /&amp;gt;&lt;br /&gt;
Jetzt kann der Quelltext kompiliert werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
user@linux:~/src$ cd stlink&lt;br /&gt;
user@linux:~/src/stlink$ make&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Wenn das ganze Fehlerfrei durch gelaufen ist kann man den ganzen Ordner oder alternativ auch nur ./flash/flash und ./gdbserver/st-util kopieren und per Umgebungsvariable PATH verfügbar machen.&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Achtung&#039;&#039;&#039;: &amp;lt;u&amp;gt;Im folgendem Block benenne ich flash in st-flash um, weil ich flash nicht besonders passend finde wenn man es per Umgebungsvariable verfügbar macht.&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux:~# mkdir /opt/stlink&lt;br /&gt;
root@linux:~# cd /opt/stlink&lt;br /&gt;
root@linux:/opt/stlink# cp /home/user/src/stlink/flash/flash ./st-flash&lt;br /&gt;
root@linux:/opt/stlink# cp /home/user/src/stlink/gdbserver/st-util .&lt;br /&gt;
root@linux:/opt/stlink# echo PATH=\&amp;quot;$PATH:/opt/stlink\&amp;quot; &amp;gt;&amp;gt; /etc/environment&lt;br /&gt;
root@linux:/opt/stlink# source /etc/environment&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nun brauchen die beiden Tools noch Schreibrechte für das USB-Gerät.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux:~# cp /home/user/src/stlink/49-stlinkv*.rules /etc/udev/rules.d&lt;br /&gt;
root@linux:~# udevadm control --reload-rules&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Wird nun das STM32F4-Discovery an den PC gesteckt wird ein neues Device erzeugt, bei mir war das &#039;&#039;&#039;/dev/stlinkv2_2&#039;&#039;&#039;.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Für Boards mit STLink v1 solltest du dir einmal die README zu stlink durchlesen.&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollte das soweit alles geklappt haben, ist das jetzt der perfekte Zeitpunkt um ein Backup der Firmware zu machen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
user@linux:~$ st-flash read ~/STM32F4-Discovery.bin 0x00 0x100000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==== TODO ====&lt;br /&gt;
Einbindung des gdb-Servers und flash-Tools in Eclipse.&lt;br /&gt;
== Beispiel-Projekte ==&lt;br /&gt;
=== Vorbereitungen ===&lt;br /&gt;
==== Standard Peripherals Library ====&lt;br /&gt;
Bevor jetzt der erste Quelltext in den Editor gehackt wird, kann man sich das Leben etwas leichter machen. STMicroelectronics stellt für seine Microprozessoren Bibliotheken bereit, die einem eine ganze Menge Arbeit abnimmt.&lt;br /&gt;
&lt;br /&gt;
Die Rede ist von der &amp;quot;Standard Peripherals Library&amp;quot;, diese lässt sich auf der Seite von [http://www.st.com STMicroelectronics] herunter laden. Der Weg dorthin ist dank einer wunderschön gestalteten Homepage etwas steinig.&amp;lt;br /&amp;gt;&lt;br /&gt;
Auf der Hauptseite wählt man zuerst in der Rubrik &#039;&#039;&#039;Products&#039;&#039;&#039; die Kategorie &#039;&#039;&#039;Micros &amp;amp; Memories&#039;&#039;&#039; und danach &#039;&#039;&#039;Mikrocontrollers&#039;&#039;&#039;. Als nächstes wird auf die Registerkarte &#039;&#039;&#039;Resources&#039;&#039;&#039; gewechselt. Im Bereich &#039;&#039;&#039;Software Resources&#039;&#039;&#039; wird der Punkt &#039;&#039;&#039;Firmware&#039;&#039;&#039; ausgewählt. Es öffnet sich ein neues Browserfenster/-tab mit einer Liste von Dateien. Im oberen Bereich gibt es ein Suchfeld. Hier kann nach den &amp;quot;standard peripherals library&amp;quot; gesucht werde&lt;br /&gt;
Für das STM32F4-Discovery benötigen wir die Datei [http://www.st.com/internet/com/SOFTWARE_RESOURCES/SW_COMPONENT/FIRMWARE/stm32f4_dsp_stdperiph_lib.zip STM32F4 DSP and standard peripherals library]&lt;br /&gt;
&lt;br /&gt;
Die Datei kann an einen beliebigen Ort entpackt werden.&lt;br /&gt;
==== Neues Projekt anlegen ====&lt;br /&gt;
Jetzt kann mit der Programmierarbeit begonnen werden. Falls noch nicht geschehen kann nun die IDE gestartet werden, im Terminal geht das bei meiner Installation mit:&lt;br /&gt;
&amp;lt;pre&amp;gt;user@linux:~$ /opt/eclipse/eclipse&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nun wird ein neues Projekt geöffnet folgende Schritte sind nötig:&lt;br /&gt;
# File &amp;gt; New &amp;gt; Project...&lt;br /&gt;
# C/C++ &amp;gt; C Project; Next&lt;br /&gt;
# ARM Cross Target Application &amp;gt; Empty Project&lt;br /&gt;
# Toolchains = ARM Linux GCC (Sourcery G++ Lite)&lt;br /&gt;
# Project name = (Hier den Projektnamen eingeben); Finish&lt;br /&gt;
# Eventuell wird nach der C/C++ Perspective gefragt, diesen Dialog mit &#039;&#039;&#039;Yes&#039;&#039;&#039; beantworten.&lt;br /&gt;
Auf der linken Seite im &#039;&#039;&#039;Project Explorer&#039;&#039;&#039; siehst du nun das neue Projekt, sobald du die Baumstruktur öffnest sollte bereits ein Ordner &#039;&#039;&#039;Includes&#039;&#039;&#039; vorhanden sein, dort gibt es bereits 3 Einträge:&lt;br /&gt;
* &#039;&#039;&#039;/opt/CodeSourcery/arm-2011.09/arm-none-eabi/include&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;/opt/CodeSourcery/arm-2011.09/lib/gcc/arm-none-eabi/4.6.1/include&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;/opt/CodeSourcery/arm-2011.09/lib/gcc/arm-none-eabi/4.6.1/include-fixed&#039;&#039;&#039;&lt;br /&gt;
Wenn diese Einträge &amp;lt;u&amp;gt;nicht&amp;lt;/u&amp;gt; vorhanden sind, ist bis hierhin etwas schief gegangen. Vermutlich wurde die Umgebungsvariable PATH nicht korrekt gesetzt.&lt;br /&gt;
&lt;br /&gt;
Wenn bis hierhin alles geklappt hat können nun die weiteren Einstellungen vorgenommen werden. Zuerst werden die Header-Datei der Standard Peripherals Library hinzu gefügt.&lt;br /&gt;
# Project &amp;gt; Properties&lt;br /&gt;
# C/C++ Build &amp;gt; Settings&lt;br /&gt;
# ARM Sourcery Linux GCC Compiler &amp;gt; Directories&lt;br /&gt;
# Configuration = [All configurations]&lt;br /&gt;
Hier werden nun die Pfade zu den Header-Dateien der Standard Peripherals Library eingetragen. Ich habe das von ST heruntergeladene Archiv nach /home/user/eclipse/STM32/ entpackt. daraus ergebn sich für mich folgende Pfade die eingetragen werden müssen:&lt;br /&gt;
* /home/user/eclipse/STM32/STM32F4xx StdPeriphLib V1.0.0/Libraries/CMSIS/Include&lt;br /&gt;
* /home/user/eclipse/STM32/STM32F4xx StdPeriphLib V1.0.0/Libraries/CMSIS/Device/ST/STM32F4xx/Include&lt;br /&gt;
* /home/user/eclipse/STM32/STM32F4xx StdPeriphLib V1.0.0/Libraries/STM32F4xx_StdPeriph_Driver/inc&lt;br /&gt;
Es muss noch ein &lt;br /&gt;
Um die Bibliothek zu aktivieren muss noch eine Umgebungsvariable hinzugefügt werden:&lt;br /&gt;
# C/C++ Build &amp;gt; Environment&lt;br /&gt;
# Add...&amp;gt; Name = USE_STDPERIPH_DRIVER &amp;gt; OK&lt;br /&gt;
Der Dialog kann nun mit &#039;&#039;&#039;OK&#039;&#039;&#039; geschlossen werden.&lt;br /&gt;
&lt;br /&gt;
Jetzt kann fleißig programmiert werden.&lt;br /&gt;
=== Beispiel: GPIO - IOToggle ===&lt;br /&gt;
[[Kategorie:STM32]]&lt;/div&gt;</summary>
		<author><name>Avr-frickler</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=STM32F4-Discovery&amp;diff=63239</id>
		<title>STM32F4-Discovery</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=STM32F4-Discovery&amp;diff=63239"/>
		<updated>2012-01-10T19:22:54Z</updated>

		<summary type="html">&lt;p&gt;Avr-frickler: Änderung an der Erweiterung der Umgebungsvariablen PATH&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieser Wiki-Artikel soll den Einstieg in die Prozessorfamilie STM32 von [http://www.st.com STMicroelectronics] erleichtern. Der Artikel begleitet dich von der Installation der benötigten Software bis hin zum flashen des Beispiels in den Prozessor.&amp;lt;br/&amp;gt;&lt;br /&gt;
Da es für Windows schon einiges im Internet zu finden gibt, wird die Installation der Toolchain für Linux beschrieben. Die verwendeten Tools sind allerdings als Quelltext oder als Windows-Installation verfügbar, somit lassen sich die meisten Schritte auch auf Windows-Betriebssystemen nachvollziehen.&lt;br /&gt;
== Hardware ==&lt;br /&gt;
Das in diesem Artikel verwendete Board [http://www.st.com/internet/evalboard/product/252419.jsp STM32F4-Discovery] lässt sich z.B. bei [http://www.watterott.com/de/STM32F4Discovery Watterott] bestellen.&lt;br /&gt;
Es lassen sich auch andere Boards verwenden, allerdings müssen die Beispiele dem Schaltplan entsprechend angepasst werden.&lt;br /&gt;
== Software ==&lt;br /&gt;
Um das Dateisystem möglicht sauber zu halten installiere ich hier sämtliche Software in das Unterverzeichnis /opt welches für solche Installationen vorgesehen ist. Damit auf dieses Verzeichnis schreibend zugegriffen werden darf sind root-Rechte erforderlich. Ich werde vor den Befehlen immer den Prompt schreiben damit zu erkennen ist welche Rechte notwendig sind.&lt;br /&gt;
&lt;br /&gt;
Es ist natürlich auch möglich alles in sein Heimat-Verzeichnis zu schreiben, hier kommt man dann grössten Teils ohne root-Rechte aus. Das muss aber jeder für sich selbst entscheiden wie er es mag.&lt;br /&gt;
&lt;br /&gt;
Nicht alle Linux-Distributionen sind gleich, ich arbeite hier mit einem (fast) frischem Lubuntu 11.10. Der grösste Teil sollte also mit Ubuntu und Debian-Systemen funktionieren. Für andere Distributionen kann man den entsprechenden Abschnitt editieren oder auf der [[Diskussion:STM32F4-Discovery]] zu diesem Artikel vermerken.&lt;br /&gt;
==== Sourcery CodeBench Lite Edition for ARM EABI ====&lt;br /&gt;
[[Datei:Sup_processors.jpg|thumb|left]]&lt;br /&gt;
Als erstes benötigen wir die Toolchain mit Compiler &amp;amp; Linker. Hier verwenden wir die [http://www.mentor.com/embedded-software/sourcery-tools/sourcery-codebench/editions/lite-edition/ Sourcery Codebench von Mentor]. In der Auswahlbox &amp;quot;Supported Prozessors&amp;quot; wählt man in der Rubrik &amp;quot;ARM processors&amp;quot; den Punkt &amp;quot;Download the EABI Release &amp;gt;&amp;quot; aus.&lt;br /&gt;
&lt;br /&gt;
Leider muss man sich registrieren. Nach der Registrierung erhält man einen Link per E-Mail zur Downloadseite. Man wählt das &amp;quot;Recommended Release&amp;quot; aus und lädt dort die Datei &amp;quot;IA32 GNU/Linux TAR&amp;quot; herunter.&lt;br /&gt;
&lt;br /&gt;
[https://sourcery.mentor.com/sgpp/lite/arm/portal/package9740/public/arm-none-eabi/arm-2011.09-69-arm-none-eabi-i686-pc-linux-gnu.tar.bz2 Direktlink Linux] [https://sourcery.mentor.com/sgpp/lite/arm/portal/package9741/public/arm-none-eabi/arm-2011.09-69-arm-none-eabi-i686-mingw32.tar.bz2 Direktlink Windows]&lt;br /&gt;
&lt;br /&gt;
Die Datei muss einfach nur an einem beliebigem Ort entpackt werden und die Umgebungsvariable PATH erweitert werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux:/home/user/Downloads# mkdir /opt/CodeSourcery&lt;br /&gt;
root@linux:/home/user/Downloads# cd /opt/CodeSourcery&lt;br /&gt;
root@linux:/opt/CodeSourcery# tar xvf /home/user/Downloads/arm-2011.09-69-arm-none-eabi-i686-pc-linux-gnu.tar.bz2&lt;br /&gt;
root@linux:/opt/CodeSourcery# ls&lt;br /&gt;
arm-2011.09&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anpassen der Umgebungsvariable PATH, die Anpassung ermöglicht es Eclipse den Compiler im Dateisystem zu finden ohne den absoluten Pfad anzugeben.&amp;lt;br /&amp;gt;&lt;br /&gt;
Es gibt verschiedene Orte wo sich die Variable anpassen lässt. Auf meinem System habe ich die Datei /etc/environment angepasst.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux:/opt/CodeSourcery# echo PATH=\&amp;quot;$PATH:/opt/CodeSourcery/arm-2011.09/bin\&amp;quot; &amp;gt;&amp;gt; /etc/environment&lt;br /&gt;
root@linux:/opt/CodeSourcery# source /etc/environment&lt;br /&gt;
root@linux:/opt/CodeSourcery# arm-none-eabi-gcc --version&lt;br /&gt;
arm-none-eabi-gcc (Sourcery CodeBench Lite 2011.09-69) 4.6.1&lt;br /&gt;
Copyright (C) 2011 Free Software Foundation, Inc.&lt;br /&gt;
This is free software; see the source for copying conditions.  There is NO&lt;br /&gt;
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer gerne mit der Konsole &amp;amp; vi/emacs arbeitet kann sofort zum Abschnitt stlink springen, für die Klickibunti-Fraktion folgt jetzt die Installation der IDE.&lt;br /&gt;
==== Eclipse IDE ====&lt;br /&gt;
Nach der Installation der Toolchain folgt jetzt die IDE hier habe ich mich für Eclipse entschieden. Zunächst sucht man sich auf [http://www.eclipse.org/downloads/ eclipse.org] aus einen der vielen Pakete das für sich passende raus. Das sinnvollste an dieser Stelle ist &amp;quot;Eclipse IDE for C/C++ Developers&amp;quot;. Wer aber vor hat die IDE nicht nur für C/C++ zu verwenden ist mit &amp;quot;Eclipse Classic&amp;quot; vielleicht besser bedient.&lt;br /&gt;
&lt;br /&gt;
Ich werde hier Eclipse Classic 3.7.1 verwenden und zeigen wie das CDT (C/C++ Development Tooling) installiert wird.&lt;br /&gt;
Um Eclipse zu &amp;quot;installieren&amp;quot; muss das Archiv nur an einem Ort seiner Wahl entpackt werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux:/home/user/Downloads# cd /opt&lt;br /&gt;
root@linux:/opt# tar xvf /home/user/Downloads/eclipse-SDK-3.7.1-linux-gtk.tar.gz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Die IDE lässt sich nun wie folgt starten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
user@linux:~$ /opt/eclipse/eclipse&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Wie ein Starter angelegt wird liest du am besten im Handbuch/Wiki zu deiner Distribution nach.&lt;br /&gt;
&lt;br /&gt;
Als nächstes folgt die Installation der benötigten Plugins. Der Abschnitt &amp;quot;CDT  (C/C++ Development Tooling)&amp;quot; kann übersprungen werden, wenn man das Eclipse-Paket &amp;quot;Eclipse IDE for C/C++ Developers&amp;quot; installiert hat.&lt;br /&gt;
===== CDT  (C/C++ Development Tooling) =====&lt;br /&gt;
Zum installieren des CDT wird zuerst die IDE gestartet. Im Hauptfenster wählt man dann den Menüpunkt &#039;&#039;&#039;Help &amp;gt; Install New Software...&#039;&#039;&#039; es erscheint ein neuer Dialog. Das Eingabefeld &#039;&#039;&#039;Work with:&#039;&#039;&#039; wird mit &#039;&#039;&#039;http://download.eclipse.org/tools/cdt/releases/indigo&#039;&#039;&#039; ausgefüllt und mit der &#039;&#039;&#039;Return-Taste&#039;&#039;&#039; abgeschickt.&lt;br /&gt;
&lt;br /&gt;
Im unteren Teil des Dialogs werden nun die verfügbaren Plugins aufgelistet, benötigt wird das Plugin &#039;&#039;&#039;C/C++ Development Tools&#039;&#039;&#039; aus der Rubrik &#039;&#039;&#039;CDT Main Features&#039;&#039;&#039;. Einfach ein Haken davor machen und auf &#039;&#039;&#039;Next&#039;&#039;&#039; klicken. Es erscheint eine Zusammenfassung und eine Seite weiter die Lizenz, die man sich durchlesen sollte und dann bestenfalls bestätigt. Mit einem klick auf &#039;&#039;&#039;Finish&#039;&#039;&#039; wird das Plugin heruntergeladen und installiert.&lt;br /&gt;
&lt;br /&gt;
Nach der Installation des Plugins sollte Eclipse neu gestartet werden. Auf der Willkommen-Seite ist nun ein Punkt C/C++ Development zusehen bzw. lässt sich im Menü per &#039;&#039;&#039;File &amp;gt; New &amp;gt; Project...&#039;&#039;&#039; ein C oder C++ Projekt anlegen.&lt;br /&gt;
===== GNU ARM Eclipse Plug-in =====&lt;br /&gt;
Mit der jetzigen Installation ist es bereits möglich einfache C/C++ Projekte zu erstellen und Makefiles zu importieren. Jetzt fehlt noch das Bindeglied zwischen der Toolchain und Eclipse. Dazu gibt es das [http://sourceforge.net/projects/gnuarmeclipse/ GNU ARM Eclipse Plug-in]. Mit dem Plugin kann man nun die Konfiguration des Compilers und Linkers in Eclipse erledigen was sonst in einem Makefile geschieht.&lt;br /&gt;
&lt;br /&gt;
Die Installation des Plugins funktioniert genauso wie die Installation des CDT, nur mit anderer Quelle. Hier die Kurzfassung:&lt;br /&gt;
# &#039;&#039;&#039;Help &amp;gt; Install New Software...&#039;&#039;&#039;&lt;br /&gt;
# &#039;&#039;&#039;Work with:&#039;&#039;&#039; mit http://gnuarmeclipse.sourceforge.net/updates ausfüllen und mit &#039;&#039;&#039;Return-Taste&#039;&#039;&#039; bestätigen.&lt;br /&gt;
# Einen Haken vor CDT GNU Cross Development Tools machen und &#039;&#039;&#039;Next&#039;&#039;&#039; drücken.&lt;br /&gt;
# Es erscheint eine Zusammenfassung mit &#039;&#039;&#039;Next&#039;&#039;&#039; zu nächsten Seite.&lt;br /&gt;
# Lizenzvereinbarung lesen und akzeptieren Installation mit klick auf &#039;&#039;&#039;Finish&#039;&#039;&#039; starten.&lt;br /&gt;
# Es erscheint noch eine Warnung, dass die Dateien nicht signiert sind. Diesen bitte mit &#039;&#039;&#039;OK&#039;&#039;&#039; bestätigen.&lt;br /&gt;
#  Eclipse neu starten.&lt;br /&gt;
&lt;br /&gt;
Beim erstellen eines neuen C oder C++ Projekts kann nun die Toolchain ARM Linux GCC (Sourcery G++ Lite) gewählt werden.&lt;br /&gt;
Bevor mit den Beispielen begonnen werden kann muss noch die Frage geklärt werden wie die Daten auf den Chip kommen.&lt;br /&gt;
==== stlink ====&lt;br /&gt;
Das Entwicklungsboard STM32F4-Discovery von ST kann über USB per STLinkV2 Programmiert werden. Für Linux gibt es da den [https://github.com/texane/stlink &amp;quot;stm32 discovery line linux programmer&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
Die Tools liegen als Quelltext vor und müssen zuerst kompiliert werden. Dann mal los! Solltest du mit deinem Linux noch nie ein Programm kompiliert haben siehe am besten erst in dem Handbuch/Wiki zu deiner Distribution nach was du benötigst (Ubuntu benötigt z.B. die Pakete build-essential und git).&lt;br /&gt;
&lt;br /&gt;
Als erstes die Quelltexte laden&lt;br /&gt;
&amp;lt;pre&amp;gt;user@linux:~/src$ git clone git://github.com/texane/stlink.git&amp;lt;/pre&amp;gt;&lt;br /&gt;
Um die Tools nun kompilieren zu können werden noch die Quelltexte der libusb 1.0 benötigt. Bei einem Ubuntu-System ist dies das Paket libusb-1.0.0-dev (Lubuntu 11.10).&amp;lt;br /&amp;gt;&lt;br /&gt;
Jetzt kann der Quelltext kompiliert werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
user@linux:~/src$ cd stlink&lt;br /&gt;
user@linux:~/src/stlink$ make&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Wenn das ganze Fehlerfrei durch gelaufen ist kann man den ganzen Ordner oder alternativ auch nur ./flash/flash und ./gdbserver/st-util kopieren und per Umgebungsvariable PATH verfügbar machen.&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Achtung&#039;&#039;&#039;: &amp;lt;u&amp;gt;Im folgendem Block benenne ich flash in st-flash um, weil ich flash nicht besonders passend finde wenn man es per Umgebungsvariable verfügbar macht.&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux:~# mkdir /opt/stlink&lt;br /&gt;
root@linux:~# cd /opt/stlink&lt;br /&gt;
root@linux:/opt/stlink# cp /home/user/src/stlink/flash/flash ./st-flash&lt;br /&gt;
root@linux:/opt/stlink# cp /home/user/src/stlink/gdbserver/st-util .&lt;br /&gt;
root@linux:/opt/stlink# echo PATH=\&amp;quot;$PATH:/opt/stlink\&amp;quot; &amp;gt;&amp;gt; /etc/environment&lt;br /&gt;
root@linux:/opt/stlink# source /etc/environment&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nun brauchen die beiden Tools noch Schreibrechte für das USB-Gerät.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux:~# cp /home/user/src/stlink/49-stlinkv*.rules /etc/udev/rules.d&lt;br /&gt;
root@linux:~# udevadm control --reload-rules&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Wird nun das STM32F4-Discovery an den PC gesteckt wird ein neues Device erzeugt, bei mir war das &#039;&#039;&#039;/dev/stlinkv2_2&#039;&#039;&#039;.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Für Boards mit STLink v1 solltest du dir einmal die README zu stlink durchlesen.&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollte das soweit alles geklappt haben, ist das jetzt der perfekte Zeitpunkt um ein Backup der Firmware zu machen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
user@linux:~$ st-flash read ~/STM32F4-Discovery.bin 0x00 0x100000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==== TODO ====&lt;br /&gt;
Einbindung des gdb-Servers und flash-Tools in Eclipse.&lt;br /&gt;
== Beispiel-Projekte ==&lt;br /&gt;
=== Vorbereitungen ===&lt;br /&gt;
Bevor jetzt der erste Quelltext in den Editor gehackt wird, kann man sich das Leben etwas leichter machen. STMicroelectronics stellt für seine Microprozessoren Bibliotheken bereit, die einem eine ganze Menge Arbeit abnimmt.&lt;br /&gt;
&lt;br /&gt;
Die Rede ist von der &amp;quot;Standard Peripherals Library&amp;quot;, diese lässt sich auf der Seite von [http://www.st.com STMicroelectronics] herunter laden. Der Weg dorthin ist dank einer wunderschön gestalteten Homepage etwas steinig.&amp;lt;br /&amp;gt;&lt;br /&gt;
Auf der Hauptseite wählt man zuerst in der Rubrik &#039;&#039;&#039;Products&#039;&#039;&#039; die Kategorie &#039;&#039;&#039;Micros &amp;amp; Memories&#039;&#039;&#039; und danach &#039;&#039;&#039;Mikrocontrollers&#039;&#039;&#039;. Als nächstes wird auf die Registerkarte &#039;&#039;&#039;Resources&#039;&#039;&#039; gewechselt. Im Bereich &#039;&#039;&#039;Software Resources&#039;&#039;&#039; wird der Punkt &#039;&#039;&#039;Firmware&#039;&#039;&#039; ausgewählt. Es öffnet sich ein neues Browserfenster/-tab mit einer Liste von Dateien. Im oberen Bereich gibt es ein Suchfeld. Hier kann nach den &amp;quot;standard peripherals library&amp;quot; gesucht werden.&lt;br /&gt;
&lt;br /&gt;
Für das STM32F4-Discovery benötigen wir die Datei [http://www.st.com/internet/com/SOFTWARE_RESOURCES/SW_COMPONENT/FIRMWARE/stm32f4_dsp_stdperiph_lib.zip STM32F4 DSP and standard peripherals library]&lt;br /&gt;
&lt;br /&gt;
Die Datei kann an einen beliebigen Ort entpackt werden.&lt;br /&gt;
[[Kategorie:STM32]]&lt;/div&gt;</summary>
		<author><name>Avr-frickler</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=STM32F4-Discovery&amp;diff=63222</id>
		<title>STM32F4-Discovery</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=STM32F4-Discovery&amp;diff=63222"/>
		<updated>2012-01-09T20:11:01Z</updated>

		<summary type="html">&lt;p&gt;Avr-frickler: Kleine Änderungen im bisherigen Text und Erweiterung um den Abschnitt zur Standard Library&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieser Wiki-Artikel soll den Einstieg in die Prozessorfamilie STM32 von [http://www.st.com STMicroelectronics] erleichtern. Der Artikel begleitet dich von der Installation der benötigten Software bis hin zum flashen des Beispiels in den Prozessor.&amp;lt;br/&amp;gt;&lt;br /&gt;
Da es für Windows schon einiges im Internet zu finden gibt, wird die Installation der Toolchain für Linux beschrieben. Die verwendeten Tools sind allerdings als Quelltext oder als Windows-Installation verfügbar, somit lassen sich die meisten Schritte auch auf Windows-Betriebssystemen nachvollziehen.&lt;br /&gt;
== Hardware ==&lt;br /&gt;
Das in diesem Artikel verwendete Board [http://www.st.com/internet/evalboard/product/252419.jsp STM32F4-Discovery] lässt sich z.B. bei [http://www.watterott.com/de/STM32F4Discovery Watterott] bestellen.&lt;br /&gt;
Es lassen sich auch andere Boards verwenden, allerdings müssen die Beispiele dem Schaltplan entsprechend angepasst werden.&lt;br /&gt;
== Software ==&lt;br /&gt;
Um das Dateisystem möglicht sauber zu halten installiere ich hier sämtliche Software in das Unterverzeichnis /opt welches für solche Installationen vorgesehen ist. Damit auf dieses Verzeichnis schreibend zugegriffen werden darf sind root-Rechte erforderlich. Ich werde vor den Befehlen immer den Prompt schreiben damit zu erkennen ist welche Rechte notwendig sind.&lt;br /&gt;
&lt;br /&gt;
Es ist natürlich auch möglich alles in sein Heimat-Verzeichnis zu schreiben, hier kommt man dann grössten Teils ohne root-Rechte aus. Das muss aber jeder für sich selbst entscheiden wie er es mag.&lt;br /&gt;
&lt;br /&gt;
Nicht alle Linux-Distributionen sind gleich, ich arbeite hier mit einem (fast) frischem Lubuntu 11.10. Der grösste Teil sollte also mit Ubuntu und Debian-Systemen funktionieren. Für andere Distributionen kann man den entsprechenden Abschnitt editieren oder auf der [[Diskussion:STM32F4-Discovery]] zu diesem Artikel vermerken.&lt;br /&gt;
==== Sourcery CodeBench Lite Edition for ARM EABI ====&lt;br /&gt;
&amp;lt;p&amp;gt;[[Datei:Sup_processors.jpg|thumb|left]]&lt;br /&gt;
Als erstes benötigen wir die Toolchain mit Compiler &amp;amp; Linker. Hier verwenden wir die [http://www.mentor.com/embedded-software/sourcery-tools/sourcery-codebench/editions/lite-edition/ Sourcery Codebench von Mentor]. In der Auswahlbox &amp;quot;Supported Prozessors&amp;quot; wählt man in der Rubrik &amp;quot;ARM processors&amp;quot; den Punkt &amp;quot;Download the EABI Release &amp;gt;&amp;quot; aus.&lt;br /&gt;
&lt;br /&gt;
Leider muss man sich registrieren. Nach der Registrierung erhält man einen Link per E-Mail zur Downloadseite. Man wählt das &amp;quot;Recommended Release&amp;quot; aus und lädt dort die Datei &amp;quot;IA32 GNU/Linux TAR&amp;quot; herunter.&lt;br /&gt;
&lt;br /&gt;
[https://sourcery.mentor.com/sgpp/lite/arm/portal/package9740/public/arm-none-eabi/arm-2011.09-69-arm-none-eabi-i686-pc-linux-gnu.tar.bz2 Direktlink Linux] [https://sourcery.mentor.com/sgpp/lite/arm/portal/package9741/public/arm-none-eabi/arm-2011.09-69-arm-none-eabi-i686-mingw32.tar.bz2 Direktlink Windows]&lt;br /&gt;
&lt;br /&gt;
Die Datei muss einfach nur an einem beliebigem Ort entpackt werden und die Umgebungsvariable PATH erweitert werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux:/home/user/Downloads# mkdir /opt/CodeSourcery&lt;br /&gt;
root@linux:/home/user/Downloads# cd /opt/CodeSourcery&lt;br /&gt;
root@linux:/opt/CodeSourcery# tar xvf /home/user/Downloads/arm-2011.09-69-arm-none-eabi-i686-pc-linux-gnu.tar.bz2&lt;br /&gt;
root@linux:/opt/CodeSourcery# ls&lt;br /&gt;
arm-2011.09&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anpassen der Umgebungsvariable PATH nicht als root ausführen und testen der Umgebung.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# export wirkt nur temporär, Eintrag in /etc/environment erforderlich. (Bei Debian Systemen&lt;br /&gt;
user@linux:~$ export PATH=/opt/CodeSourcery/arm-2011.09/bin:$PATH&lt;br /&gt;
user@linux:~$ arm-none-eabi-gcc --version&lt;br /&gt;
arm-none-eabi-gcc (Sourcery CodeBench Lite 2011.09-69) 4.6.1&lt;br /&gt;
Copyright (C) 2011 Free Software Foundation, Inc.&lt;br /&gt;
This is free software; see the source for copying conditions.  There is NO&lt;br /&gt;
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer gerne mit der Konsole &amp;amp; vi/emacs arbeitet kann sofort zum Abschnitt stlink springen, für die Klickibunti-Fraktion folgt jetzt die Installation der IDE.&lt;br /&gt;
==== Eclipse IDE ====&lt;br /&gt;
Nach der Installation der Toolchain folgt jetzt die IDE hier habe ich mich für Eclipse entschieden. Zunächst sucht man sich auf [http://www.eclipse.org/downloads/ eclipse.org] aus einen der vielen Pakete das für sich passende raus. Das sinnvollste an dieser Stelle ist &amp;quot;Eclipse IDE for C/C++ Developers&amp;quot;. Wer aber vor hat die IDE nicht nur für C/C++ zu verwenden ist mit &amp;quot;Eclipse Classic&amp;quot; vielleicht besser bedient.&lt;br /&gt;
&lt;br /&gt;
Ich werde hier Eclipse Classic 3.7.1 verwenden und zeigen wie das CDT (C/C++ Development Tooling) installiert wird.&lt;br /&gt;
Um Eclipse zu &amp;quot;installieren&amp;quot; muss das Archiv nur an einem Ort seiner Wahl entpackt werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux:/home/user/Downloads# cd /opt&lt;br /&gt;
root@linux:/opt/CodeSourcery# tar xvf /home/user/Downloads/eclipse-SDK-3.7.1-linux-gtk.tar.gz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Die IDE lässt sich nun wie folgt starten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
user@linux:~$ /opt/eclipse/eclipse&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Wie ein Starter angelegt wird liest du am besten im Handbuch/Wiki zu deiner Distribution nach.&lt;br /&gt;
&lt;br /&gt;
Als nächstes folgt die Installation der benötigten Plugins. Der Abschnitt &amp;quot;CDT  (C/C++ Development Tooling)&amp;quot; kann übersprungen werden, wenn man das Eclipse-Paket &amp;quot;Eclipse IDE for C/C++ Developers&amp;quot; installiert hat.&lt;br /&gt;
===== CDT  (C/C++ Development Tooling) =====&lt;br /&gt;
Zum installieren des CDT wird zuerst die IDE gestartet. Im Hauptfenster wählt man dann den Menüpunkt &#039;&#039;&#039;Help &amp;gt; Install New Software...&#039;&#039;&#039; es erscheint ein neuer Dialog. Das Eingabefeld &#039;&#039;&#039;Work with:&#039;&#039;&#039; wird mit &#039;&#039;&#039;http://download.eclipse.org/tools/cdt/releases/indigo&#039;&#039;&#039; ausgefüllt und mit der &#039;&#039;&#039;Return-Taste&#039;&#039;&#039; abgeschickt.&lt;br /&gt;
&lt;br /&gt;
Im unteren Teil des Dialogs werden nun die verfügbaren Plugins aufgelistet, benötigt wird das Plugin &#039;&#039;&#039;C/C++ Development Tools&#039;&#039;&#039; aus der Rubrik &#039;&#039;&#039;CDT Main Features&#039;&#039;&#039;. Einfach ein Haken davor machen und auf &#039;&#039;&#039;Next&#039;&#039;&#039; klicken. Es erscheint eine Zusammenfassung und eine Seite weiter die Lizenz, die man sich durchlesen sollte und dann bestenfalls bestätigt. Mit einem klick auf &#039;&#039;&#039;Finish&#039;&#039;&#039; wird das Plugin heruntergeladen und installiert.&lt;br /&gt;
&lt;br /&gt;
Nach der Installation des Plugins sollte Eclipse neu gestartet werden. Auf der Willkommen-Seite ist nun ein Punkt C/C++ Development zusehen bzw. lässt sich im Menü per &#039;&#039;&#039;File &amp;gt; New &amp;gt; Project...&#039;&#039;&#039; ein C oder C++ Projekt anlegen.&lt;br /&gt;
===== GNU ARM Eclipse Plug-in =====&lt;br /&gt;
Mit der jetzigen Installation ist es bereits möglich einfache C/C++ Projekte zu erstellen und Makefiles zu importieren. Jetzt fehlt noch das Bindeglied zwischen der Toolchain und Eclipse. Dazu gibt es das [http://sourceforge.net/projects/gnuarmeclipse/ GNU ARM Eclipse Plug-in]. Mit dem Plugin kann man nun die Konfiguration des Compilers und Linkers in Eclipse erledigen was sonst in einem Makefile geschieht.&lt;br /&gt;
&lt;br /&gt;
Die Installation des Plugins funktioniert genauso wie die Installation des CDT, nur mit anderer Quelle. Hier die Kurzfassung:&lt;br /&gt;
# &#039;&#039;&#039;Help &amp;gt; Install New Software...&#039;&#039;&#039;&lt;br /&gt;
# &#039;&#039;&#039;Work with:&#039;&#039;&#039; mit http://gnuarmeclipse.sourceforge.net/updates ausfüllen und mit &#039;&#039;&#039;Return-Taste&#039;&#039;&#039; bestätigen.&lt;br /&gt;
# Einen Haken vor CDT GNU Cross Development Tools machen und &#039;&#039;&#039;Next&#039;&#039;&#039; drücken.&lt;br /&gt;
# Es erscheint eine Zusammenfassung mit &#039;&#039;&#039;Next&#039;&#039;&#039; zu nächsten Seite.&lt;br /&gt;
# Lizenzvereinbarung lesen und akzeptieren Installation mit klick auf &#039;&#039;&#039;Finish&#039;&#039;&#039; starten.&lt;br /&gt;
# Es erscheint noch eine Warnung, dass die Dateien nicht signiert sind. Diesen bitte mit &#039;&#039;&#039;OK&#039;&#039;&#039; bestätigen.&lt;br /&gt;
#  Eclipse neu starten.&lt;br /&gt;
&lt;br /&gt;
Beim erstellen eines neuen C oder C++ Projekts kann nun die Toolchain ARM Linux GCC (Sourcery G++ Lite) gewählt werden.&lt;br /&gt;
Bevor mit den Beispielen begonnen werden kann muss noch die Frage geklärt werden wie die Daten auf den Chip kommen.&lt;br /&gt;
==== stlink ====&lt;br /&gt;
Das Entwicklungsboard STM32F4-Discovery von ST kann über USB per STLinkV2 Programmiert werden. Für Linux gibt es da den [https://github.com/texane/stlink &amp;quot;stm32 discovery line linux programmer&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
Die Tools liegen als Quelltext vor und müssen zuerst kompiliert werden. Dann mal los! Solltest du mit deinem Linux noch nie ein Programm kompiliert haben siehe am besten erst in dem Handbuch/Wiki zu deiner Distribution nach was du benötigst (Ubuntu benötigt z.B. die Pakete build-essential und git).&lt;br /&gt;
&lt;br /&gt;
Als erstes die Quelltexte laden&lt;br /&gt;
&amp;lt;pre&amp;gt;user@linux:~/src$ git clone git://github.com/texane/stlink.git&amp;lt;/pre&amp;gt;&lt;br /&gt;
Um die Tools nun kompilieren zu können werden noch die Quelltexte der libusb 1.0 benötigt. Bei einem Ubuntu-System ist dies das Paket libusb-1.0.0-dev (Lubuntu 11.10).&amp;lt;br /&amp;gt;&lt;br /&gt;
Jetzt kann der Quelltext kompiliert werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
user@linux:~/src$ cd stlink&lt;br /&gt;
user@linux:~/src/stlink$ make&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Wenn das ganze Fehlerfrei durch gelaufen ist kann man den ganzen Ordner oder alternativ auch nur ./flash/flash und ./gdbserver/st-util kopieren und per Umgebungsvariable PATH verfügbar machen.&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Achtung&#039;&#039;&#039;: &amp;lt;u&amp;gt;Im folgendem Block benenne ich flash in st-flash um, weil ich flash nicht besonders passend finde wenn man es per Umgebungsvariable verfügbar macht.&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux:~# mkdir /opt/stlink&lt;br /&gt;
root@linux:~# cd /opt/stlink&lt;br /&gt;
root@linux:/opt/stlink# cp /home/user/src/stlink/flash/flash ./st-flash&lt;br /&gt;
root@linux:/opt/stlink# cp /home/user/src/stlink/gdbserver/st-util .&lt;br /&gt;
# export wirkt nur temporär, Eintrag in /etc/environment erforderlich. (Bei Debian Systemen&lt;br /&gt;
user@linux:~$ export PATH=/opt/stlink:$PATH&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nun brauchen die beiden Tools noch Schreibrechte für das USB-Gerät.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux:~# cp /home/user/src/stlink/49-stlinkv*.rules /etc/udev/rules.d&lt;br /&gt;
root@linux:~# udevadm control --reload-rules&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Wird nun das STM32F4-Discovery an den PC gesteckt wird ein neues Device erzeugt, bei mir war das &#039;&#039;&#039;/dev/stlinkv2_2&#039;&#039;&#039;.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Für Boards mit STLink v1 solltest du dir einmal die README zu stlink durchlesen.&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollte das soweit alles geklappt haben, ist das jetzt der perfekte Zeitpunkt um ein Backup der Firmware zu machen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
user@linux:~$ st-flash read ~/STM32F4-Discovery.bin 0x00 0x100000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==== TODO ====&lt;br /&gt;
Einbindung des gdb-Servers und flash-Tools in Eclipse.&lt;br /&gt;
== Beispiel-Projekte ==&lt;br /&gt;
=== Vorbereitungen ===&lt;br /&gt;
Bevor jetzt der erste Quelltext in den Editor gehackt wird, kann man sich das Leben etwas leichter machen. STMicroelectronics stellt für seine Microprozessoren Bibliotheken bereit, die einem eine ganze Menge Arbeit abnimmt.&lt;br /&gt;
&lt;br /&gt;
Die Rede ist von der &amp;quot;Standard Peripherals Library&amp;quot;, diese lässt sich auf der Seite von [http://www.st.com STMicroelectronics] herunter laden. Der Weg dorthin ist dank einer wunderschön gestalteten Homepage etwas steinig.&amp;lt;br /&amp;gt;&lt;br /&gt;
Auf der Hauptseite wählt man zuerst in der Rubrik &#039;&#039;&#039;Products&#039;&#039;&#039; die Kategorie &#039;&#039;&#039;Micros &amp;amp; Memories&#039;&#039;&#039; und danach &#039;&#039;&#039;Mikrocontrollers&#039;&#039;&#039;. Als nächstes wird auf die Registerkarte &#039;&#039;&#039;Resources&#039;&#039;&#039; gewechselt. Im Bereich &#039;&#039;&#039;Software Resources&#039;&#039;&#039; wird der Punkt &#039;&#039;&#039;Firmware&#039;&#039;&#039; ausgewählt. Es öffnet sich ein neues Browserfenster/-tab mit einer Liste von Dateien. Im oberen Bereich gibt es ein Suchfeld. Hier kann nach den &amp;quot;standard peripherals library&amp;quot; gesucht werden.&lt;br /&gt;
&lt;br /&gt;
Für das STM32F4-Discovery benötigen wir die Datei [http://www.st.com/internet/com/SOFTWARE_RESOURCES/SW_COMPONENT/FIRMWARE/stm32f4_dsp_stdperiph_lib.zip STM32F4 DSP and standard peripherals library]&lt;br /&gt;
&lt;br /&gt;
Die Datei kann an einen beliebigen Ort entpackt werden.&lt;br /&gt;
[[Kategorie:STM32]]&lt;/div&gt;</summary>
		<author><name>Avr-frickler</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Diskussion:STM32F4-Discovery&amp;diff=63220</id>
		<title>Diskussion:STM32F4-Discovery</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Diskussion:STM32F4-Discovery&amp;diff=63220"/>
		<updated>2012-01-09T17:30:48Z</updated>

		<summary type="html">&lt;p&gt;Avr-frickler: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Da es bereits eine allgemeine STM32 Seite gibt (http://www.mikrocontroller.net/articles/STM32), würde ich hier spezielle Informationen zum STM32F4, nach dem Titel sogar spezielle Informationen zu dem Board erwarten. &lt;br /&gt;
So aber lese ich vieles, sicher nützliches, was eigentlich auf die allgemeine Seite gehört.&lt;br /&gt;
Ich schlage vor, die Informationen die allgemein für die STM32 Reihe gelten von dieser Seite auf die allgemeine Seite zu verlagern.&lt;br /&gt;
&lt;br /&gt;
Wie ich gerade sehe, gibt es sogar schon eine spezielle Seite zur Eclipse-Installation unter http://www.mikrocontroller.net/articles/STM32_Eclipse_Installation.&lt;br /&gt;
&lt;br /&gt;
Ich meine, das es für die Übersichtlichkeit und die Benutzbarkeit nützlich wäre, keine redundanten Seiten zu erstellen.&lt;br /&gt;
----&lt;br /&gt;
Ja ich geb zu der Name ist irre führend.&lt;br /&gt;
&lt;br /&gt;
Der [[STM32_Eclipse_Installation]] bezieht sich hauptsächlich auf Windows, gerade die verwendete Toolchain YAGARTO gibt es so nicht für Linux, zumindest habe ich auf der Seite nichts dazu gefunden. Die Sachen die dort zu Linux (stlink) sind überhaupt nicht zu gebrauchen da z.B. das git-repos nicht mehr existiert.&lt;br /&gt;
&lt;br /&gt;
Es macht aber sicher Sinn das ganz zu bündeln, wenn ich hier soweit bin das ich alles zusammen habe werde ich mal schauen wie man dies am besten zusammen bekommt.&lt;br /&gt;
&lt;br /&gt;
Die Idee zum Artikel entstammt einem [http://www.mikrocontroller.net/topic/241982 Thread] auf diesem Board.&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;&#039;BITTE&#039;&#039;&#039; mach weiter! Der erwähnte Artikel ([[STM32_Eclipse_Installation]]) ist sowas von unübersichtlich und viel zu lang, dass das einzig sinnvolle eigentlich nur das Löschen wäre. Dieser Artikel ist dagegen sauber aufgebaut. Ich HOFFE es geht weiter, denn an genau am aktuellen Punkt, der Einbindung von stlink und gdb in Eclipse, komme ich nicht weiter.&lt;br /&gt;
&lt;br /&gt;
Wenn dieser Artikel fertig ist, kann man ja noch überlegen den anderen Artikel aufzuräumen/zu ersetzen.&lt;br /&gt;
----&lt;br /&gt;
Klar mache ich weiter, allerdings brauche ich erst einmal ein funktionierendes Beispiel zum kompilieren ;-) um auch GDB ordentlich testen zu können, habe bisher noch nichts mit GDB gemacht. Aber das wird schon werden.&lt;br /&gt;
----&lt;br /&gt;
Dann überarbeite doch die Seite ([[STM32_Eclipse_Installation]]).&lt;br /&gt;
In Bezug auf die Seiten ([[STM32F4-Discovery]]) und ([[STM32]]) hast Du mich auch nicht überzeugt. Warum zwei Seiten nebeneinander die dann am Ende evtl. ineinander überführt werden sollen?&lt;br /&gt;
Na gut. War eine Anregung. Deine Entscheidung wie Du es machst.&lt;br /&gt;
Und sicher bin ich auch dafür das Du weitermachst. Es ging nur um das &amp;quot;wie&amp;quot; und nicht um das &amp;quot;ob&amp;quot;. Viel Erfolg.&lt;br /&gt;
----&lt;br /&gt;
Kannst Du die Links die die Installation einer Entwicklungsumgebung unter Windows hilfreich sind bitte auch aufnehmen. Du dürftest da ja einiges gefunden haben. Danke!&lt;br /&gt;
&lt;br /&gt;
== Beispiel für das Discovery ==&lt;br /&gt;
&lt;br /&gt;
http://www.chibios.org/dokuwiki/doku.php?id=chibios:articles:stm32f4_discovery&lt;br /&gt;
Den Code gibts über deren SVN. Das Os müsst ihr jan nicht benutzen. Ich kann aber bestätigen das der Code läuft und einwand frei unter Eclipse compiliert.&lt;br /&gt;
----&lt;br /&gt;
Hi Danke für den Link sehr hilfreich. Wenn ich die Demo aber richtig verstehe ist das eine Demo für das OS was der Autor da bereitstellt. Bei den Bibliotheken von ST sind Besipiele bei, hier werde ich erst einmal versuchen das hinzu bekommen. Ich werde im Artikel mal beschreiben wie ich so ein Projekt anlege und ich hoffe bei Problemen hier oder im Forum Hilfe zu bekommen ;)&lt;br /&gt;
&lt;br /&gt;
Für Windows sollte die Installation gleich sein, das einzigste was du wohl nicht bekommen wirst ist stlink. Im Link unter &amp;quot;Beispiel für Discovery&amp;quot; hier auf dieser Seite gibt es aber wohl eine Möglichkeit.&lt;/div&gt;</summary>
		<author><name>Avr-frickler</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Diskussion:STM32F4-Discovery&amp;diff=63201</id>
		<title>Diskussion:STM32F4-Discovery</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Diskussion:STM32F4-Discovery&amp;diff=63201"/>
		<updated>2012-01-08T16:56:13Z</updated>

		<summary type="html">&lt;p&gt;Avr-frickler: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Da es bereits eine allgemeine STM32 Seite gibt (http://www.mikrocontroller.net/articles/STM32), würde ich hier spezielle Informationen zum STM32F4, nach dem Titel sogar spezielle Informationen zu dem Board erwarten. &lt;br /&gt;
So aber lese ich vieles, sicher nützliches, was eigentlich auf die allgemeine Seite gehört.&lt;br /&gt;
Ich schlage vor, die Informationen die allgemein für die STM32 Reihe gelten von dieser Seite auf die allgemeine Seite zu verlagern.&lt;br /&gt;
&lt;br /&gt;
Wie ich gerade sehe, gibt es sogar schon eine spezielle Seite zur Eclipse-Installation unter http://www.mikrocontroller.net/articles/STM32_Eclipse_Installation.&lt;br /&gt;
&lt;br /&gt;
Ich meine, das es für die Übersichtlichkeit und die Benutzbarkeit nützlich wäre, keine redundanten Seiten zu erstellen.&lt;br /&gt;
----&lt;br /&gt;
Ja ich geb zu der Name ist irre führend.&lt;br /&gt;
&lt;br /&gt;
Der [[STM32_Eclipse_Installation]] bezieht sich hauptsächlich auf Windows, gerade die verwendete Toolchain YAGARTO gibt es so nicht für Linux, zumindest habe ich auf der Seite nichts dazu gefunden. Die Sachen die dort zu Linux (stlink) sind überhaupt nicht zu gebrauchen da z.B. das git-repos nicht mehr existiert.&lt;br /&gt;
&lt;br /&gt;
Es macht aber sicher Sinn das ganz zu bündeln, wenn ich hier soweit bin das ich alles zusammen habe werde ich mal schauen wie man dies am besten zusammen bekommt.&lt;br /&gt;
&lt;br /&gt;
Die Idee zum Artikel entstammt einem [http://www.mikrocontroller.net/topic/241982 Thread] auf diesem Board.&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;&#039;BITTE&#039;&#039;&#039; mach weiter! Der erwähnte Artikel ([[STM32_Eclipse_Installation]]) ist sowas von unübersichtlich und viel zu lang, dass das einzig sinnvolle eigentlich nur das Löschen wäre. Dieser Artikel ist dagegen sauber aufgebaut. Ich HOFFE es geht weiter, denn an genau am aktuellen Punkt, der Einbindung von stlink und gdb in Eclipse, komme ich nicht weiter.&lt;br /&gt;
&lt;br /&gt;
Wenn dieser Artikel fertig ist, kann man ja noch überlegen den anderen Artikel aufzuräumen/zu ersetzen.&lt;br /&gt;
----&lt;br /&gt;
Klar mache ich weiter, allerdings brauche ich erst einmal ein funktionierendes Beispiel zum kompilieren ;-) um auch GDB ordentlich testen zu können, habe bisher noch nichts mit GDB gemacht. Aber das wird schon werden.&lt;/div&gt;</summary>
		<author><name>Avr-frickler</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Diskussion:STM32F4-Discovery&amp;diff=63200</id>
		<title>Diskussion:STM32F4-Discovery</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Diskussion:STM32F4-Discovery&amp;diff=63200"/>
		<updated>2012-01-08T16:46:32Z</updated>

		<summary type="html">&lt;p&gt;Avr-frickler: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Da es bereits eine allgemeine STM32 Seite gibt (http://www.mikrocontroller.net/articles/STM32), würde ich hier spezielle Informationen zum STM32F4, nach dem Titel sogar spezielle Informationen zu dem Board erwarten. &lt;br /&gt;
So aber lese ich vieles, sicher nützliches, was eigentlich auf die allgemeine Seite gehört.&lt;br /&gt;
Ich schlage vor, die Informationen die allgemein für die STM32 Reihe gelten von dieser Seite auf die allgemeine Seite zu verlagern.&lt;br /&gt;
&lt;br /&gt;
Wie ich gerade sehe, gibt es sogar schon eine spezielle Seite zur Eclipse-Installation unter http://www.mikrocontroller.net/articles/STM32_Eclipse_Installation.&lt;br /&gt;
&lt;br /&gt;
Ich meine, das es für die Übersichtlichkeit und die Benutzbarkeit nützlich wäre, keine redundanten Seiten zu erstellen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;BITTE&#039;&#039;&#039; mach weiter! Der erwähnte Artikel ([[STM32_Eclipse_Installation]]) ist sowas von unübersichtlich und viel zu lang, dass das einzig sinnvolle eigentlich nur das Löschen wäre. Dieser Artikel ist dagegen sauber aufgebaut. Ich HOFFE es geht weiter, denn an genau am aktuellen Punkt, der Einbindung von stlink und gdb in Eclipse, komme ich nicht weiter.&lt;br /&gt;
&lt;br /&gt;
Wenn dieser Artikel fertig ist, kann man ja noch überlegen den anderen Artikel aufzuräumen/zu ersetzen.&lt;br /&gt;
&lt;br /&gt;
Ja ich geb zu der Name ist irre führend.&lt;br /&gt;
&lt;br /&gt;
Der [[STM32_Eclipse_Installation]] bezieht sich hauptsächlich auf Windows, gerade die verwendete Toolchain YAGARTO gibt es so nicht für Linux, zumindest habe ich auf der Seite nichts dazu gefunden. Die Sachen die dort zu Linux (stlink) sind überhaupt nicht zu gebrauchen da z.B. das git-repos nicht mehr existiert.&lt;br /&gt;
&lt;br /&gt;
Es macht aber sicher Sinn das ganz zu bündeln, wenn ich hier soweit bin das ich alles zusammen habe werde ich mal schauen wie man dies am besten zusammen bekommt.&lt;br /&gt;
&lt;br /&gt;
Die Idee zum Artikel entstammt einem [http://www.mikrocontroller.net/topic/241982 Thread] auf diesem Board.&lt;/div&gt;</summary>
		<author><name>Avr-frickler</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=STM32F4-Discovery&amp;diff=63191</id>
		<title>STM32F4-Discovery</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=STM32F4-Discovery&amp;diff=63191"/>
		<updated>2012-01-08T13:54:19Z</updated>

		<summary type="html">&lt;p&gt;Avr-frickler: Abschnitt stlink hinzugefügt und Gliederung erweitert.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieser Wiki-Artikel soll den Einstieg in die Prozessorfamilie STM32 von [http://www.st.com STMicroelectronics] erleichtern. Der Artikel begleitet dich von der Installation der benötigten Software bis hin zum flashen des Beispiels in den Prozessor.&amp;lt;br/&amp;gt;&lt;br /&gt;
Da es für Windows schon einiges im Internet zu finden gibt, wird die Installation der Toolchain für Linux beschrieben. Die verwendeten Tools sind allerdings als Quelltext oder als Windows-Installation verfügbar, somit lassen sich die meisten Schritte auch auf Windows-Betriebssystemen nachvollziehen.&lt;br /&gt;
== Hardware ==&lt;br /&gt;
Das in diesem Artikel verwendete Board [http://www.st.com/internet/evalboard/product/252419.jsp STM32F4-Discovery] lässt sich z.B. bei [http://www.watterott.com/de/STM32F4Discovery Watterott] bestellen.&lt;br /&gt;
Es lassen sich auch andere Boards verwenden, allerdings müssen die Beispiele dem Schaltplan entsprechend angepasst werden.&lt;br /&gt;
== Software ==&lt;br /&gt;
Um das Dateisystem möglicht sauber zu halten installiere ich hier sämtliche Software in das Unterverzeichnis /opt welches für solche Installationen vorgesehen ist. Damit auf dieses Verzeichnis schreibend zugegriffen werden darf sind root-Rechte erforderlich. Ich werde vor den Befehlen immer den Prompt schreiben damit zu erkennen ist welche Rechte notwendig sind.&lt;br /&gt;
&lt;br /&gt;
Es ist natürlich auch möglich alles in sein Heimat-Verzeichnis zu schreiben, hier kommt man dann grössten Teils ohne root-Rechte aus. Das muss aber jeder für sich selbst entscheiden wie er es mag.&lt;br /&gt;
&lt;br /&gt;
Nicht alle Linux-Distributionen sind gleich, ich arbeite hier mit einem (fast) frischem Lubuntu 11.10. Der grösste Teil sollte also mit Ubuntu und Debian-Systemen funktionieren. Für andere Distributionen kann man den entsprechenden Abschnitt editieren oder auf der [[Diskussion:STM32F4-Discovery]] zu diesem Artikel vermerken.&lt;br /&gt;
==== Sourcery CodeBench Lite Edition for ARM EABI ====&lt;br /&gt;
&amp;lt;p&amp;gt;[[Datei:Sup_processors.jpg|thumb|left]]&lt;br /&gt;
Als erstes benötigen wir die Toolchain mit Compiler &amp;amp; Linker. Hier verwenden wir die [http://www.mentor.com/embedded-software/sourcery-tools/sourcery-codebench/editions/lite-edition/ Sourcery Codebench von Mentor]. In der Auswahlbox &amp;quot;Supported Prozessors&amp;quot; wählt man in der Rubrik &amp;quot;ARM processors&amp;quot; den Punkt &amp;quot;Download the EABI Release &amp;gt;&amp;quot; aus.&lt;br /&gt;
&lt;br /&gt;
Leider muss man sich registrieren. Nach der Registrierung erhält man einen Link per E-Mail zur Downloadseite. Man wählt das &amp;quot;Recommended Release&amp;quot; aus und lädt dort die Datei &amp;quot;IA32 GNU/Linux TAR&amp;quot; herunter.&lt;br /&gt;
&lt;br /&gt;
[https://sourcery.mentor.com/sgpp/lite/arm/portal/package9740/public/arm-none-eabi/arm-2011.09-69-arm-none-eabi-i686-pc-linux-gnu.tar.bz2 Direktlink]&lt;br /&gt;
&lt;br /&gt;
Die Datei muss einfach nur an einem beliebigem Ort entpackt werden und die Umgebungsvariable PATH erweitert werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux:/home/user/Downloads# mkdir /opt/CodeSourcery&lt;br /&gt;
root@linux:/home/user/Downloads# cd /opt/CodeSourcery&lt;br /&gt;
root@linux:/opt/CodeSourcery# tar xvf /home/user/Downloads/arm-2011.09-69-arm-none-eabi-i686-pc-linux-gnu.tar.bz2&lt;br /&gt;
root@linux:/opt/CodeSourcery# ls&lt;br /&gt;
arm-2011.09&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anpassen der Umgebungsvariable PATH nicht als root ausführen und testen der Umgebung.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
user@linux:~$ export PATH=/opt/CodeSourcery/arm-2011.09/bin:$PATH&lt;br /&gt;
user@linux:~$ arm-none-eabi-gcc --version&lt;br /&gt;
arm-none-eabi-gcc (Sourcery CodeBench Lite 2011.09-69) 4.6.1&lt;br /&gt;
Copyright (C) 2011 Free Software Foundation, Inc.&lt;br /&gt;
This is free software; see the source for copying conditions.  There is NO&lt;br /&gt;
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer gerne mit der Konsole &amp;amp; vi/emacs arbeitet kann sofort zum Abschnitt stlink springen, für die Klickibunti-Fraktion folgt jetzt die Installation der IDE.&lt;br /&gt;
==== Eclipse IDE ====&lt;br /&gt;
Nach der Installation der Toolchain folgt jetzt die IDE hier habe ich mich für Eclipse entschieden. Zunächst sucht man sich auf [[http://www.eclipse.org/downloads/ eclipse.org]] aus einen der vielen Pakete das für sich passende raus. Das sinnvollste an dieser Stelle ist &amp;quot;Eclipse IDE for C/C++ Developers&amp;quot;. Wer aber vor hat die IDE nicht nur für C/C++ zu verwenden ist mit &amp;quot;Eclipse Classic&amp;quot; vielleicht besser bedient.&lt;br /&gt;
&lt;br /&gt;
Ich werde hier Eclipse Classic 3.7.1 verwenden und zeigen wie das CDT (C/C++ Development Tooling) installiert wird.&lt;br /&gt;
Um Eclipse zu &amp;quot;installieren&amp;quot; muss das Archiv nur an einem Ort seiner Wahl entpackt werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux:/home/user/Downloads# cd /opt&lt;br /&gt;
root@linux:/opt/CodeSourcery# tar xvf /home/user/Downloads/eclipse-SDK-3.7.1-linux-gtk.tar.gz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Die IDE lässt sich nun wie folgt starten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
user@linux:~$ /opt/eclipse/eclipse&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Wie ein Starter angelegt wird liest du am besten im Handbuch/Wiki zu deiner Distribution nach.&lt;br /&gt;
&lt;br /&gt;
Als nächstes folgt die Installation der benötigten Plugins. Der Abschnitt &amp;quot;CDT  (C/C++ Development Tooling)&amp;quot; kann übersprungen werden, wenn man das Eclipse-Paket &amp;quot;Eclipse IDE for C/C++ Developers&amp;quot; installiert hat.&lt;br /&gt;
===== CDT  (C/C++ Development Tooling) =====&lt;br /&gt;
Zum installieren des CDT wird zuerst die IDE gestartet. Im Hauptfenster wählt man dann den Menüpunkt &#039;&#039;&#039;Help &amp;gt; Install New Software...&#039;&#039;&#039; es erscheint ein neuer Dialog. Das Eingabefeld &#039;&#039;&#039;Work with:&#039;&#039;&#039; wird mit &#039;&#039;&#039;http://download.eclipse.org/tools/cdt/releases/indigo&#039;&#039;&#039; ausgefüllt und mit der &#039;&#039;&#039;Return-Taste&#039;&#039;&#039; abgeschickt.&lt;br /&gt;
&lt;br /&gt;
Im unteren Teil des Dialogs werden nun die verfügbaren Plugins aufgelistet, benötigt wird das Plugin &#039;&#039;&#039;C/C++ Development Tools&#039;&#039;&#039; aus der Rubrik &#039;&#039;&#039;CDT Main Features&#039;&#039;&#039;. Einfach ein Haken davor machen und auf &#039;&#039;&#039;Next&#039;&#039;&#039; klicken. Es erscheint eine Zusammenfassung und eine Seite weiter die Lizenz, die man sich durchlesen sollte und dann bestenfalls bestätigt. Mit einem klick auf &#039;&#039;&#039;Finish&#039;&#039;&#039; wird das Plugin heruntergeladen und installiert.&lt;br /&gt;
&lt;br /&gt;
Nach der Installation des Plugins sollte Eclipse neu gestartet werden. Auf der Willkommen-Seite ist nun ein Punkt C/C++ Development zusehen bzw. lässt sich im Menü per &#039;&#039;&#039;File &amp;gt; New &amp;gt; Project...&#039;&#039;&#039; ein C oder C++ Projekt anlegen.&lt;br /&gt;
===== GNU ARM Eclipse Plug-in =====&lt;br /&gt;
Mit der jetzigen Installation ist es bereits möglich einfache C/C++ Projekte zu erstellen und Makefiles zu importieren. Jetzt fehlt noch das Bindeglied zwischen der Toolchain und Eclipse. Dazu gibt es das [http://sourceforge.net/projects/gnuarmeclipse/ GNU ARM Eclipse Plug-in]. Mit dem Plugin kann man nun die Konfiguration des Compilers und Linkers in Eclipse erledigen was sonst in einem Makefile geschieht.&lt;br /&gt;
&lt;br /&gt;
Die Installation des Plugins funktioniert genauso wie die Installation des CDT, nur mit anderer Quelle. Hier die Kurzfassung:&lt;br /&gt;
# &#039;&#039;&#039;Help &amp;gt; Install New Software...&#039;&#039;&#039;&lt;br /&gt;
# &#039;&#039;&#039;Work with:&#039;&#039;&#039; mit http://gnuarmeclipse.sourceforge.net/updates ausfüllen und mit &#039;&#039;&#039;Return-Taste&#039;&#039;&#039; bestätigen.&lt;br /&gt;
# Einen Haken vor CDT GNU Cross Development Tools machen und &#039;&#039;&#039;Next&#039;&#039;&#039; drücken.&lt;br /&gt;
# Es erscheint eine Zusammenfassung mit &#039;&#039;&#039;Next&#039;&#039;&#039; zu nächsten Seite.&lt;br /&gt;
# Lizenzvereinbarung lesen und akzeptieren Installation mit klick auf &#039;&#039;&#039;Finish&#039;&#039;&#039; starten.&lt;br /&gt;
# Es erscheint noch eine Warnung, dass die Dateien nicht signiert sind. Diesen bitte mit &#039;&#039;&#039;OK&#039;&#039;&#039; bestätigen.&lt;br /&gt;
#  Eclipse neu starten.&lt;br /&gt;
&lt;br /&gt;
Beim erstellen eines neuen C oder C++ Projekts kann nun die Toolchain ARM Linux GCC (Sourcery G++ Lite) gewählt werden.&lt;br /&gt;
Bevor mit den Beispielen begonnen werden kann muss noch die Frage geklärt werden wie die Daten auf den Chip kommen.&lt;br /&gt;
==== stlink ====&lt;br /&gt;
Das Entwicklungsboard STM32F4-Discovery von ST kann über USB per STLinkV2 Programmiert werden. Für Linux gibt es da den [https://github.com/texane/stlink &amp;quot;stm32 discovery line linux programmer&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
Die Tools liegen als Quelltext vor und müssen zuerst kompiliert werden. Dann mal los! Solltest du mit deinem Linux noch nie ein Programm kompiliert haben siehe am besten erst in dem Handbuch/Wiki zu deiner Distribution nach was du benötigst (Ubuntu benötigt z.B. die Pakete build-essential und git).&lt;br /&gt;
&lt;br /&gt;
Als erstes die Quelltexte laden&lt;br /&gt;
&amp;lt;pre&amp;gt;user@linux:~/src$ git clone git://github.com/texane/stlink.git&amp;lt;/pre&amp;gt;&lt;br /&gt;
Um die Tools nun kompilieren zu können werden noch die Quelltexte der libusb 1.0 benötigt. Bei einem Ubuntu-System ist dies das Paket libusb-1.0.0-dev (Lubuntu 11.10).&amp;lt;br /&amp;gt;&lt;br /&gt;
Jetzt kann der Quelltext kompiliert werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
user@linux:~/src$ cd stlink&lt;br /&gt;
user@linux:~/src/stlink$ make&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Wenn das ganze Fehlerfrei durch gelaufen ist kann man den ganzen Ordner oder alternativ auch nur ./flash/flash und ./gdbserver/st-util kopieren und per Umgebungsvariable PATH verfügbar machen.&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Achtung&#039;&#039;&#039;: &amp;lt;u&amp;gt;Im folgendem Block benenne ich flash in st-flash um, weil ich flash nicht besonders passend finde wenn man es per Umgebungsvariable verfügbar macht.&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux:~# mkdir /opt/stlink&lt;br /&gt;
root@linux:~# cd /opt/stlink&lt;br /&gt;
root@linux:/opt/stlink# cp /home/user/src/stlink/flash/flash ./st-flash&lt;br /&gt;
root@linux:/opt/stlink# cp /home/user/src/stlink/gdbserver/st-util .&lt;br /&gt;
user@linux:~$ export PATH=/opt/stlink:$PATH&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nun brauchen die beiden Tools noch Schreibrechte für das USB-Gerät.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux:~# cp /home/user/src/stlink/49-stlinkv*.rules /etc/udev/rules.d&lt;br /&gt;
root@linux:~# udevadm control --reload-rules&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Steckt ihr nun das STM32F4-Discovery an euren PC erhaltet ihr ein neues Device, bei mir war das &#039;&#039;&#039;/dev/stlinkv2_2&#039;&#039;&#039;.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Für Boards mit STLink v1 sollte man sich einmal die README zu stlink durchlesen.&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollte das soweit alles geklappt haben, ist das jetzt der perfekte Zeitpunkt um ein Backup der Firmware zu machen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
user@linux:~$ st-flash read ~/STM32F4-Discovery.bin 0x00 0x100000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==== TODO ====&lt;br /&gt;
Einbindung des gdb-Servers und flash-Tools in Eclipse.&lt;br /&gt;
== Beispiel-Projekte ==&lt;br /&gt;
=== Vorbereitungen ===&lt;br /&gt;
==== StdPeriph-Library ====&lt;br /&gt;
[[Kategorie:STM32]]&lt;/div&gt;</summary>
		<author><name>Avr-frickler</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=STM32F4-Discovery&amp;diff=63186</id>
		<title>STM32F4-Discovery</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=STM32F4-Discovery&amp;diff=63186"/>
		<updated>2012-01-08T11:05:34Z</updated>

		<summary type="html">&lt;p&gt;Avr-frickler: Abschnitt über Eclipse IDE hinzugefügt.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieser Wiki-Artikel soll den Einstieg in die Prozessorfamilie STM32 von [http://www.st.com STMicroelectronics] erleichtern. Der Artikel begleitet dich von der Installation der benötigten Software bis hin zum flashen des Beispiels in den Prozessor.&amp;lt;br/&amp;gt;&lt;br /&gt;
Da es für Windows schon einiges im Internet zu finden gibt, wird die Installation der Toolchain für Linux beschrieben. Die verwendeten Tools sind allerdings als Quelltext oder als Windows-Installation verfügbar, somit lassen sich die meisten Schritte auch auf Windows-Betriebssystemen nachvollziehen.&lt;br /&gt;
== Hardware ==&lt;br /&gt;
Das in diesem Artikel verwendete Board [http://www.st.com/internet/evalboard/product/252419.jsp STM32F4-Discovery] lässt sich z.B. bei [http://www.watterott.com/de/STM32F4Discovery Watterott] bestellen.&lt;br /&gt;
Es lassen sich auch andere Boards verwenden, allerdings müssen die Beispiele dem Schaltplan entsprechend angepasst werden.&lt;br /&gt;
== Software ==&lt;br /&gt;
==== Sourcery CodeBench Lite Edition for ARM EABI ====&lt;br /&gt;
&amp;lt;p&amp;gt;[[Datei:Sup_processors.jpg|thumb|left]]&lt;br /&gt;
Als erstes benötigen wir die Toolchain mit Compiler &amp;amp; Linker. Hier verwenden wir die [http://www.mentor.com/embedded-software/sourcery-tools/sourcery-codebench/editions/lite-edition/ Sourcery Codebench von Mentor]. In der Auswahlbox &amp;quot;Supported Prozessors&amp;quot; wählt man in der Rubrik &amp;quot;ARM processors&amp;quot; den Punkt &amp;quot;Download the EABI Release &amp;gt;&amp;quot; aus.&lt;br /&gt;
&lt;br /&gt;
Leider muss man sich registrieren. Nach der Registrierung erhält man einen Link per E-Mail zur Downloadseite. Man wählt das &amp;quot;Recommended Release&amp;quot; aus und lädt dort die Datei &amp;quot;IA32 GNU/Linux TAR&amp;quot; herunter.&lt;br /&gt;
&lt;br /&gt;
[https://sourcery.mentor.com/sgpp/lite/arm/portal/package9740/public/arm-none-eabi/arm-2011.09-69-arm-none-eabi-i686-pc-linux-gnu.tar.bz2 Direktlink]&lt;br /&gt;
&lt;br /&gt;
Die Datei muss einfach nur an einem beliebigem Ort entpackt werden und die Umgebungsvariable PATH erweitert werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux:/home/user/Downloads# mkdir /opt/CodeSourcery&lt;br /&gt;
root@linux:/home/user/Downloads# cd /opt/CodeSourcery&lt;br /&gt;
root@linux:/opt/CodeSourcery# tar xvf /home/user/Downloads/arm-2011.09-69-arm-none-eabi-i686-pc-linux-gnu.tar.bz2&lt;br /&gt;
root@linux:/opt/CodeSourcery# ls&lt;br /&gt;
arm-2011.09&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anpassen der Umgebungsvariable PATH nicht als root ausführen und testen der Umgebung.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
user@linux:~$ export PATH=/opt/CodeSourcery/arm-2011.09/bin:$PATH&lt;br /&gt;
user@linux:~$ arm-none-eabi-gcc --version&lt;br /&gt;
arm-none-eabi-gcc (Sourcery CodeBench Lite 2011.09-69) 4.6.1&lt;br /&gt;
Copyright (C) 2011 Free Software Foundation, Inc.&lt;br /&gt;
This is free software; see the source for copying conditions.  There is NO&lt;br /&gt;
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer gerne mit der Konsole &amp;amp; vi/emacs arbeitet kann sofort zum Abschnitt stlink springen, für die Klickibunti-Fraktion folgt jetzt die Installation der IDE.&lt;br /&gt;
==== Eclipse IDE ====&lt;br /&gt;
Nach der Installation der Toolchain folgt jetzt die IDE hier habe ich mich für Eclipse entschieden. Zunächst sucht man sich auf [[http://www.eclipse.org/downloads/ eclipse.org]] aus einen der vielen Pakete das für sich passende raus. Das sinnvollste an dieser Stelle ist &amp;quot;Eclipse IDE for C/C++ Developers&amp;quot;. Wer aber vor hat die IDE nicht nur für C/C++ zu verwenden ist mit &amp;quot;Eclipse Classic&amp;quot; vielleicht besser bedient.&lt;br /&gt;
&lt;br /&gt;
Ich werde hier Eclipse Classic 3.7.1 verwenden und zeigen wie das CDT (C/C++ Development Tooling) installiert wird.&lt;br /&gt;
Um Eclipse zu &amp;quot;installieren&amp;quot; muss das Archiv nur an einem Ort seiner Wahl entpackt werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux:/home/user/Downloads# cd /opt&lt;br /&gt;
root@linux:/opt/CodeSourcery# tar xvf /home/user/Downloads/eclipse-SDK-3.7.1-linux-gtk.tar.gz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Die IDE lässt sich nun wie folgt starten:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
user@linux:~$ /opt/eclipse/eclipse&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Wie ein Starter angelegt wird liest du am besten im Handbuch/Wiki zu deiner Distribution nach.&lt;br /&gt;
&lt;br /&gt;
Als nächstes folgt die Installation der benötigten Plugins. Der Abschnitt &amp;quot;CDT  (C/C++ Development Tooling)&amp;quot; kann übersprungen werden, wenn man das Eclipse-Paket &amp;quot;Eclipse IDE for C/C++ Developers&amp;quot; installiert hat.&lt;br /&gt;
===== CDT  (C/C++ Development Tooling) =====&lt;br /&gt;
Zum installieren des CDT wird zuerst die IDE gestartet. Im Hauptfenster wählt man dann den Menüpunkt &#039;&#039;&#039;Help &amp;gt; Install New Software...&#039;&#039;&#039; es erscheint ein neuer Dialog. Das Eingabefeld &#039;&#039;&#039;Work with:&#039;&#039;&#039; wird mit &#039;&#039;&#039;http://download.eclipse.org/tools/cdt/releases/indigo&#039;&#039;&#039; ausgefüllt und mit der &#039;&#039;&#039;Return-Taste&#039;&#039;&#039; abgeschickt.&lt;br /&gt;
&lt;br /&gt;
Im unteren Teil des Dialogs werden nun die verfügbaren Plugins aufgelistet, benötigt wird das Plugin &#039;&#039;&#039;C/C++ Development Tools&#039;&#039;&#039; aus der Rubrik &#039;&#039;&#039;CDT Main Features&#039;&#039;&#039;. Einfach ein Haken davor machen und auf &#039;&#039;&#039;Next&#039;&#039;&#039; klicken. Es erscheint eine Zusammenfassung und eine Seite weiter die Lizenz, die man sich durchlesen sollte und dann bestenfalls bestätigt. Mit einem klick auf &#039;&#039;&#039;Finish&#039;&#039;&#039; wird das Plugin heruntergeladen und installiert.&lt;br /&gt;
&lt;br /&gt;
Nach der Installation des Plugins sollte Eclipse neu gestartet werden. Auf der Willkommen-Seite ist nun ein Punkt C/C++ Development zusehen bzw. lässt sich im Menü per &#039;&#039;&#039;File &amp;gt; New &amp;gt; Project...&#039;&#039;&#039; ein C oder C++ Projekt anlegen.&lt;br /&gt;
===== GNU ARM Eclipse Plug-in =====&lt;br /&gt;
Mit der jetzigen Installation ist es bereits möglich einfache C/C++ Projekte zu erstellen und Makefiles zu importieren. Jetzt fehlt noch das Bindeglied zwischen der Toolchain und Eclipse. Dazu gibt es das [http://sourceforge.net/projects/gnuarmeclipse/ GNU ARM Eclipse Plug-in]. Mit dem Plugin kann man nun die Konfiguration des Compilers und Linkers in Eclipse erledigen was sonst in einem Makefile geschieht.&lt;br /&gt;
&lt;br /&gt;
Die Installation des Plugins funktioniert genauso wie die Installation des CDT, nur mit anderer Quelle. Hier die Kurzfassung:&lt;br /&gt;
# &#039;&#039;&#039;Help &amp;gt; Install New Software...&#039;&#039;&#039;&lt;br /&gt;
# &#039;&#039;&#039;Work with:&#039;&#039;&#039; mit http://gnuarmeclipse.sourceforge.net/updates ausfüllen und mit &#039;&#039;&#039;Return-Taste&#039;&#039;&#039; bestätigen.&lt;br /&gt;
# Einen Haken vor CDT GNU Cross Development Tools machen und &#039;&#039;&#039;Next&#039;&#039;&#039; drücken.&lt;br /&gt;
# Es erscheint eine Zusammenfassung mit &#039;&#039;&#039;Next&#039;&#039;&#039; zu nächsten Seite.&lt;br /&gt;
# Lizenzvereinbarung lesen und akzeptieren Installation mit klick auf &#039;&#039;&#039;Finish&#039;&#039;&#039; starten.&lt;br /&gt;
# Es erscheint noch eine Warnung, dass die Dateien nicht signiert sind. Diesen bitte mit &#039;&#039;&#039;OK&#039;&#039;&#039; bestätigen.&lt;br /&gt;
#  Eclipse neu starten.&lt;br /&gt;
&lt;br /&gt;
Beim erstellen eines neuen C oder C++ Projekts kann nun die Toolchain ARM Linux GCC (Sourcery G++ Lite) gewählt werden.&lt;br /&gt;
Bevor mit den Beispielen begonnen werden kann muss noch die Frage geklärt werden wie die Daten auf den Chip kommen.&lt;br /&gt;
==== stlink ====&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:STM32]]&lt;/div&gt;</summary>
		<author><name>Avr-frickler</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=STM32F4-Discovery&amp;diff=63063</id>
		<title>STM32F4-Discovery</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=STM32F4-Discovery&amp;diff=63063"/>
		<updated>2012-01-03T18:40:03Z</updated>

		<summary type="html">&lt;p&gt;Avr-frickler: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieser Wiki-Artikel soll den Einstieg in die Prozessorfamilie STM32 von [http://www.st.com STMicroelectronics] erleichtern. Der Artikel begleitet dich von der Installation der benötigten Software bis hin zum flashen des Beispiels in den Prozessor.&amp;lt;br/&amp;gt;&lt;br /&gt;
Da es für Windows schon einiges im Internet zu finden gibt, wird die Installation der Toolchain für Linux beschrieben. Die verwendeten Tools sind allerdings als Quelltext oder als Windows-Installation verfügbar, somit lassen sich die meisten Schritte auch auf Windows-Betriebssystemen nachvollziehen.&lt;br /&gt;
== Hardware ==&lt;br /&gt;
Das in diesem Artikel verwendete Board [http://www.st.com/internet/evalboard/product/252419.jsp STM32F4-Discovery] lässt sich z.B. bei [http://www.watterott.com/de/STM32F4Discovery Watterott] bestellen.&lt;br /&gt;
Es lassen sich auch andere Boards verwenden, allerdings müssen die Beispiele dem Schaltplan entsprechend angepasst werden.&lt;br /&gt;
== Software ==&lt;br /&gt;
==== Sourcery CodeBench Lite Edition for ARM EABI ====&lt;br /&gt;
&amp;lt;p&amp;gt;[[Datei:Sup_processors.jpg|thumb|left]]&lt;br /&gt;
Als erstes benötigen wir die Toolchain mit Compiler &amp;amp; Linker. Hier verwenden wir die [http://www.mentor.com/embedded-software/sourcery-tools/sourcery-codebench/editions/lite-edition/ Sourcery Codebench von Mentor]. In der Auswahlbox &amp;quot;Supported Prozessors&amp;quot; wählt man in der Rubrik &amp;quot;ARM processors&amp;quot; den Punkt &amp;quot;Download the EABI Release &amp;gt;&amp;quot; aus.&lt;br /&gt;
&lt;br /&gt;
Leider muss man sich registrieren. Nach der Registrierung erhält man einen Link per E-Mail zur Downloadseite. Man wählt das &amp;quot;Recommended Release&amp;quot; aus und lädt dort die Datei &amp;quot;IA32 GNU/Linux TAR&amp;quot; herunter.&lt;br /&gt;
&lt;br /&gt;
[https://sourcery.mentor.com/sgpp/lite/arm/portal/package9740/public/arm-none-eabi/arm-2011.09-69-arm-none-eabi-i686-pc-linux-gnu.tar.bz2 Direktlink]&lt;br /&gt;
&lt;br /&gt;
Die Datei muss einfach nur an einem beliebigem Ort entpackt werden und die Umgebungsvariable PATH erweitert werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux:/home/user/Downloads# mkdir /opt/CodeSourcery&lt;br /&gt;
root@linux:/home/user/Downloads# cd /opt/CodeSourcery&lt;br /&gt;
root@linux:/opt/CodeSourcery# tar xvf /home/user/Downloads/arm-2011.09-69-arm-none-eabi-i686-pc-linux-gnu.tar.bz2&lt;br /&gt;
root@linux:/opt/CodeSourcery# ls&lt;br /&gt;
arm-2011.09&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anpassen der Umgebungsvariable PATH nicht als root ausführen und testen der Umgebung.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
user@linux:~$ export PATH=/opt/CodeSourcery/arm-2011.09/bin:$PATH&lt;br /&gt;
user@linux:~$ arm-none-eabi-gcc --version&lt;br /&gt;
arm-none-eabi-gcc (Sourcery CodeBench Lite 2011.09-69) 4.6.1&lt;br /&gt;
Copyright (C) 2011 Free Software Foundation, Inc.&lt;br /&gt;
This is free software; see the source for copying conditions.  There is NO&lt;br /&gt;
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
==== Eclipse IDE for C/C++ Developers ====&lt;br /&gt;
===== GNU ARM Eclipse Plug-in =====&lt;br /&gt;
==== stlink ====&lt;/div&gt;</summary>
		<author><name>Avr-frickler</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=STM32F4-Discovery&amp;diff=63045</id>
		<title>STM32F4-Discovery</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=STM32F4-Discovery&amp;diff=63045"/>
		<updated>2012-01-03T13:56:21Z</updated>

		<summary type="html">&lt;p&gt;Avr-frickler: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieser Wiki-Artikel soll den Einstieg in die Prozessorfamilie STM32 von [http://www.st.com STMicroelectronics] erleichtern. Der Artikel begleitet dich von der Installation der benötigten Software bis hin zum flashen des Beispiels in den Prozessor.&amp;lt;br/&amp;gt;&lt;br /&gt;
Da es für Windows schon einiges im Internet zu finden gibt, wird die Installation der Toolchain für Linux beschrieben. Die verwendeten Tools sind allerdings als Quelltext oder als Windows-Installation verfügbar, somit lassen sich die meisten Schritte auch auf Windows-Betriebssystemen nachvollziehen.&lt;br /&gt;
== Hardware ==&lt;br /&gt;
Das in diesem Artikel verwendete Board [http://www.st.com/internet/evalboard/product/252419.jsp STM32F4-Discovery] lässt sich z.B. bei [http://www.watterott.com/de/STM32F4Discovery Watterott] bestellen.&lt;br /&gt;
Es lassen sich auch andere Boards verwenden, allerdings müssen die Beispiele dem Schaltplan entsprechend angepasst werden.&lt;br /&gt;
== Software ==&lt;br /&gt;
==== Sourcery CodeBench Lite Edition for ARM EABI ====&lt;br /&gt;
[[Datei:Sup_processors.jpg|thumb|right|403px]]&lt;br /&gt;
&amp;lt;p&amp;gt;Als erstes benötigen wir die Toolchain mit Compiler &amp;amp; Linker. Hier verwenden wir die [http://www.mentor.com/embedded-software/sourcery-tools/sourcery-codebench/editions/lite-edition/ Sourcery Codebench von Mentor]. In der Auswahlbox &amp;quot;Supported Prozessors&amp;quot; wählt man in der Rubrik &amp;quot;ARM processors&amp;quot; den Punkt &amp;quot;Download the EABI Release &amp;gt;&amp;quot; aus.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Leider muss man sich registrieren. Nach der Registrierung erhält man einen Link per E-Mail zur Downloadseite. Man wählt das &amp;quot;Recommended Release&amp;quot; aus und lädt dort die Datei &amp;quot;IA32 GNU/Linux TAR&amp;quot; herunter.&amp;lt;/p&amp;gt;[https://sourcery.mentor.com/sgpp/lite/arm/portal/package9740/public/arm-none-eabi/arm-2011.09-69-arm-none-eabi-i686-pc-linux-gnu.tar.bz2 Direktlink]&lt;br /&gt;
==== Eclipse IDE for C/C++ Developers ====&lt;br /&gt;
===== GNU ARM Eclipse Plug-in =====&lt;br /&gt;
==== stlink ====&lt;/div&gt;</summary>
		<author><name>Avr-frickler</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Sup_processors.jpg&amp;diff=63040</id>
		<title>Datei:Sup processors.jpg</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Sup_processors.jpg&amp;diff=63040"/>
		<updated>2012-01-03T13:37:54Z</updated>

		<summary type="html">&lt;p&gt;Avr-frickler: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Auswahlhilfe für die richtige Sourcery Codebench Installation.&lt;br /&gt;
Quelle: Screenshot der Seite http://www.mentor.com/embedded-software/sourcery-tools/sourcery-codebench/editions/lite-edition/ am 3.1.2012&lt;/div&gt;</summary>
		<author><name>Avr-frickler</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Sup_processors.jpg&amp;diff=63039</id>
		<title>Datei:Sup processors.jpg</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Sup_processors.jpg&amp;diff=63039"/>
		<updated>2012-01-03T13:36:00Z</updated>

		<summary type="html">&lt;p&gt;Avr-frickler: Auswahlhilfe für die richtige Sourcery Codebench Installation.
Quelle: Screesnshot der Seite http://www.mentor.com/embedded-software/sourcery-tools/sourcery-codebench/editions/lite-edition/ am 3.1.2012&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Auswahlhilfe für die richtige Sourcery Codebench Installation.&lt;br /&gt;
Quelle: Screesnshot der Seite http://www.mentor.com/embedded-software/sourcery-tools/sourcery-codebench/editions/lite-edition/ am 3.1.2012&lt;/div&gt;</summary>
		<author><name>Avr-frickler</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=STM32F4-Discovery&amp;diff=62944</id>
		<title>STM32F4-Discovery</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=STM32F4-Discovery&amp;diff=62944"/>
		<updated>2012-01-02T16:55:12Z</updated>

		<summary type="html">&lt;p&gt;Avr-frickler: Anfang des Artikels&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieser Wiki-Artikel soll den Einstieg in die Prozessorfamilie STM32 von [http://www.st.com STMicroelectronics] erleichtern. Der Artikel begleitet dich von der Installation der benötigten Software bis hin zum flashen des Beispiels in den Prozessor.&amp;lt;br/&amp;gt;&lt;br /&gt;
Da es für Windows schon einiges im Internet zu finden gibt, wird die Installation der Toolchain für Linux beschrieben. Die verwendeten Tools sind allerdings als Quelltext oder als Windows-Installation verfügbar, somit lassen sich die meisten Schritte auch auf Windows-Betriebssystemen nachvollziehen.&lt;br /&gt;
=== Software ===&lt;br /&gt;
* Sourcery CodeBench Lite Edition for ARM EABI&lt;br /&gt;
* Eclipse IDE for C/C++ Developers&lt;br /&gt;
** GNU ARM Eclipse Plug-in&lt;br /&gt;
* stlink&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
* STM32F4-Discovery&lt;/div&gt;</summary>
		<author><name>Avr-frickler</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Benutzer:Avr-frickler&amp;diff=62811</id>
		<title>Benutzer:Avr-frickler</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Benutzer:Avr-frickler&amp;diff=62811"/>
		<updated>2011-12-27T18:57:30Z</updated>

		<summary type="html">&lt;p&gt;Avr-frickler: /* STM32 / ARM */ Wiki-Artikel  GNU-ATM-Toolchain aus ubuntuusers.de hinzugefügt.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ich sammle hier ein paar Links zu diversen Themen der Elektronik.&lt;br /&gt;
&lt;br /&gt;
== STM32 / ARM ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Compiler - Linux&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
[http://michaldemin.wordpress.com/2010/02/09/arm-toolchain-newlib-part1/ ARM-GCC mit newlib + floting point support] - HowTo zum compilieren eines GCC für ARM mit newlib und Fließkommazahlen-Berechnungen in Software.&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.alios.org/blog/2009/12/gnu-arm-cortex-m3-toolchain-selber-bauen/ ARM-GCC mit newlib] - Anleitung wie man sich einen GCC für ARM baut.&amp;lt;br&amp;gt;&lt;br /&gt;
[http://wiki.ubuntuusers.de/GNU_ARM-Toolchain ARM-GCC für Ubuntu] - ARM-GCC Toolchain unter Ubuntu bauen.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Utilities - Linux&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
[http://code.google.com/p/arm-utilities arm-utilities] - &lt;br /&gt;
Debug/Flash-Tools für STM32-Boards mit STLink z.B. STM32F4-Discovery.&amp;lt;br&amp;gt;&lt;br /&gt;
[http://code.google.com/p/stm32flash/ stm32flash] - &lt;br /&gt;
Flash-Tool für STM32-Boards mit Bootloader (serielle Schnittstelle z.B. ET-STM32F103.&amp;lt;br&amp;gt;&lt;br /&gt;
[http://sourceforge.net/apps/mediawiki/gnuarmeclipse/index.php?title=Main_Page Eclipse Plugin] - Eclipse Plugin für diverse Toolchains.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Artikel auf µC.net&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
[[STM32_Eclipse_Installation]] - STM32 Toolchain in Eclipse integrieren. (Windows)&amp;lt;br&amp;gt;&lt;br /&gt;
[[STM32F10x_Standard_Peripherals_Library]] - Einstieg in die Programmierung.&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Avr-frickler</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Benutzer:Avr-frickler&amp;diff=62807</id>
		<title>Benutzer:Avr-frickler</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Benutzer:Avr-frickler&amp;diff=62807"/>
		<updated>2011-12-27T13:15:16Z</updated>

		<summary type="html">&lt;p&gt;Avr-frickler: /* STM32 / ARM */ Artikel STM32F10x_Standard_Peripherals_Library hinzu gefügt.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ich sammle hier ein paar Links zu diversen Themen der Elektronik.&lt;br /&gt;
&lt;br /&gt;
== STM32 / ARM ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Compiler - Linux&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
[http://michaldemin.wordpress.com/2010/02/09/arm-toolchain-newlib-part1/ ARM-GCC mit newlib + floting point support] - HowTo zum compilieren eines GCC für ARM mit newlib und Fließkommazahlen-Berechnungen in Software.&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.alios.org/blog/2009/12/gnu-arm-cortex-m3-toolchain-selber-bauen/ ARM-GCC mit newlib] - Anleitung wie man sich einen GCC für ARM baut.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Utilities - Linux&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
[http://code.google.com/p/arm-utilities arm-utilities] - &lt;br /&gt;
Debug/Flash-Tools für STM32-Boards mit STLink z.B. STM32F4-Discovery.&amp;lt;br&amp;gt;&lt;br /&gt;
[http://code.google.com/p/stm32flash/ stm32flash] - &lt;br /&gt;
Flash-Tool für STM32-Boards mit Bootloader (serielle Schnittstelle z.B. ET-STM32F103.&amp;lt;br&amp;gt;&lt;br /&gt;
[http://sourceforge.net/apps/mediawiki/gnuarmeclipse/index.php?title=Main_Page Eclipse Plugin] - Eclipse Plugin für diverse Toolchains.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Artikel auf µC.net&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
[[STM32_Eclipse_Installation]] - STM32 Toolchain in Eclipse integrieren. (Windows)&amp;lt;br&amp;gt;&lt;br /&gt;
[[STM32F10x_Standard_Peripherals_Library]] - Einstieg in die Programmierung.&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Avr-frickler</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Benutzer:Avr-frickler&amp;diff=62805</id>
		<title>Benutzer:Avr-frickler</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Benutzer:Avr-frickler&amp;diff=62805"/>
		<updated>2011-12-27T10:21:49Z</updated>

		<summary type="html">&lt;p&gt;Avr-frickler: Erste Version der Seite&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ich sammle hier ein paar Links zu diversen Themen der Elektronik.&lt;br /&gt;
&lt;br /&gt;
== STM32 / ARM ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Compiler - Linux&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
[http://michaldemin.wordpress.com/2010/02/09/arm-toolchain-newlib-part1/ ARM-GCC mit newlib + floting point support] - HowTo zum compilieren eines GCC für ARM mit newlib und Fließkommazahlen-Berechnungen in Software.&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.alios.org/blog/2009/12/gnu-arm-cortex-m3-toolchain-selber-bauen/ ARM-GCC mit newlib] - Anleitung wie man sich einen GCC für ARM baut.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Utilities - Linux&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
[http://code.google.com/p/arm-utilities arm-utilities] - &lt;br /&gt;
Debug/Flash-Tools für STM32-Boards mit STLink z.B. STM32F4-Discovery.&amp;lt;br&amp;gt;&lt;br /&gt;
[http://code.google.com/p/stm32flash/ stm32flash] - &lt;br /&gt;
Flash-Tool für STM32-Boards mit Bootloader (serielle Schnittstelle z.B. ET-STM32F103.&amp;lt;br&amp;gt;&lt;br /&gt;
[http://sourceforge.net/apps/mediawiki/gnuarmeclipse/index.php?title=Main_Page Eclipse Plugin] - Eclipse Plugin für diverse Toolchains.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Artikel auf µC.net&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
[[STM32_Eclipse_Installation]] - STM32 Toolchain in Eclipse integrieren. (Windows)&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Avr-frickler</name></author>
	</entry>
</feed>