From UIT
Jump to: navigation, search


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


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


* 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


* 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


The toolchain we use comes from 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 arm-none-eabi-gdb

Linux (generic)



Alternatively you can just type in a terminal:

sudo bash -c 'curl -L | bunzip2 | tar -zxf -'



  • 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/"
# 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/ whith the following content:
# \file         /etc/udev/
# \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"
# 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
  • make the file /etc/udev/ executable
    • sudo chmod +x /etc/udev/
  • make sure you're in the plugdev and dialout groups
    • verify: id username


  • 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
    • 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


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

brew install open-ocd


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:
  • Help -> Install new software ... -> work with "-- All available sites --" and add at least :
    (Some of the items below might already be installed, e.g. if you installed Eclipse for C/C++. To make them appear in the list uncheck Hide items that are already installed.
    Subversive SVN Team provider + subversive connector
    GNU ARM C/C++ Cross Development Tools
    GNU ARM OpenOCD Debugging
    Mobile and Device Development
    C/C++ GCC Cross Compiler Support
    C/C++ GDB Hardware Debugging
    Programming Languages
    C/C++ Development Tools
  • 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 Tools->External Tools 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 -> Tool 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 -> Tool 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 -> Tool 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])
        • --gc-sections
  • C/C++ Build > Settings -> -Tool 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