miércoles, 6 de diciembre de 2017

Eclipse + STM32F4 Discovery, primeros pasos en Linux

Introducción

En esta entrada del blog crearemos el entorno para la programación de nuestra STM32F407 Discovery en Linux, específicamente Debian.

La placa que se ha utilizado para este desarrollo es la siguiente:


No obstante seguramente para las variantes de esta, también será válido.

Esta placa además de poseer el microcontrolador STM32F407 (target), también posee el stlink-v2-1, el cual se utiliza para flashear nuestro "target"; pudiendo a su vez programar otro microcontrolador fuera de la placa demo. (para mas info buscar sobre las specs de la placa discovery)

Comenzando

Antes que nada quisiera aclarar que si bien son varios pasos, una vez que se realizan no son tan complejos ni mucho menos. Además nos queda un entorno de trabajo free, sin limitaciones de ningún tipo, con capacidades de Debug y para toda la familia de ST (pronto crearé una entrada para la Blue-pill que posee un STM32F103).

Comenzamos descargando el ToolChain de aquí:
https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads



Seleccionamos acorde a nuestra PC.

Una vez descargado descomprimimos en una ruta de nuestra preferencia. Recomiendo un directorio en donde alojar los toolchains para las distintas arquitecturas que testearemos (anotemos o recordemos la ruta donde lo descomprimimos).

Luego descargamos Eclipse del sitio oficial:
https://www.eclipse.org/



Nuevamente, acorde a la PC de desarrollo.

Descomprimimos el archivo descargado en la ruta de nuestra preferencia.

Nos vamos a la ruta seleccionada y ejecutamos el archivo "eclipse-inst":



Con lo cual se lanzará el instalador, y cuando nos aparezca la siguiente ventana seleccionamos C/C++:



Seleccionamos donde instalar, (utilicé la misma ruta donde descomprimí) y esperamos a que finalice la descarga de los archivos necesarios.

El instalador nos consultará si deseamos lanzarlo o simplemente nos situamos en la ruta de instalación y ejecutamos el archivo "eclipse"





Al iniciar nos pedirá el directorio de trabajo, recomiendo que creen un directorio fuera de la instalación de eclipse.

Normalmente poseo una partición de disco dedicada a mis "source code", en ella creo un directorio con nombre significativo para el "workbench", y la selecciono.


Eclipse Iniciandose.



Una vez iniciado procedemos a instalar el plug-in para microcontroladores de eclipse.
Para ello vamos a Help->Install new software... , y nos aparece la siguiente ventana:


Clickeamos en Add... , y completamos los campos de la siguiente manera:


Para el copy/paste ;)...

Name: GNU MCU Eclipse Plug-ins
Location: http://gnu-mcu-eclipse.netlify.com/v4-neon-updates

Una vez que presionamos OK, buscará en la dirección ingresada, nuevo software.

Nos presentará la siguiente pantalla y seleccionamos todo.



Next...

Nos pedirá autorización y que estemos de acuerdo con la licencia...


Finish... y esperamos.

Una advertencia mas...


Install anyway...

Y restart...


Restart Now.

Si todo fue bien, ahora podremos hacer, "File->New->C Project" y nos aparecerá la siguiente pantalla...


Seleccionamos "STM32F4xx C/C++ Project" que es el microcontrolador que posee nuestra placa, y damos nombre al nuevo proyecto en este caso "testDiscover1" y luego Next, nos aparecerá la siguiente pantalla:




Si dan una ojeada notarán que crearán un proyecto "template" Blinky; el cual destellará uno de los led's. Por el momento dejamos todo como está.

Next..., Next..., Next... y aparecerá la siguiente pantalla:


Aquí indicamos que Toolchan utilizaremos, por lo que primero seleccionaremos en "Toolchain name = Custom (arm-none-eabi-gcc)" y luego escribimos (pegamos) la ruta donde descomprimimos el toolchain incluyendo el directorio "bin", en "Toolchain path", como se ve en la imagen.

Luego presionamos Finish. (dependiendo de la capacidad de la CPU, este proceso toma su tiempo debido a la indexación que realiza Eclipse, el progreso se suele mostrar en el margen inferior derecho).

Una vez finalizado podemos darle una ojeada al main.c


Con los pasos anteriores normalmente se crea un proyecto compatible con nuestra Discovery, por lo que no hay que modificar nada,... por el momento ;)

Ahora es momento de compilar "Ctrl+B" para verificar que todo está funcionando correctamente.

En la parte inferior, en la pestaña "console" se puede corroborar la correcta compilación del proyecto.


Descarga del binario en la Discovery.

Bien, con los pasos anteriores tenemos el entorno de desarrollo y el compilador cruzado funcionando, ahora necesitamos de una vía para alojar el binario resultante, en nuestra placa de desarrollo.

Para ello usaremos OpenOCD, que a breve descripción es un debugger abierto y gratuito. 


Existen varias maneras de utilizar este fantástico programa:

*- Instalarlo desde los repositorios oficiales de nuestra plataforma. (googlear como hacerlo)

*- Descargar un binario pre-compilado para nuestra plataforma y utilizar un path absoluto. (esta es la utilizada en esta entrada del blog)

*- Descargar el código fuente y compilarlo nosotros mismo y decidir si lo instalamos o si utilizamos un path absoluto.

 La última opción es mi favorita ya que compilo y siempre dispongo de la versión actualizada del programa. Sin embargo, en ocasiones, me fue necesario conservar una versión anterior, por lo que, actualmente compilo el código fuente, pero no lo instalo, y hago referencia dentro de eclipse al path absoluto. Modificando ese path si algo no se comporta como debiera, y siempre puedo volver a la versión anterior.

  No obstante la compilación de código fuente de programas en la plataforma de desarrollo escapa de esta entrada, por lo que, en esta ocasión, descargaremos una versión compilada y mantenida por usuarios de OpenOcd, para Debian y Windows. Actualmente estoy utilizando esta y para el modesto uso que le doy funciona correctamente. 

 Si ustedes prefieren instalar el programa desde repositorios es totalmente válido, pero no es el método explicado en esta entrada.





En mi caso descargo la versión para Debian 64 bit. 

Lo descomprimimos en una ruta de nuestro agrado.

Luego volvemos a eclipse, para configurar el debugger.

Ingresamos a Run->Debug Configurations... y nos aparecerá la siguiente pantalla.




Luego seleccionamos la opción "GDB OpenOCD Debugging" y clickeamos en el botón "New Launch Configuration", quedando de la siguiente manera.


Ahora seleccionamos la pestaña "Debugger", y completamos los campos como muestra la imagen. (recuerden colocar la ruta absoluta correcta donde ustedes descomprimieron el OpenOCD.)


Dentro de la imagen anterior hay una campo muy importante y es el que se titula "Config Options", allí le decimos a eclipse con que opciones debe lanzar a OpenOCD, en esta caso la opción que le pasamos es la placa que estamos utilizando.

Con respecto a esta opción tuve un inconveniente menor, pero inconveniente en fin.

Al intentar conectar la consola de eclipse me devolvía el siguiente error:

Started by GNU MCU Eclipse
Info : Listening on port 6666 for tcl connections
Info : Listening on port 4444 for telnet connections
Info : Unable to match requested speed 2000 kHz, using 1800 kHz
Info : Unable to match requested speed 2000 kHz, using 1800 kHz
Info : clock speed 1800 kHz
Error: open failed
in procedure 'init'
in procedure 'ocd_bouncer'


Resulta ser que en el archivo "stm32f4discovery.cfg" está definido la versión del stlink-v2 y la placa que poseo tiene el stlink-v2-1, así que si les aparece el error anterior, solo deberán abrir y modificar el archivo con su editor favorito:

$ nano scripts/board/stm32f4discovery.cfg

Buscan la línea que dice:

source [find interface/stlink-v2.cfg]

y modificarla a

source [find interface/stlink-v2-1.cfg]

Una vez realizado lo anterior deberían poder presionar el botón "Debug" y automáticamente se conectarán a su placa por medio de OpenOCD, a la vez se abrirá la interfaz de Debug.

Presionando el botón "resume" o F8 debería correr el programa en su flamante Discovery, y podrán ver como el led verde comienza a parpadear dandonos la bienvenida.



Todos estos pasos solo se hacen una vez, ya que luego pueden volver al entorno de programación y desde allí podrán correr el Debug o Run.

Además si crean un nuevo proyecto todo lo anterior queda almacenado por default en eclipse.

Cerrando

Sería interesante que en estos primeros contactos con la discovery, en vez de que parpadee el led verde parpadee el azul, no?.

Pistas:
1:


2:
  include/BlinkLed.h

Final

Para escribir esta entrada, partí de una instalación limpia de eclipse+plug-in+toolchain+openocd, todo en un directorio especial para la ocasión e intenté documentar lo mejor posible los pasos.

Espero que sea de su agrado.

En breve intentaré hacer lo mismo en Window$, y documentarlo de la misma manera, seguro será un poco más fácil, pero dudo que sea divertido y a la vez customizable, como lo es en linux.

T'T.



No hay comentarios.:

Publicar un comentario