Hallo, Ich versuche die Standartbibliothek in Verbindung mit Codesys zum laufen zu bringen. Im wesendlichen geht es mir erst mal darum das kleinste lauffähige System zu kreieren. Das ist irgendwie auch aus der Hilfe nicht so ganz ersichtlich was wie womit komuniziert. Kann mir einer sagen was der Compiler alles für Dateien benötigt um zu laufen. Also welche CMSIS Sachen, Vectordatei und welches Linkerscript.
Arbeite den Artikel STM32 durch, da gibt es auch Links zu anderen Artikeln mit Demo Projekten und den entsprechenden makefile Dateien.
suppi... Es wäre wesendlich einfacher wenn einer in 2Minuten eben schreibt was man braucht (Erfahrung) anstatt ich jetzt 1000 Beiträge durchsuche. Irgendwie ist der Sinn eines Forums nicht so ganz erfüllt.
>Es wäre wesendlich einfacher wenn einer in 2Minuten eben schreibt was >man braucht (Erfahrung) anstatt ich jetzt 1000 Beiträge durchsuche. >Irgendwie ist der Sinn eines Forums nicht so ganz erfüllt. kein Problem. Hardware Das in diesem Artikel verwendete Board STM32F4-Discovery lässt sich z.B. bei Watterott bestellen. Es lassen sich auch andere Boards verwenden, allerdings müssen die Beispiele dem Schaltplan entsprechend angepasst werden. [Bearbeiten] Software 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. 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. 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. [Bearbeiten] Sourcery CodeBench Lite Edition for ARM EABI Als erstes benötigen wir die Toolchain mit Compiler & Linker. Hier verwenden wir die Sourcery Codebench von Mentor. In der Auswahlbox "Supported Prozessors" wählt man in der Rubrik "ARM processors" den Punkt "Download the EABI Release >" aus. Leider muss man sich registrieren. Nach der Registrierung erhält man einen Link per E-Mail zur Downloadseite. Man wählt das "Recommended Release" aus und lädt dort die Datei "IA32 GNU/Linux TAR" herunter. Direktlink Linux Direktlink Windows (Mingw) Direktlink Windows (Exe) Die Datei muss einfach nur an einem beliebigem Ort entpackt werden und die Umgebungsvariable PATH erweitert werden. root@linux:/home/user/Downloads# mkdir /opt/CodeSourcery root@linux:/home/user/Downloads# cd /opt/CodeSourcery root@linux:/opt/CodeSourcery# tar xvf /home/user/Downloads/arm-2011.09-69-arm-none-eabi-i686-pc-linux-gnu.tar. bz2 root@linux:/opt/CodeSourcery# ls arm-2011.09 Anpassen der Umgebungsvariable PATH. Die Anpassung ermöglicht es Eclipse den Compiler im Dateisystem zu finden ohne den absoluten Pfad anzugeben. Es gibt verschiedene Orte wo sich die Variable anpassen lässt. Auf meinem System habe ich die Datei /etc/environment angepasst. root@linux:/opt/CodeSourcery# echo PATH=\"$PATH:/opt/CodeSourcery/arm-2011.09/bin\" >> /etc/environment root@linux:/opt/CodeSourcery# source /etc/environment root@linux:/opt/CodeSourcery# arm-none-eabi-gcc --version arm-none-eabi-gcc (Sourcery CodeBench Lite 2011.09-69) 4.6.1 Copyright (C) 2011 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Wer gerne mit der Konsole & vi/emacs arbeitet kann sofort zum Abschnitt stlink springen, für die Klickibunti-Fraktion folgt jetzt die Installation der IDE. [Bearbeiten] Eclipse IDE Nach der Installation der Toolchain folgt jetzt die IDE hier habe ich mich für Eclipse entschieden. Zunächst sucht man sich auf eclipse.org aus einen der vielen Pakete das für sich passende raus. Das sinnvollste an dieser Stelle ist "Eclipse IDE for C/C++ Developers". Wer aber vor hat die IDE nicht nur für C/C++ zu verwenden ist mit "Eclipse Classic" vielleicht besser bedient. Ich werde hier Eclipse Classic 3.7.1 verwenden und zeigen wie das CDT (C/C++ Development Tooling) installiert wird. Um Eclipse zu "installieren" muss das Archiv nur an einem Ort seiner Wahl entpackt werden. root@linux:/home/user/Downloads# cd /opt root@linux:/opt# tar xvf /home/user/Downloads/eclipse-SDK-3.7.1-linux-gtk.tar.gz Die IDE lässt sich nun wie folgt starten: user@linux:~$ /opt/eclipse/eclipse Wie ein Starter angelegt wird liest du am besten im Handbuch/Wiki zu deiner Distribution nach. Als nächstes folgt die Installation der benötigten Plugins. Der Abschnitt "CDT (C/C++ Development Tooling)" kann übersprungen werden, wenn man das Eclipse-Paket "Eclipse IDE for C/C++ Developers" installiert hat. [Bearbeiten] CDT (C/C++ Development Tooling) Zum installieren des CDT wird zuerst die IDE gestartet. Im Hauptfenster wählt man dann den Menüpunkt Help > Install New Software... es erscheint ein neuer Dialog. Das Eingabefeld Work with: wird mit http://download.eclipse.org/tools/cdt/releases/indigo ausgefüllt und mit der Return-Taste abgeschickt. Im unteren Teil des Dialogs werden nun die verfügbaren Plugins aufgelistet, benötigt wird das Plugins C/C++ Development Tools aus der Rubrik CDT Main Features und C/C++ GDB Hardware Debugging aus der Rubrik CDT Optional Features. Einfach ein Haken vor den Plugins machen und auf Next 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 Finish wird das Plugin heruntergeladen und installiert. 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 File > New > Project... ein C oder C++ Projekt anlegen. [Bearbeiten] GNU ARM Eclipse Plug-in 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 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. Die Installation des Plugins funktioniert genauso wie die Installation des CDT, nur mit anderer Quelle. Hier die Kurzfassung: Help > Install New Software... Work with: mit http://gnuarmeclipse.sourceforge.net/updates ausfüllen und mit Return-Taste bestätigen. Einen Haken vor CDT GNU Cross Development Tools machen und Next drücken. Es erscheint eine Zusammenfassung mit Next zu nächsten Seite. Lizenzvereinbarung lesen und akzeptieren Installation mit klick auf Finish starten. Es erscheint noch eine Warnung, dass die Dateien nicht signiert sind. Diesen bitte mit OK bestätigen. Eclipse neu starten. Beim erstellen eines neuen C oder C++ Projekts kann nun die Toolchain ARM Linux GCC (Sourcery G++ Lite) gewählt werden. Bevor mit den Beispielen begonnen werden kann muss noch die Frage geklärt werden wie die Daten auf den Chip kommen. [Bearbeiten] stlink Das Entwicklungsboard STM32F4-Discovery von ST kann über USB per STLinkV2 programmiert werden. Für Linux gibt es da den "stm32 discovery line linux programmer" 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). Als erstes die Quelltexte laden user@linux:~/src$ git clone git://github.com/texane/stlink.git 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).Bei einem Debian-System könnte auch folgendes Paket autogen fehlen. Jetzt kann der Quelltext kompiliert werden. user@linux:~/src$ cd stlink user@linux:~/src/stlink$ ./autogen.sh user@linux:~/src/stlink$ ./configure user@linux:~/src/stlink$ make 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. Achtung: 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. root@linux:~# mkdir /opt/stlink root@linux:~# cd /opt/stlink root@linux:/opt/stlink# cp /home/user/src/stlink/flash/flash ./st-flash root@linux:/opt/stlink# cp /home/user/src/stlink/gdbserver/st-util . root@linux:/opt/stlink# echo PATH=\"$PATH:/opt/stlink\" >> /etc/environment root@linux:/opt/stlink# source /etc/environment Nun brauchen die beiden Tools noch Schreibrechte für das USB-Gerät. root@linux:~# cp /home/user/src/stlink/49-stlinkv*.rules /etc/udev/rules.d root@linux:~# udevadm control --reload-rules Wird nun das STM32F4-Discovery an den PC gesteckt wird ein neues Device erzeugt, bei mir war das /dev/stlinkv2_2. Für Boards mit STLink v1 solltest du dir einmal die README zu stlink durchlesen. Sollte das soweit alles geklappt haben, ist das jetzt der perfekte Zeitpunkt um ein Backup der Firmware zu machen. user@linux:~$ st-flash read ~/STM32F4-Discovery.bin 0x8000000 0x100000 Mit folgendem Befehl kann die Datei wieder zurück geschrieben werden. user@linux:~$ st-flash write ~/STM32F4-Discovery.bin 0x8000000 [Bearbeiten] stlink in Eclipse einbinden Als nächstes wird der GDB-Server in Eclipse integriert. Man wählt aus dem Hauptmenu Run > External Tools > External Tools Configurations.... Ein Klick mit der rechten Maustaste auf Program und New auswählen. Als Name ST-Link eintragen. Auf der Registerkarte Main unter Location: /opt/stlink/st-util und bei Working Directory: ${workspace_loc}${project_path} eintragen. Auf der Registerkarte Build wird der Haken vor Build before Launch raus genommen. Auf der Registerkarte Common einen Haken vor External Tools im Feld Display in Favorites menu machen. Ein Klick auf Apply und den Dialog mit einem Klick auf Close schließen. [Bearbeiten] Beispiel-Projekte [Bearbeiten] Vorbereitungen [Bearbeiten] Standard Peripherals Library 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. Die Rede ist von der "Standard Peripherals Library", diese lässt sich auf der Seite von STMicroelectronics herunter laden. Der Weg dorthin ist dank einer wunderschön gestalteten Homepage etwas steinig. Auf der Hauptseite wählt man zuerst in der Rubrik Products die Kategorie Micros & Memories und danach Mikrocontrollers. Als nächstes wird auf die Registerkarte Resources gewechselt. Im Bereich Software Resources wird der Punkt Firmware 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 "standard peripherals library" gesucht werde Für das STM32F4-Discovery benötigen wir die Datei STM32F4 DSP and standard peripherals library Die Datei kann an einen beliebigen Ort entpackt werden. [Bearbeiten] Neues Projekt anlegen 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: user@linux:~$ /opt/eclipse/eclipse Nun wird ein neues Projekt geöffnet folgende Schritte sind nötig: File > New > Project... C/C++ > C Project; Next ARM Cross Target Application > Empty Project Toolchains = ARM Linux GCC (Sourcery G++ Lite) Project name = (Hier den Projektnamen eingeben); Finish Eventuell wird nach der C/C++ Perspective gefragt, diesen Dialog mit Yes beantworten. Auf der linken Seite im Project Explorer siehst du nun das neue Projekt, sobald du die Baumstruktur öffnest sollte bereits ein Ordner Includes vorhanden sein, dort gibt es bereits 3 Einträge: /opt/CodeSourcery/arm-2011.09/arm-none-eabi/include /opt/CodeSourcery/arm-2011.09/lib/gcc/arm-none-eabi/4.6.1/include /opt/CodeSourcery/arm-2011.09/lib/gcc/arm-none-eabi/4.6.1/include-fixed Wenn diese Einträge nicht vorhanden sind, ist bis hierhin etwas schief gegangen. Vermutlich wurde die Umgebungsvariable PATH nicht korrekt gesetzt. 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. Project > Properties C/C++ General > Paths and Symbols Configuration = [All configurations] Reiter Includes, Languages = GNU C 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: /home/user/eclipse/STM32/STM32F4xx StdPeriphLib V1.0.0/Libraries/CMSIS/Include /home/user/eclipse/STM32/STM32F4xx StdPeriphLib V1.0.0/Libraries/CMSIS/Device/ST/STM32F4xx/Include /home/user/eclipse/STM32/STM32F4xx StdPeriphLib V1.0.0/Libraries/STM32F4xx_StdPeriph_Driver/inc /${ProjDirPath} Als nächstes werden die Quellcode-Dateien der Standard Peripherals Library hinzugefügt. Reiter Source Location Link Folder..., Folder Name = StdPeriph Link to folder in the filesystem aktivieren Browse..., Verzeichniss = /user/eclipse/STM32/STM32F4xx StdPeriphLib V1.0.0/Libraries/STM32F4xx_StdPeriph_Driver/src Jetzt noch 3 Symbole anlegen: Reiter Symbols, Languages = GNU C Add..., Name: = USE_STDPERIPH_DRIVER > OK Add..., Name: = USE_STM32_DISCOVERY > OK Add..., Name: = HSE_VALUE Value: = 8000000 > OK Damit durch den Indexer auch alle Header-Files der Standard-Libs berücksichtigt werden ist die Konfiguration des Indexers noch anzupassen: Project > Properties C/C++ General > Indexer Folgende Optionen (Checkboxen) wählen: Enable project specific settings Store settings with project Enable indexer Index source files not included in the build Index unused headers Index source and header files opened in editor Allow heuristic resolution of includes Nun noch ein Linker-Script aktivieren. C/C++ Build > Settings Configuration = [All configurations] ARM Sourcery Linux GCC Linker > General Script File (-T) = /${ProjDirPath}/stm32_flash.ld Als letztes noch das Ausgabeformat auf Binary einstellen. ARM Sourcery Linux GNU Create Flash Image > Output Output file format (-O) = binary Der Dialog kann nun mit OK geschlossen werden. Jetzt müssen noch 3 Dateien ins Projekt kopiert werden. /home/user/eclipse/STM32/STM32F4xx StdPeriphLib V1.0.0/Project/STM32F4xx_StdPeriph_Templates/TrueSTUDIO/STM324xG_EVAL/st m32_flash.ld /home/user/eclipse/STM32/STM32F4xx StdPeriphLib V1.0.0/Libraries/CMSIS/Device/ST/STM32F4xx/Source/Templates/system_stm32 f4xx.c /home/user/eclipse/STM32/STM32F4xx StdPeriphLib V1.0.0/Libraries/CMSIS/Device/ST/STM32F4xx/Source/Templates/TrueSTUDIO/s tartup_stm32f4xx.s Die Dateiendung der Datei startup_stm32f4xx.s muss noch in ein großes S geändert werden. Ausserdem muss in der Datei folgende Anweisung auskommentiert werden. /* Call static constructors */ // bl __libc_init_array Hinweis zur Ausgabedatei 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. Jetzt kann mit der Programmierung begonnen werden. [Bearbeiten] Debugging mit GDB Dieser Abschnitt zeigt wie der GDB-Server von stlink in Eclipse verwendet wird. Bei geöffnetem Projekt klickt man im Hauptmenü auf Run > Debug Configurations.... In der Liste links klickt man mit der Rechten Maustaste auf GDB Hardware Debugging und wählt New. Bei Name trägt man den Namen der Konfiguration ein z.B. STM32F4-Discovery ST-Link. Die Datei für C/C++ Application: wählt man am besten aus, indem man auf Search Project... klickt. Das Eingabefeld Project: sollte bereits ausgefüllt sein. Auf der Registerkarte Debugger wird in das Eingabefeld GDB-Command: arm-none-eabi-gdb eingetragen. In das Feld Port Number: wird 4242 eingetragen. Abschließend wird auf die Registerkarte Common gewechselt. Hier wird ein Haken vor Debug im Feld Display in Favorites menu gemacht. Ein Klick auf Apply und Close schließt die Konfiguration ab. Um ein Projekt zu debuggen wählt man zuerst aus dem Hauptmenu Run > External Tools > ST-Link dadurch wird der GDB-Server gestartet. Sollte man die Meldung erhalten Variable References empty selection: ${project_path} hilft es einmal in eine Projektdatei oder den Projekt-Explorer zu klicken. Danach wählt man aus dem Hauptmenü Run > Debug Configurations..., in der Liste links wählt man die angelegte Configuration unter GDB Hardware Debugging aus und klickt auf Debug. Eclipse möchte nun in die Debug-Perspektive wchseln, das sollte mit Yes beantworten werden. Das Programm wird in den Mikrocontroller geladen und nach dem Flashvorgang direkt gestoppt. Mit F8 kann die Ausführung wieder gestartet werden. Hinweis: Ausführung des GDB bleibt bei 85% stehen In diesem Fall sollte geprüft werden, ob sich "arm-none-eabi-gdb" auf der Kommandozeile ohne Fehler ausführen lässt. Teilweise fehlen u.U. (32-Bit) Bibliotheken. [Bearbeiten] Beispiel: Blinky Hier ein Beispiel welches die 4 LEDs um den MEMS-Sensor herum leuchten lässt.
1 | main.c |
2 | |
3 | #include "stm32f4xx.h" |
4 | |
5 | GPIO_InitTypeDef GPIO_InitStructure; |
6 | |
7 | void Delay(__IO uint32_t nCount) { |
8 | while(nCount--) { |
9 | }
|
10 | }
|
11 | |
12 | int main(void) { |
13 | /* GPIOD Periph clock enable */
|
14 | RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE); |
15 | |
16 | /* Configure PD12, 13, 14 and PD15 in output pushpull mode */
|
17 | GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15; |
18 | GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; |
19 | GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; |
20 | GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; |
21 | GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; |
22 | GPIO_Init(GPIOD, &GPIO_InitStructure); |
23 | |
24 | while (1) { |
25 | /* Set PD12 Green */
|
26 | GPIOD->BSRRL = GPIO_Pin_12; |
27 | /* Reset PD13 Orange, PD14 Red, PD15 Blue */
|
28 | GPIOD->BSRRH = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15; |
29 | Delay(10000000L); |
30 | |
31 | /* Set PD13 Orange */
|
32 | GPIOD->BSRRL = GPIO_Pin_13; |
33 | /* Reset PD12 Green, PD14 Red, PD15 Blue */
|
34 | GPIOD->BSRRH = GPIO_Pin_12 | GPIO_Pin_14 | GPIO_Pin_15; |
35 | Delay(10000000L); |
36 | |
37 | /* Set PD14 Red */
|
38 | GPIOD->BSRRL = GPIO_Pin_14; |
39 | /* Reset PD12 Green, PD13 Orange, PD15 Blue */
|
40 | GPIOD->BSRRH = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_15; |
41 | Delay(10000000L); |
42 | |
43 | /* Set PD15 Blue */
|
44 | GPIOD->BSRRL = GPIO_Pin_15; |
45 | /* Reset PD12 Green, PD13 Orange, PD14 Red */
|
46 | GPIOD->BSRRH = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14; |
47 | Delay(10000000L); |
48 | }
|
49 | }
|
stm32f4xx_conf.h
1 | #ifndef __STM32F4xx_CONF_H
|
2 | #define __STM32F4xx_CONF_H
|
3 | |
4 | /* Includes ------------------------------------------------------------------*/
|
5 | /* Uncomment the line below to enable peripheral header file inclusion */
|
6 | // #include "stm32f4xx_adc.h"
|
7 | // #include "stm32f4xx_can.h"
|
8 | // #include "stm32f4xx_crc.h"
|
9 | // #include "stm32f4xx_cryp.h"
|
10 | // #include "stm32f4xx_dac.h"
|
11 | // #include "stm32f4xx_dbgmcu.h"
|
12 | // #include "stm32f4xx_dcmi.h"
|
13 | // #include "stm32f4xx_dma.h"
|
14 | // #include "stm32f4xx_exti.h"
|
15 | // #include "stm32f4xx_flash.h"
|
16 | // #include "stm32f4xx_fsmc.h"
|
17 | // #include "stm32f4xx_hash.h"
|
18 | #include "stm32f4xx_gpio.h" |
19 | // #include "stm32f4xx_i2c.h"
|
20 | // #include "stm32f4xx_iwdg.h"
|
21 | // #include "stm32f4xx_pwr.h"
|
22 | #include "stm32f4xx_rcc.h" |
23 | // #include "stm32f4xx_rng.h"
|
24 | // #include "stm32f4xx_rtc.h"
|
25 | // #include "stm32f4xx_sdio.h"
|
26 | // #include "stm32f4xx_spi.h"
|
27 | // #include "stm32f4xx_syscfg.h"
|
28 | // #include "stm32f4xx_tim.h"
|
29 | // #include "stm32f4xx_usart.h"
|
30 | // #include "stm32f4xx_wwdg.h"
|
31 | // #include "misc.h"
|
32 | |
33 | #ifdef USE_FULL_ASSERT
|
34 | #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__))
|
35 | void assert_failed(uint8_t* file, uint32_t line); |
36 | #else
|
37 | #define assert_param(expr) ((void)0)
|
38 | #endif
|
39 | |
40 | #endif
|
Na dann hier mal ne Liste: - Sourcery CodeBench Lite besorgen und installieren in C:\ARM\CodeBench - eClipse Indigo für Cpp besorgen und installieren in C:\ARM\eClipse - eClipse mit dem CDT plugin aufrüsten (nimm einfach alle Optionen, wird für GNU ARM benötigt) - Dann das GNU ARM plugin in eClipse installieren - Wenn du JTAG hast: Besorg die OpenOCD in der Version von freddiechopin (googlen) und den passenden Treiber für deinen Debugger. Dann eine OpenOCD.cfg erstellen aus Programmieradapter.cfg + CPU.cfg (s. Unterverzeichnisse) => C:\ARM\OpenOCD - Wenn du per Bootloader flasht: Das passende Tool von STM besorgen - Jetzt legst du in eClipse ein neues SourceryG++ Projekt an: - Du brauchst ein Linker-Skript, welches du dann in den Linker-Optionen angibst - Dann braucht es eine startup.asm oder startup.S, in der sind die Interruptvektoren definiert und ein bissl Anlauf-Zauber. - Besorg dir ein Minimal-Projekt mit den CMSIS-Dateien für den STM32, z.B. ein UART-Beispiel von STM. Da ist zwar noch die StdLibrary drin, aber die wird dann ja nur für die UART und CPU-Startup-Config verwendet. Kannst also den Rest der Lib entsorgen. - Kompilieren und hoffen dass es geht - Flashen und hoffen das es geht
Um nicht so ganz wie ein Anfänger rüberzukommen (Schade das das immer pauschal angenommen wird), ich arbeite schon länger mit der 2.xx Lib. Die ist meiner Meinung nach noch recht logisch aufgebaut, angesichts der vielen unterstützten Bauteile. Hat auch einiges gedauert bis es mal flüssig lief, ich sag nur Stack u.s.w.. Die neue Lib verschließt sich aber irgendwie meinem Verständnis, es wird etwas definiert um es wieder ein paar Mal umzudefinieren, nur es dann wieder anders zu definieren. Krank, wer soll da durchsteigen am Anfang. Wer sich jetzt fragt warum ich sie will: Ganz einfach, ich will nicht immer wieder das Rat neu erfinden und alle Treiber neu schreiben, sie sind schon fertig und ich will sie nur nutzen. Alles andere ist nicht mehr zeitlich vertretbar zumal auch andere Prozessoren mit wieder anderen Bibliotheken auf einen warten. Mitlerweile dauert es länger mal eine Entwicklingsumgebung einzurichten als das ein oder andere Programm zu schreiben.
Ich brauche kein eclipse, ich hab einen Isystem Programmierer mit Winidea, das reicht. Icg programmiere (oder will es) einen STM32F103ZE. Das Problem ist aber eben das was immer so schon mit "Dann machst du dies und das und-> hoffst das es funktioniert<-" beschrieben wird.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.