STM32 mit der Standart IDE Eclipse und CubeMX: Unterschied zwischen den Versionen

Aus Nicki Wiki
Zur Navigation springen Zur Suche springen
 
(53 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
Nutzen der von CubeMX von STM für die Standard Eclipse IDE.
Dieses Tutorial zeigt wie die Hardwarekonfiguration von CubeMX in der Standard IDE Eclipse genutzt werden kann. '''Voraussetzung''' ist die Einrichtung von Eclipse nach dem Tutorial [https://wiki.xnick.de/index.php/STM32_programmieren_und_debuggen_mit_der_Standard_IDE_Eclipse STM32 programmieren und debuggen mit der Standard IDE Eclipse]. Das Discovery-Board: [http://www.st.com/en/evaluation-tools/stm32f4discovery.html STM32F407G-DISC1] dient wieder als Beispiel.


Voraussetzung: TuT_STM32_eclipse_arm_openOCD
== CubeMX Projekt erstellen ==
Beispiel-Board: STM32F407G-DISC1
Download und Installation von [http://www.st.com/en/development-tools/stm32cubemx.html#getsoftware-scroll CubeMX]. Im Anschluss wird CubeMX gestartet und entsprechende Einstellungen für sein Chip oder Board  vorgenommen.<br />
In CubeMX '''Project''' -> '''Settings…''' -> '''Project Namen''' vergeben, hier ''STM32F407G_CubeMX'' und den Speicherort '''Project Location''' bestimmen.<br />
Unter '''Toolchain/IDE''' im Dropdown-Menü '''Other Toolchain (GPDSC)''' auswählen und mit '''OK''' bestätigen.


[[Datei:stm32_eclipse_cubemx_project_settings.png|400px]]


== CubeMX Projekt erstellen ==
Der Code wird unter '''Project''' –> '''Generate Code''' generiert. Entweder man geht direkt über die Option '''Open Folder''' oder navigiert manuell in das Projektverzeichnis.
GNU ARM Eclipse Build Tools
https://github.com/gnuarmeclipse/windows-build-tools/releases


CubeMX starten und wie gewünscht für sein Board Konfigurieren
== Eclipse Projekt erstellen ==
Project -> Settings … -> Project Namen vergeben
Vor der Erstellung des Projektes müssen noch die [https://github.com/gnu-mcu-eclipse/windows-build-tools/releases GNU MCU Eclipse Windows Build Tools] heruntergeladen und installiert werden<br />
Speicherort auswählen
sowie in Eclipse '''Window''' -> '''Preferences''' -> '''C/C++''' -> '''Build''' -> '''Global Tools Path''' unter '''Build tools folder:''' der Pfad bis zum '''bin''' Ordner von den zuvor installierten '''GNU MCU Eclipse Windows Build Tools''' eingetragen werden. Mit '''OK''' bestätigen.
Toolchain / IDE: Other Toolchain
OK
Project –> Generate Code


GNU ARM Eclipse Build Tools
[[Datei:stm32_eclipse_cubemx_global_tools_path.png|300px]]
Herunterladen und Installieren


== Eclipse Projekt erstellen ==
In Eclipse '''File''' -> '''New''' -> '''C Project''' unter '''Project type:''' -> '''Executable''' -> '''Hello World ARM Cortex-M C/C++ Projekt''' -> '''Cross Arm GCC''' auswählen.
Window -> Preferences -> C/C++ -> Build -> Global Tools Path
Build tools folder: Pfad zu den zuvor installierten build tools (bin Ordner)


OK
[[Datei:stm32_eclipse_cubemx_project_settings.png|300px]]


Neues Projekt erstellen:
Die entsprechenden Werte bei '''Prozessor core:''', '''Clock (Hz):''', '''Flash size (kB):''', '''RAM size (kB)''', '''Use system calls:''' und '''Trace output:''' eintragen bzw. auswählen.
File -> New -> C Project -> Hello World ARM Cortex-M C/C++ Project
Einen Projektnamen  unter '''Project name:''' eintragen; hier ''STM32F407G_Eclipse''. Weiter mit '''Next'''.
Projektnamen vergeben


Next -> Next
[[Datei:stm32_eclipse_cubemx_c_project_prozessor_settings.png|300px]] [[Datei:stm32_eclipse_cubemx_c_project_folders.png|300px]] [[Datei:stm32_eclipse_cubemx_toolchain.png|300px]]
Vendor CMSIS name: stm32f4xx


Finish
Danach '''Next''' -> '''Next''' -> '''Next''' -> '''Finish'''.
Finish


== CubeMX Projekt in Eclipse Projekt integrieren ==
== CubeMX Projekt in Eclipse Projekt integrieren ==
CubeMX Projekt: STM32F407G_CubeMX
Jetzt müssen die mit CubeMX erstellten Bibliotheken (.h und .c Datein) in das Eclipse Projekt kopiert werden.
Eclipse Projekt: STM32F407G_Eclipse


VON STM32F407G_CubeMX\Drivers\STM32F4xx_HAL_Driver\Inc
CubeMX Projekt:  STM32F407G_CubeMX
Kopieren Alle
Eclipse Projekt: STM32F407G_Eclipse
NACH STM32F407G_Eclipse\system\include\stm32f4xx


VON STM32F407G_CubeMX\Drivers\STM32F4xx_HAL_Driver\Src
'''Alles in folgenden Ordnern Löschen:'''
Kopieren Alle
STM32F407G_Eclipse\src
NACH STM32F407G_Eclipse\system\src\stm32f4xx
STM32F407G_Eclipse\include


Im Ordner STM32F407G_Eclipse\system\src\cmsis
'''Den kompletten Inhalt Kopieren und ggf. ersetzen!'''<br />
Löschen „system_stm32f4xx.c“ und „vectors_stm32f4xx.c“
VON  STM32F407G_CubeMX\Drivers\STM32F4xx_HAL_Driver\Inc
NACH STM32F407G_Eclipse\system\include\stm32f4xx


VON STM32F407G_CubeMX\Drivers\CMSIS\Device\ST\STM32F4xx\Source\Templates\
VON STM32F407G_CubeMX\Drivers\STM32F4xx_HAL_Driver\Src
Kopieren system_stm32f4xx.c
NACH STM32F407G_Eclipse\system\src\stm32f4xx
NACH STM32F407G_Eclipse\system\src\cmsis


VON STM32F407G_CubeMX\Drivers\CMSIS\Device\ST\STM32F4xx\Source\Templates\gcc\
VON STM32F407G_CubeMX\Drivers\CMSIS\Include
Kopieren startup_stm32f407xx.s
NACH STM32F407G_Eclipse\system\include\cmsis
NACH STM32F407G_Eclipse\system\src\cmsis


Im Ordner STM32F407G_Eclipse\system\include\cmsis
VON  STM32F407G_CubeMX\Src
Löschen „system_stm32f4xx.h“ und „stm32f4xx.h“
  NACH STM32F407G_Eclipse\src


VON STM32F407G_CubeMX\Drivers\CMSIS\Device\ST\STM32F4xx\Include
VON STM32F407G_CubeMX\Inc
Kopieren „system_stm32f4xx.h“, „stm32f4xx.h“ und „stm32f407xx.h“
NACH STM32F407G_Eclipse\include
NACH STM32F407G_Eclipse\system\include\cmsis


VON STM32F407G_CubeMX\Drivers\CMSIS\Include
'''Einzelne Dateien kopieren ggf. ersetzen:'''<br />
Kopieren Alle (ggf. ersetzen)
'''system_stm32f4xx.c'''
NACH STM32F407G_Eclipse\system\include\cmsis
VON STM32F407G_CubeMX\Drivers\CMSIS\Device\ST\STM32F4xx\Source\Templates\
NACH STM32F407G_Eclipse\system\src\cmsis


Im Ordner STM32F407G_Eclipse\src
'''startup_stm32f407xx.s'''
Löschen Alle
VON  STM32F407G_CubeMX\Drivers\CMSIS\Device\ST\STM32F4xx\Source\Templates\gcc\
NACH STM32F407G_Eclipse\system\src\cmsis


Im Ordner STM32F407G_Eclipse\include
'''system_stm32f4xx.h, stm32f4xx.h, stm32f407xx.h'''
Löschen Alle
VON  STM32F407G_CubeMX\Drivers\CMSIS\Device\ST\STM32F4xx\Include
NACH STM32F407G_Eclipse\system\include\cmsis


VON STM32F407G_CubeMX\Src
'''Einzelne Dateien Löschen:'''
Kopieren Alle
'''system_stm32f4xx.c, vectors_stm32f4xx.c'''
NACH STM32F407G_Eclipse\src
STM32F407G_Eclipse\system\src\cmsis


VON STM32F407G_CubeMX\Inc
'''system_stm32f4xx.h, stm32f4xx.h'''
Kopieren Alle
STM32F407G_Eclipse\system\include\cmsis
NACH STM32F407G_Eclipse\include


Unter Linux oder mit cygwin unter Windows kann folgender [https://gitlab.xnick.de/scripts/Linux-Integration-CubeMx-to-Eclipse Skript] zum automatisierten kopieren und löschen eingesetzt werden.
'''Hinweis: Der Skript ist noch nicht vollständig getestet!!'''


== Eclipse Projekt konfigurieren ==
== Eclipse Projekt konfigurieren ==
In Eclipse '''Project Explorer''' -> '''rechte Maustaste''' auf das '''Projekt''' und unter '''Refresh''' werden die Dateien aktualisiert.
Die Datei '''Project Explorer''' unter dem '''Projekt''' -> '''ldscripts''' -> '''mem.ld''' öffnen
und die Speicheradressen im Abschnitt '''MEMORY''' je nach Chip anpassen.


Rechte Maustaste auf das Project -> Refresh
MEMORY
Projekt -> ldscripts -> mem.ld
{
Anpassen der Speicheradressen
  FLASH (rx)  : ORIGIN = 0x08000000, LENGTH = 1024K
Flash: 0x08000000, LENGTH = 1024K
  RAM (xrw)    : ORIGIN = 0x20000000, LENGTH = 128K
RAM: 0x20000000, LENGTH = 128K
  CCMRAM (xrw) : ORIGIN = 0x10000000, LENGTH = 64K
CCMRAM: 0x10000000, LENGTH = 64K
}


[[Datei:stm32_eclipse_cubemx_ldscript.png|300px]]


Rechte Maustaste auf das Projekt -> Properties -> C/C++ Build -> Settings
'''Rechte Maustaste''' auf das '''Projekt''' -> '''Properties''' im Fenster '''C/C++ Build''' -> '''Settings''' erste Registerkarte '''Tool Settings''' -> '''Cross ARM C Compiler''' -> '''Preprocessor'''
Cross ARM C Compiler -> Preprocessor
im Abschnitt '''Defined symbols (-D)''' auf das '''Plus Symbol'''
Defined symbols (-D) -> auf das Plus Symbol


[[Datei:stm32_eclipse_cubemx_symbols.png|300px]]


Den Namen (STM32F407xx) der Hinzugefügten Datei „stm32f407xx.h“ eintragen
und je nach Chip das entsprechende Symbol einfügen; hier '''STM32F407xx''' aus der hinzugefügten Headerdatei „stm32f407xx.h".
 
[[Datei:stm32_eclipse_cubemx_symbols_enter.png|300px]]


== Probleme ==
== Probleme ==
Kompiliert erfolgreich aber „Warnings“ verschwinden nicht:
Das Projekt kompiliert erfolgreich aber die ''Warnings'' verschwinden nicht.<br />
Rechte Maustaste auf Projekt -> C/C++ General -> Paths and Symbols -> Includes
'''Rechte Maustaste''' auf '''Projekt''' -> '''C/C++ General''' -> '''Paths and Symbols''' in der Registerkarte  '''Includes''' auf '''Add…''' im Fenster auf '''Workspace…''' -> auf das Projekt, hier '''STM32F407G_Eclipse''' -> '''system''' -> '''include''' ->'''sytm32f4xx''' -> '''OK''' -> '''OK''' -> '''OK''' und erneut kompilieren.
Add… -> Workspace…
 
STM32F407G_Eclipse -> system -> include -> sytm32f4xx
[[Datei:stm32_eclipse_cubemx_problem_select_folder.png|300px]] [[Datei:stm32_eclipse_cubemx_problem_symbol.png|300px]]
 
Bei dem Fehler '''Error „multiple definition of …“'''<br />
Alle Headerdateien im Namen template im Projektordner unter '''system''' -> '''include''' -> '''stm32f4xx''' löschen.


Error „multiple definition of …“:
Es kann vorkommen, dass Eclipse den startup-script „startup_stm32f407xx.s“ nicht erkennt.<br />
Löschen von Header template Dateien
'''Rechte Maustaste''' auf '''startup_stm32f407xx.s''' -> '''Rename''' und das kleine '''s''' am Ende groß '''S''' schreiben -> '''OK'''.
z.B. system -> include -> stm32f4xx
löschen aller Headerdateien mit der Endung „template“


Eclipse erkennt startup-script „startup_stm32f407xx.s“ nicht:
[[Datei:stm32_eclipse_cubemx_problem_startup_script.png|300px]]
- Rechte Maustaste auf „startup_stm32f407xx.s“ -> Rename
- das „s“ am Ende groß schreiben -> OK


== Debuggen ==
== Debuggen ==

Aktuelle Version vom 15. März 2018, 16:08 Uhr

Dieses Tutorial zeigt wie die Hardwarekonfiguration von CubeMX in der Standard IDE Eclipse genutzt werden kann. Voraussetzung ist die Einrichtung von Eclipse nach dem Tutorial STM32 programmieren und debuggen mit der Standard IDE Eclipse. Das Discovery-Board: STM32F407G-DISC1 dient wieder als Beispiel.

CubeMX Projekt erstellen

Download und Installation von CubeMX. Im Anschluss wird CubeMX gestartet und entsprechende Einstellungen für sein Chip oder Board vorgenommen.
In CubeMX Project -> Settings… -> Project Namen vergeben, hier STM32F407G_CubeMX und den Speicherort Project Location bestimmen.
Unter Toolchain/IDE im Dropdown-Menü Other Toolchain (GPDSC) auswählen und mit OK bestätigen.

Stm32 eclipse cubemx project settings.png

Der Code wird unter Project –> Generate Code generiert. Entweder man geht direkt über die Option Open Folder oder navigiert manuell in das Projektverzeichnis.

Eclipse Projekt erstellen

Vor der Erstellung des Projektes müssen noch die GNU MCU Eclipse Windows Build Tools heruntergeladen und installiert werden
sowie in Eclipse Window -> Preferences -> C/C++ -> Build -> Global Tools Path unter Build tools folder: der Pfad bis zum bin Ordner von den zuvor installierten GNU MCU Eclipse Windows Build Tools eingetragen werden. Mit OK bestätigen.

Stm32 eclipse cubemx global tools path.png

In Eclipse File -> New -> C Project unter Project type: -> Executable -> Hello World ARM Cortex-M C/C++ Projekt -> Cross Arm GCC auswählen.

Stm32 eclipse cubemx project settings.png

Die entsprechenden Werte bei Prozessor core:, Clock (Hz):, Flash size (kB):, RAM size (kB), Use system calls: und Trace output: eintragen bzw. auswählen. Einen Projektnamen unter Project name: eintragen; hier STM32F407G_Eclipse. Weiter mit Next.

Stm32 eclipse cubemx c project prozessor settings.png Stm32 eclipse cubemx c project folders.png Stm32 eclipse cubemx toolchain.png

Danach Next -> Next -> Next -> Finish.

CubeMX Projekt in Eclipse Projekt integrieren

Jetzt müssen die mit CubeMX erstellten Bibliotheken (.h und .c Datein) in das Eclipse Projekt kopiert werden.

CubeMX Projekt:  STM32F407G_CubeMX
Eclipse Projekt: STM32F407G_Eclipse

Alles in folgenden Ordnern Löschen:

STM32F407G_Eclipse\src
STM32F407G_Eclipse\include

Den kompletten Inhalt Kopieren und ggf. ersetzen!

VON  STM32F407G_CubeMX\Drivers\STM32F4xx_HAL_Driver\Inc	
NACH STM32F407G_Eclipse\system\include\stm32f4xx
VON  STM32F407G_CubeMX\Drivers\STM32F4xx_HAL_Driver\Src
NACH STM32F407G_Eclipse\system\src\stm32f4xx
VON  STM32F407G_CubeMX\Drivers\CMSIS\Include
NACH STM32F407G_Eclipse\system\include\cmsis
VON  STM32F407G_CubeMX\Src
NACH STM32F407G_Eclipse\src
VON  STM32F407G_CubeMX\Inc
NACH STM32F407G_Eclipse\include

Einzelne Dateien kopieren ggf. ersetzen:

system_stm32f4xx.c 
VON  STM32F407G_CubeMX\Drivers\CMSIS\Device\ST\STM32F4xx\Source\Templates\
NACH STM32F407G_Eclipse\system\src\cmsis
startup_stm32f407xx.s 
VON  STM32F407G_CubeMX\Drivers\CMSIS\Device\ST\STM32F4xx\Source\Templates\gcc\
NACH STM32F407G_Eclipse\system\src\cmsis
system_stm32f4xx.h, stm32f4xx.h, stm32f407xx.h 
VON  STM32F407G_CubeMX\Drivers\CMSIS\Device\ST\STM32F4xx\Include
NACH STM32F407G_Eclipse\system\include\cmsis

Einzelne Dateien Löschen:

system_stm32f4xx.c, vectors_stm32f4xx.c
STM32F407G_Eclipse\system\src\cmsis
system_stm32f4xx.h, stm32f4xx.h
STM32F407G_Eclipse\system\include\cmsis

Unter Linux oder mit cygwin unter Windows kann folgender Skript zum automatisierten kopieren und löschen eingesetzt werden. Hinweis: Der Skript ist noch nicht vollständig getestet!!

Eclipse Projekt konfigurieren

In Eclipse Project Explorer -> rechte Maustaste auf das Projekt und unter Refresh werden die Dateien aktualisiert. Die Datei Project Explorer unter dem Projekt -> ldscripts -> mem.ld öffnen und die Speicheradressen im Abschnitt MEMORY je nach Chip anpassen.

MEMORY
{
  FLASH (rx)   : ORIGIN = 0x08000000, LENGTH = 1024K
  RAM (xrw)    : ORIGIN = 0x20000000, LENGTH = 128K
  CCMRAM (xrw) : ORIGIN = 0x10000000, LENGTH = 64K
}

Stm32 eclipse cubemx ldscript.png

Rechte Maustaste auf das Projekt -> Properties im Fenster C/C++ Build -> Settings erste Registerkarte Tool Settings -> Cross ARM C Compiler -> Preprocessor im Abschnitt Defined symbols (-D) auf das Plus Symbol

Stm32 eclipse cubemx symbols.png

und je nach Chip das entsprechende Symbol einfügen; hier STM32F407xx aus der hinzugefügten Headerdatei „stm32f407xx.h".

Stm32 eclipse cubemx symbols enter.png

Probleme

Das Projekt kompiliert erfolgreich aber die Warnings verschwinden nicht.
Rechte Maustaste auf Projekt -> C/C++ General -> Paths and Symbols in der Registerkarte Includes auf Add… im Fenster auf Workspace… -> auf das Projekt, hier STM32F407G_Eclipse -> system -> include ->sytm32f4xx -> OK -> OK -> OK und erneut kompilieren.

Stm32 eclipse cubemx problem select folder.png Stm32 eclipse cubemx problem symbol.png

Bei dem Fehler Error „multiple definition of …“
Alle Headerdateien im Namen template im Projektordner unter system -> include -> stm32f4xx löschen.

Es kann vorkommen, dass Eclipse den startup-script „startup_stm32f407xx.s“ nicht erkennt.
Rechte Maustaste auf startup_stm32f407xx.s -> Rename und das kleine s am Ende groß S schreiben -> OK.

Stm32 eclipse cubemx problem startup script.png

Debuggen

Siehe STM32 programmieren und debuggen mit der Standard IDE Eclipse.

Quellen

http://gnuarmeclipse.github.io/windows-build-tools/download/