Tools/Eclipse4STM32
From UIT
|
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 :
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 arm-none-eabi-gdb
Linux (generic)
- Download gcc-arm-none-eabi-4_7-2013q2-20130614-linux.tar.bz2
- Uncompress into /opt (arm-none-eabi-ld should be in /opt/xdev/gcc-arm-none-eabi-4_7-2013q2/bin/)
Windows
- download gcc-arm-none-eabi-4_7-2013q3-20130916-win32.zip (arm-none-eabi-gcc.exe should be in C:\xdev\tools\gcc-arm\4.7_2013q3\bin)
- download gnuwin-make-3.81.zip
- download gnuwin-make-dep.zip
- unzip in c:\xdev\tools\gnuwin\make\3.81 (make.exe and the .dll) should be in c:\xdev\tools\gnuwin\make\3.81\bin)
- add make.exe to your PATH.
OS X
- download gcc-arm-none-eabi-4_8-2014q2-20140609-mac.tar.bz2, extract it and copy it to /opt
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
anddialout
groups- verify:
id username
- verify:
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
- on every ARMEBS4 devices do ( == 4 times) :
- 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 :
(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 uncheckHide items that are already installed
.- Collaboration
- 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"
- Symbols :
- 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])
- -Map=linker.map
- --gc-sections
- General :
- 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"
- General:
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
- 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.