Tools/Eclipse4STM32

(Difference between revisions)
Jump to: navigation, search
(Linux)
m (Eclipse)
Line 177: Line 177:
 
= Eclipse =
 
= Eclipse =
 
Tested with eclipse 4.3 (Kepler) and 4.4 (Luna), but at least works with Juno (4.2) and Indigo (4.1)
 
Tested with eclipse 4.3 (Kepler) and 4.4 (Luna), but at least works with Juno (4.2) and Indigo (4.1)
* Help -> Install new software ... -> add site: http://gnuarmeclipse.sourceforge.net/updates
+
* Help -> Install new software ... -> add site/repository: http://gnuarmeclipse.sourceforge.net/updates
 
* 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

Revision as of 18:29, 30 March 2015

Contents

The setup for windows is outdated, please go to setup for windows

Goal

Install a click-and-run IDE for stm32f4 based boards.

This HOWTO has been tested on:

* ubuntu 13.04 64 bits
* windows xp sp3
* windows 7 64 bits
* OS X 10.9

Using :

* HEIVs armebs4 (stm32_camera board).
* ST's stm32f4discovery board.

Feel free to contribute (by editing or by email).

The big picture

Here is an overview of the tools :

Eclipse stm32.png

Detailed description

Hardware:

* JTAG adapter
  * Connects physically the host computer to the target, usually from USB to JTAG.
  * Can be integrated into the target
* Target board
  * HEIVs ARMEBS4 integrates a "jtagusb" JTAG adapter
  * ST stm32f4discovery integrates a st-link v2 JTAG adapter

Software:

* Eclipse + CDT
  * IDE with c/c++ support
* make
  * The classical program builder
* gcc, ld, as, ...
  * GNU compiler, linker, assembler, ...
* gdb
  * GNU debugger
* openocd
  * Tranlate GDB orders into JTAG commands

Source files

* Application source file
  * Your application
* libheivs_stm32
  * Collection of source files from various vendors (ST, ARM, ..., HEIVs) to be used on stm32 boards

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

OS X

Alternatively you can just type in a terminal:

sudo bash -c 'curl -L https://launchpad.net/gcc-arm-embedded/4.8/4.8-2014-q2-update/+download/gcc-arm-none-eabi-4_8-2014q2-20140609-mac.tar.bz2 | bunzip2 | tar -zxf -'


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:
#
# \file /etc/udev/rules.d/10-jtag.rules
# \brief udev rules for drivers and ownership for ARMEBS4-like boards
# \author marc dot pignat at hevs dot ch
# \rev 1.0
#
# The ownership will be set to the 'plugdev' group
#
 
#
# AMREBS4-like (FTDI) integrated debugger and serial port
#
ATTRS{idProduct}=="3100", ATTRS{idVendor}=="08ee", MODE="666", GROUP="plugdev", RUN="/etc/udev/armebs4-serial.sh"
 
#
# 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"
 
#
# Amontec JTAGkey 2
#
ATTRS{idProduct}=="cff8", ATTRS{idVendor}=="0403", MODE="666", GROUP="plugdev"
  • create the file /etc/udev/armebs4-serial.sh whith the following content:
#!/bin/sh
#
# \file         /etc/udev/armebs4-serial.sh
# \brief        Load the ftdi sio (CDC) driver and add the ARMEBS4 VID+PID
# \author       marc dot pignat at hevs dot ch
# \rev          1.1
#
 
# Constants
ID="08ee 3100 ff"
SYS_FILE=/sys/bus/usb-serial/drivers/ftdi_sio/new_id 
 
# modrpobe can be called with already loaded driver
modprobe ftdi_sio
 
# add our ID only if necessary
if ! grep -q "$ID" $SYS_FILE; then
        echo  $ID > $SYS_FILE
fi
  • make the file /etc/udev/armebs4-serial.sh executable
    • sudo chmod +x /etc/udev/armebs4-serial.sh)
  • make sure you're in the plugdev and dialout groups
    • verify: id username

Windows

  • Download and install openocd-0.8.0
  • Unzip into c:\xdev\tools\openocd\0.8 (openocd-0.8.0.exe should be in C:\xdev\tools\openocd\0.8.0\bin)
  • rename openocd-0.8.0.exe into openocd.exe
  • For HEIVS Armebs4 download this driver : File:Armebs4 windows drivers.zip
    • login as administrator
    • unzip the file
    • connect the armebs4 (usb debug port)
        • windows will fail installing drivers that is normal
    • open the device manager
      • on every ARMEBS4 devices do ( == 4 times) :
        • right-click update driver software... > browse my computer > search in the previously unzipped folder > install this driver anyway
        • redo-it on the 3 "usb serial port" which seem to have problems in the device manager (don't ask me why there are only 3...)
      • run zadig-2.10.exe from zadig site
        • options > show all
        • select armebs4 v01 interface0
        • select Winusb
        • click Install driver
  • for the stm32f4 discovery
  • Download and run zadig from zadig site
    • There is a version for XP and another for newer windows.
    • Connect the board to the host machine
    • Run zadig
    • Show all devices (options->List all devices)
    • Select "stlink" from the list
    • Select "WinUSB" driver
    • Install it

OS X

The simplest way to install Open-OCD is to install it via Homebrew:

brew install open-ocd

Eclipse

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

  • Help -> Install new software ... -> add site/repository: http://gnuarmeclipse.sourceforge.net/updates
  • 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
    • Collaboration : Subversive SVN Team provider + subversive connector
    • GNU ARM C/C++ Cross Development Tools : GNU ARM OpenOCD Debugging Support
  • After setup and restart, subversive should ask to choose a connector, choose:
    • SVNkit (same version as the subversion installed on your system)

Openocd from eclipse

  • Run->external tool configuration...
  • Program -> new
 * Location:
   * linux : /usr/bin/openocd
   * windows : c:\xdev\tools\openocd/0.8.0/bin/openocd.exe
 * Working directory : empty
 * arguments :
   * ARMEBS4 : -f "${workspace_loc}/libheivs_stm32/armebs4.cfg"
   * stm32f4discovery : -f board/stm32f4discovery.cfg

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 :
      • BOARD_STM32_CAMERA or BOARD_STM32_CAMERA or BOARD_ARMEBS4 depending on your board
    • Includes :
      • "${workspace_loc:/${ProjName}/libheivs_stm32/include}"
      • "${workspace_loc:/${ProjName}}"
    • Optimization : -O2 for normal use and -O0 for laboratories
    • 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", "c" and "nosys"
      • 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 : Generic TCP/IP, localhost 3333
      • 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