Tools/Eclipse4STM32

(Difference between revisions)
Jump to: navigation, search
Line 50: Line 50:
 
Tested with eclipse 4.3 (Kepler), but at least works with Juno (4.2) and Indigo (4.1)
 
Tested with eclipse 4.3 (Kepler), but at least works with Juno (4.2) and Indigo (4.1)
 
* Help -> Install new software ... -> work with "-- All available sites --" and add at least :
 
* Help -> Install new software ... -> work with "-- All available sites --" and add at least :
  * Programming Languages : C/C++ development Tools
+
** Programming Languages : C/C++ development Tools
  * Mobile and Device Development : C/C++ Hardware Debugging
+
** Mobile and Device Development : C/C++ Hardware Debugging
  * Mobile and Device Development : C/C++ Cross compiler support
+
** Mobile and Device Development : C/C++ Cross compiler support
  * Subversive SVN Team provider + subversive connector
+
** Subversive SVN Team provider + subversive connector
 
* After setup and restart, subversive should ask to choose a connector, choose:
 
* After setup and restart, subversive should ask to choose a connector, choose:
  * SVNkit 1.7.9
+
** SVNkit 1.7.9
  
 
= Project Setup =
 
= Project Setup =
 
In the project properties make sure
 
In the project properties make sure
* C/C++ build > settings -> Settings tab : "Cross settings" :
+
* C/C++ build > settings -> Settings tab : "Cross settings" :
    * prefix : "arm-none-eabi-"
+
** prefix : "arm-none-eabi-"
    * path (windows) : "C:\xdev\tools\gcc-arm\4.7_2013q2\bin"
+
** path (windows) : "C:\xdev\tools\gcc-arm\4.7_2013q2\bin"
    * path (Linux generic) : "/opt/xdev/gcc-arm-none-eabi-4_7-2013q2/bin/"
+
** path (Linux generic) : "/opt/xdev/gcc-arm-none-eabi-4_7-2013q2/bin/"
    * path (Unbutu based) : arm-none-eabi- tools are in the PATH.
+
** path (Unbutu based) : arm-none-eabi- tools are in the PATH.
* C/C++ build > settings -> Settings tab : "Cross GCC compiler" :
+
* C/C++ build > settings -> Settings tab : "Cross GCC compiler" :
  * Symbols :
+
** Symbols :
    * STM32F4XX=1
+
*** STM32F4XX=1
    * ARM_MATH_CM4=1
+
*** ARM_MATH_CM4=1
    * __FPU_PRESENT=1
+
*** __FPU_PRESENT=1
    * USE_STM324xG_EVAL=1
+
*** USE_STM324xG_EVAL=1
  * Includes :
+
** Includes :
    * "${workspace_loc:/${ProjName}/libheivs_stm32/include}"
+
*** "${workspace_loc:/${ProjName}/libheivs_stm32/include}"
    * "${workspace_loc:/${ProjName}}"
+
*** "${workspace_loc:/${ProjName}}"
  * Debugging:  
+
** Debugging:  
    * Maximum -g3
+
*** Maximum -g3
  * Warnings:
+
*** Warnings:
    * -Wall
+
**** -Wall
  * Miscellaneous
+
*** Miscellaneous
    * "-c -fmessage-length=0 -mthumb -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16"
+
**** "-c -fmessage-length=0 -mthumb -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16"
* C/C++ build > settings -> Settings tab : "Cross GCC linker" :
+
** C/C++ build > settings -> Settings tab : "Cross GCC linker" :
  * General :
+
*** General :
    * No shared libraries (-static)
+
**** No shared libraries (-static)
  * Libraries
+
*** Libraries
    * m
+
**** m
  * Miscellaneous
+
*** Miscellaneous
    * Linker flags : "-T "${workspace_loc:/${ProjName}/libheivs_stm32/stm32f407ig_flash.ld}" -mthumb -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16"
+
**** Linker flags : "-T "${workspace_loc:/${ProjName}/libheivs_stm32/stm32f407ig_flash.ld}" -mthumb -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16"
    * Other options (-Xlinker [option])
+
**** Other options (-Xlinker [option])
      * -Map=linker.map
+
**** -Map=linker.map
      * --gc-sections
+
**** --gc-sections
* C/C++ build > settings -> Settings tab : "Cross GCC assembler" :
+
** C/C++ build > settings -> Settings tab : "Cross GCC assembler" :
  * General:
+
*** General:
    * Assembler flags : "-mthumb -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -g3"
+
**** Assembler flags : "-mthumb -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -g3"
= Debug settings =
+
** Debug settings
* Debug configuration -> GDB Hardware debugging
+
*** Debug configuration -> GDB Hardware debugging
* At the bottom of the page, make sure the project uses "Standard Hardware Debugging Laucher" (DSF won't work).
+
**** At the bottom of the page, make sure the project uses "Standard Hardware Debugging Laucher" (DSF won't work).
* Debugger tab
+
*** Debugger tab
  * GDB command (Ubuntu based) : "arm-none-eabi-gdb"
+
**** GDB command (Ubuntu based) : "arm-none-eabi-gdb"
  * GDB command (Linux generic) : "/opt/xdev/gcc-arm-none-eabi-4_7-2013q2/bin/arm-none-eabi-gdb"
+
**** GDB command (Linux generic) : "/opt/xdev/gcc-arm-none-eabi-4_7-2013q2/bin/arm-none-eabi-gdb"
  * GDB command (Windows) : "C:\xdev\tools\gcc-arm\4.7_2013q2\bin\arm-none-eabi-gdb.exe"
+
**** GDB command (Windows) : "C:\xdev\tools\gcc-arm\4.7_2013q2\bin\arm-none-eabi-gdb.exe"
  * Use remote target : checked
+
**** Use remote target : checked
  * JTAG Device (via pipe)
+
**** JTAG Device (via pipe)
  * GDB Connection string (stlink): "| openocd -f interface/stlink-v2.cfg -f target/stm32f4x_stlink.cfg -c "gdb_port pipe""
+
**** GDB Connection string (stlink): "| openocd -f interface/stlink-v2.cfg -f target/stm32f4x_stlink.cfg -c "gdb_port pipe""
  * GDB Connection string (jtagkey2): "| openocd -f interface/jtagkey2.cfg -f board/stm3241g_eval.cfg -c "gdb_port pipe""
+
**** GDB Connection string (jtagkey2): "| openocd -f interface/jtagkey2.cfg -f board/stm3241g_eval.cfg -c "gdb_port pipe""
* Startup tab
+
*** Startup tab
 
   [[File:eclipse-gdb_hardware_debugging-startup.png]]
 
   [[File:eclipse-gdb_hardware_debugging-startup.png]]
  * disable Reset and delay (this command is not supported by openocd)
+
**** disable Reset and delay (this command is not supported by openocd)
  * disable halt
+
**** disable halt
  * commands (This will make sure the core is in a known state)
+
**** commands (This will make sure the core is in a known state)
    monitor reset halt
+
***** monitor reset halt
    monitor flash erase_sector 0 0 0
+
***** monitor flash erase_sector 0 0 0
    monitor reset halt
+
***** monitor reset halt
  * Load image : use project binary (this will load the software to flash)
+
**** Load image : use project binary (this will load the software to flash)
  * Load symbols : use project binary (no debugging without symbols)
+
**** Load symbols : use project binary (no debugging without symbols)
  * Set breakpoint at main
+
**** Set breakpoint at main
  * Run commands ( 1) reset the cpu -> reload PC 2) enable clock when in WFI 3) run to main
+
**** Run commands ( 1) reset the cpu -> reload PC 2) enable clock when in WFI 3) run to main
    monitor reset halt
+
***** monitor reset halt
    set *(uint32_t *)0xe0042004 = 0x00000001
+
***** set *(uint32_t *)0xe0042004 = 0x00000001
    continue
+
***** continue
* Common tab
+
*** Common tab
 
   Save as shared file, so the debugging parameters will be saved into the project.
 
   Save as shared file, so the debugging parameters will be saved into the project.

Revision as of 14:58, 19 July 2013

Contents

Toolchain

The toolchain we use comes from https://launchpad.net/gcc-arm-embedded. This is a toolchain maintained by ARM employees and is available for Linux, Windows and OS X.

Linux (Ubuntu based)

There is a PPA for gcc-arm-embedded.

sudo add-apt-repository ppa:terry.guo/gcc-arm-embedded
sudo apt-get update
sudo apt-get install build-essential gcc-arm-none-eabi

Linux (generic)

Windows

openocd

Linux

  • install openocd (should be in the repository of your favorite distribution)
  • create the file /etc/udev/rules.d/10-jtag.rules whith the following content:
# AMREBS4-like (ftdi) integrated debugger
ATTRS{idProduct}=="3100", ATTRS{idVendor}=="08ee", MODE="666", GROUP="plugdev"
 
# Amontec JTAGkey 2
ATTRS{idProduct}=="cff8", ATTRS{idVendor}=="0403", MODE="666", GROUP="plugdev"
 
# STM32F4 discovery board (stlink-v2 and DFU)
ATTRS{idProduct}=="3748", ATTRS{idVendor}=="0483", MODE="666", GROUP="plugdev"
ATTRS{idProduct}=="df11", ATTRS{idVendor}=="0483", MODE="666", GROUP="plugdev"
  • make sure you're in the plugdev group

Windows

  • Download and install openocd-0.7.0
  • Unzip into c:\xdev\tools\openocd\0.7 (openocd-0.7.0.exe should be in C:\xdev\tools\openocd\0.7.0\bin)
  • rename openocd-0.7.0.exe into openocd.exe
  • Download and install the ST-LINK/V2 USB driver from here (STSW-LINK003)
    • Optional: Test the connection with the STM32 ST-LINK Utility V2
  • For the other boards FIXME

Eclipse

Tested with eclipse 4.3 (Kepler), but at least works with Juno (4.2) and Indigo (4.1)

  • Help -> Install new software ... -> work with "-- All available sites --" and add at least :
    • Programming Languages : C/C++ development Tools
    • Mobile and Device Development : C/C++ Hardware Debugging
    • Mobile and Device Development : C/C++ Cross compiler support
    • Subversive SVN Team provider + subversive connector
  • After setup and restart, subversive should ask to choose a connector, choose:
    • SVNkit 1.7.9

Project Setup

In the project properties make sure

  • C/C++ build > settings -> Settings tab : "Cross settings" :
    • prefix : "arm-none-eabi-"
    • path (windows) : "C:\xdev\tools\gcc-arm\4.7_2013q2\bin"
    • path (Linux generic) : "/opt/xdev/gcc-arm-none-eabi-4_7-2013q2/bin/"
    • path (Unbutu based) : arm-none-eabi- tools are in the PATH.
  • C/C++ build > settings -> Settings tab : "Cross GCC compiler" :
    • Symbols :
      • STM32F4XX=1
      • ARM_MATH_CM4=1
      • __FPU_PRESENT=1
      • USE_STM324xG_EVAL=1
    • Includes :
      • "${workspace_loc:/${ProjName}/libheivs_stm32/include}"
      • "${workspace_loc:/${ProjName}}"
    • Debugging:
      • Maximum -g3
      • Warnings:
        • -Wall
      • Miscellaneous
        • "-c -fmessage-length=0 -mthumb -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16"
    • C/C++ build > settings -> Settings tab : "Cross GCC linker" :
      • General :
        • No shared libraries (-static)
      • Libraries
        • m
      • Miscellaneous
        • Linker flags : "-T "${workspace_loc:/${ProjName}/libheivs_stm32/stm32f407ig_flash.ld}" -mthumb -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16"
        • Other options (-Xlinker [option])
        • -Map=linker.map
        • --gc-sections
    • C/C++ build > settings -> Settings tab : "Cross GCC assembler" :
      • General:
        • Assembler flags : "-mthumb -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -g3"
    • Debug settings
      • Debug configuration -> GDB Hardware debugging
        • At the bottom of the page, make sure the project uses "Standard Hardware Debugging Laucher" (DSF won't work).
      • Debugger tab
        • GDB command (Ubuntu based) : "arm-none-eabi-gdb"
        • GDB command (Linux generic) : "/opt/xdev/gcc-arm-none-eabi-4_7-2013q2/bin/arm-none-eabi-gdb"
        • GDB command (Windows) : "C:\xdev\tools\gcc-arm\4.7_2013q2\bin\arm-none-eabi-gdb.exe"
        • Use remote target : checked
        • JTAG Device (via pipe)
        • GDB Connection string (stlink): "| openocd -f interface/stlink-v2.cfg -f target/stm32f4x_stlink.cfg -c "gdb_port pipe""
        • GDB Connection string (jtagkey2): "| openocd -f interface/jtagkey2.cfg -f board/stm3241g_eval.cfg -c "gdb_port pipe""
      • Startup tab
  Eclipse-gdb hardware debugging-startup.png
        • disable Reset and delay (this command is not supported by openocd)
        • disable halt
        • commands (This will make sure the core is in a known state)
          • monitor reset halt
          • monitor flash erase_sector 0 0 0
          • monitor reset halt
        • Load image : use project binary (this will load the software to flash)
        • Load symbols : use project binary (no debugging without symbols)
        • Set breakpoint at main
        • Run commands ( 1) reset the cpu -> reload PC 2) enable clock when in WFI 3) run to main
          • monitor reset halt
          • set *(uint32_t *)0xe0042004 = 0x00000001
          • continue
      • Common tab
  Save as shared file, so the debugging parameters will be saved into the project.
Personal tools
Namespaces
Variants
Actions
Navigation
Browse
Toolbox