Entorno desarrollo STM32 VL Discovery sobre Linux

PiGRRL-2

ST propone varios entornos de desarrollo para trabajar sobre su placa STM32 VL Discovery, pero en todos los casos sobre Windows. Vamos a ver aquí cómo montar el toolkit de desarrollo sobre Ubuntu 16.04.

  1. Instalación de última versión de GCC ARM Embedded siguiendo estas instrucciones. Básicamente consiste en bajar este archivo y descomprimirlo en /usr/local del siguiente modo:

    1
    2
    $ cd /usr/local
    $ sudo tar xjvf ~/Descargas/gcc-arm-none-eabi-5_4-2016q2-20160622-linux.tar.bz2
    
  2. Introducir en la variable PATH del sistema la ruta del directorio bin del compilador GCC ARM recién instalado incorporando al final del fichero ~/.profile:

    1
    PATH="/usr/local/gcc-arm-none-eabi-5_4-2016q2/bin:$PATH"
    
  3. Descargamos la STM32 Firmware Library de aquí.

  4. Descomprimimos y dejamos en la ruta ~/STM32F10x_StdPeriph_Lib_V3.5.0.

  5. Descargamos plantilla para los proyectos de código por ejemplo en ~/git/:

    1
    2
    $ cd ~/git
    $ git clone git://github.com/geoffreymbrown/STM32-Template.git
    
  6. La compilación del código se haría así:

    1
    2
    $ cd ~/git/STM32-Template/Demo
    $ make
    
  7. Modificamos el fichero ~/git/STM32-Template/Makefile.common ajustando las variables TOOLROOT y LIBROOT de la siguiente forma:

    1
    2
    TOOLROOT=/usr/local/gcc-arm-none-eabi-5_4-2016q2/bin
    LIBROOT=~/STM32F10x_StdPeriph_Lib_V3.5.0
    
  8. Instalamos el software que nos permitirá hacer uso del interfaz STLink para programar el MCU:

    1
    2
    $ cd ~/git
    $ git clone git://github.com/texane/stlink.git
    
  9. Instalamos una serie de paquetes necesarios:

    1
    $ sudo apt-get install pkg-config intltool build-essential cmake libusb-1.0 libgtk-3-dev
    
  10. Tal y como se explica en el README del proyecto descargado en el paso 7, el interfaz STLINKv1 que utiliza la STM32VLDISCOVERY, tiene ciertos problemas que para evitar hay que reconfigurar el módulo usb-storage. Para ello ejecutar lo siguiente al principio de una sesión en la que se quiera trabajar con él:

    1
    $ sudo modprobe -r usb-storage && sudo modprobe usb-storage quirks=0483:3744:i
    
  11. Si se quiere hacer permanente el cambio en su lugar, crear el fichero /etc/modprobe.d/usb-storage.conf con el siguiente contenido:

    1
    2
    # stlink/v1 ignore mass storage
    options usb-storage quirks=0483:3744:i
    
  12. Compilamos:

    1
    2
    3
    4
    5
    6
    7
    $ cd ~/git/stlink
    $ ./autogen.sh
    $ ./configure --with-gtk-gui
    $ make
    $ mkdir build && cd build
    $ cmake -DCMAKE_BUILD_TYPE=Debug ..
    $ make
    
  13. Conectar la placa por USB al ordenador.

  14. Arrancamos gdbserver:

    1
    2
    $ cd ~/git/stlink/build
    $ sudo ./st-util -1
    
  15. Conectamos con él desde el directorio donde esté el binario que queremos depurar o ejecutar:

    1
    2
    3
    4
    5
    $ cd ~/git/STM32-Template/Demo
    $ arm-none-eabi-gdb Demo.elf
    (gdb) target extended-remote localhost:4242
    (gdb) load
    (gdb) quit