Configuración de una cadena de herramientas GCC / Eclipse para STM32Nucleo – Parte II

Configuración de una cadena de herramientas GCC / Eclipse para STM32Nucleo - Parte II


En la primera parte de esta serie, hemos configurado con éxito una cadena de herramientas mínima pero que funciona para desarrollar aplicaciones para la familia STM32 (nos hemos centrado especialmente en la placa de desarrollo STM32Nucleo). Hemos basado la cadena de herramientas en el IDE de Eclipse y el compilador cruzado GCC para la plataforma ARM Cortex. También hemos creado un proyecto de prueba (un simple LED parpadeante) y lo subimos a nuestro Nucleo utilizando la utilidad ST-Link.

Esto podría ser suficiente para desarrollar todo tipo de aplicaciones basadas en la familia STM32. Usando el puerto COM virtual integrado de Nucleo, podríamos imprimir mensajes para depurar el firmware (esta es la forma común de depurar los bocetos de Arduino). Sin embargo, podemos usar solo algunas otras herramientas para realizar una depuración en vivo en nuestro Nucleo, ubicando puntos de interrupción, haciendo depuración paso a paso, accediendo a registros internos y a la memoria.

En esta publicación nos centraremos en cómo usar GDB para realizar la depuración paso a paso. Lo configuraremos como cliente de otra herramienta, que puede conectar el Nucleo a través de la interfaz ST-Link: OpenOCD.

Instalar OpenOCD

OpenOCD  es un proyecto realmente desafiante iniciado por Dominic Rath. OpenOCD tiene el objetivo de desarrollar un tipo de depurador en chip universal capaz de interconectar las plataformas MCU más comunes en el mercado. OpenOCD está diseñado para interactuar con los procesadores ARM-Cortex-M y proporciona controladores para conectarse a la interfaz de depuración ST-Link. OpenOCD se distribuye como software de código abierto. Freddie Chopin ha creado la versión precompilada de esta herramienta para Windows.

Antes de comenzar a instalar OpenOCD, me gustaría decir algunas palabras acerca de cómo funciona OpenOCD, especialmente cuando se utiliza para depurar MCU STM32. Creo que un conocimiento de cómo funciona el proceso de depuración, incluso parcial, puede ser realmente útil para comprender mejor cómo personalizar el entorno de depuración.

Architettura OpenOCD su ST-Link
Interacción OpenOCD y ST-Link

Para actualizar una MCU (y, finalmente, para depurarla), generalmente necesitamos una pieza externa de hardware llamada programador  (a veces, también se les llama dongle , programador en chip , etc.). Cada fabricante de MCU produce al menos un tipo de programador para una familia de MCU determinada. Para la plataforma STM32, ST proporciona una familia de programadores llamada ST-Link. La placa Nucleo ya integra el programador ST-Link (e incluso es desmontable de la placa principal y puede usarse como programador independiente). Por lo tanto, no necesitamos ninguna herramienta de hardware externa para actualizar nuestra Nucleo MCU.
OpenOCD tiene todos los controladores necesarios para interactuar con el programador de ST-Link y está configurado usando algún archivo de scripts. Estos archivos contienen comandos que le indican a OpenOCD que se conecte a la interfaz ST-Link de nuestro Nucleo usando el puerto USB y ponga a OpenOCD en “modo servidor” en el puerto 3333 TCP. GDB utilizará este puerto para intercambiar comandos con OpenOCD. Además, OpenOCD usa el puerto TCP 4444 adicional para aceptar los comandos del usuario a través de una sesión telnet. Gracias a estas conexiones, se puede dar instrucciones a OpenOCD para que cargue el firmware en la MCU de destino, para configurar los puntos de interrupción, para inspeccionar el estado de la memoria, etc. Sin embargo, este trabajo se puede automatizar y simplificar utilizando Eclipse y los complementos que instalamos en la primera parte de esta serie.

LEER MAS  Modelos Digi-Key EDA / CAD, pararrayos coaxiales de rayos Pasternack

Instalemos OpenOCD. Primero tenemos que descargar la última versión de OpenOCD para Windows desde aquí . Sugiero usar al menos una versión 0.8 o posterior, ya que experimenté varios problemas al usar Nucleo con OpenOCD 0.7. El archivo de descarga es un archivo ZIP comprimido usando la utilidad 7-zip . Extraiga el contenido del archivo dentro del   directorio C: \ STM32Toolchain . A continuación, cambie el nombre del directorio OpenOCD de openocd-0.8.0 a simplemente openocd . Luego vaya al   directorio C: \ STM32Toolchain \ openocd \ bin y cambie el nombre del archivo openocd-0.8.0.exe  en openocd.exe .Esta operación no es estrictamente necesaria. Sin embargo, esto nos permitirá actualizar OpenOCD cuando haya una nueva versión disponible sin cambiar las configuraciones de Eclipse.

Configurando Eclipse

Una vez que se instale OpenOCD, debemos configurar correctamente el IDE de Eclipse para que funcione con GDB y OpenOCD. Hay dos formas de configurar Eclipse y OpenOCD:

  • Método 1 : el primer método consiste en configurar Eclipse para que inicie automáticamente primero OpenOCD y luego GDB en cada sesión de depuración.
  • Método 2 : el segundo método consiste en configurar OpenOCD como una herramienta externa que se inicia una vez, y luego configurar GDB para conectarse a OpenOCD a través del puerto 3333 TCP.

Los complementos que instalamos en la primera parte de esta serie nos permiten utilizar ambos métodos de configuración. Sin embargo, experimenté algunos problemas con el primer método. Desafortunadamente, a menudo sucede que OpenOCD no se puede conectar al depurador ST-Link cuando se inicia / detiene repetidamente. La única solución a este problema es quitar la placa Nucleo del puerto USB y volver a conectarla. Leí que es un problema relacionado con el controlador provisto por ST. Sin embargo, me pregunto por qué esto no sucede con la utilidad ST-Link. Creo que este es probablemente un problema relacionado con cómo interactúan los controladores OpenOCD y ST-Link. Entonces, la mejor solución es iniciar OpenOCD una vez, y usar GDB para conectarse con el puerto 3333 TCP.

LEER MAS  Cree aplicaciones STM32 con Eclipse, GCC y STM32Cube

En el resto de esta publicación, asumo que ya ha abierto y compilado el proyecto test1 realizado en la primera publicación . Haga clic en el ícono de configuración de “Herramientas externas” y luego haga clic en ” Configuraciones de herramientas externas … “, como se muestra en la siguiente imagen.

Captura de pantalla 2014-12-25 en 10.13.41

Ahora, haga clic en el icono ” Nueva configuración de lanzamiento “, como se muestra a continuación

2014-12-25 10_22_40-Configuraciones de herramientas externas

La ventana de configuración muestra. Rellene los campos de configuración como se muestra en la siguiente imagen: 

2014-12-25 10_39_45-Configuraciones de herramientas externas

Este es el significado de cada campo.

Ubicación : es la ruta absoluta donde hemos instalado OpenOCD, es decir  C: \ STM32Toolchain \ openocd \ bin \ openocd.exe . 
Directorio de trabajo : es el directorio de trabajo del proceso OpenOCD (es decir, el cwd en los sistemas operativos UNIX). Esta ruta se utiliza como base para las rutas en los scripts de OpenOCD y los archivos de configuración. 
Argumentos : son los argumentos que se pasan a la línea de comandos de OpenOCD. En nuestro caso, tenemos que pasar el script de configuración para nuestro tablero Nucleo (mi tablero es el STM32Nucleo-F401RE; si tiene un Nucleo diferente, verifique el   directorio de configuración C: \ STM32Toolchain \ openocd \ scripts \ board ).

¿Qué  contiene exactamente el archivo st_nucleo_f401re.cfg ? Es un script de configuración, que contiene estos comandos:

123456789# This is an ST NUCLEO F401RE board with a single STM32F401RET6 chip.# http://www.st.com/web/catalog/tools/FM116/SC959/SS1532/LN1847/PF260000 source [find interface/stlink-v2-1.cfg] source [find target/stm32f4x_stlink.cfg] # use hardware reset, connect under resetreset_config srst_only srst_nogate

El primer   comando de origen le dice a OpenOCD que cargue el archivo de configuración para la interfaz ST-Link (preste atención a que el programador ST-Link integrado en el Nucleo tiene una versión de firmware diferente al programador ST-Link independiente). Este otro archivo contiene las instrucciones para identificar la interfaz USB correcta. 
El otro   comando de origen le dice a OpenOCD que cargue el archivo de configuración que describe el MCU STM32F4 en la placa Nucleo. 
Haga clic en ” Aplicar ” y luego en ” Ejecutar “. Verás estos mensajes en la consola de Eclipse.

LEER MAS  Los convertidores dc-dc médicos de 20W tienen 2x MOPP
12345678910Open On-Chip Debugger 0.8.0 (2014-04-28-08:39)Licensed under GNU GPL v2For bug reports, read http://openocd.sourceforge.net/doc/doxygen/bugs.htmlsrst_only separate srst_nogate srst_open_drain connect_deassert_srstInfo : This adapter doesn’t support configurable speedInfo : STLINK v2 JTAG v23 API v2 SWIM v6 VID 0x0483 PID 0x374BInfo : using stlink api v2Info : Target voltage: 3.245204Info : stm32f4x.cpu: hardware has 6 breakpoints, 4 watchpoints

Además, el LED LD1 (el que está cerca del conector mini-USB) comienza a parpadear en verde / led. Esto significa que OpenOCD ha establecido la conexión con el depurador ST-Link correctamente. Ahora necesitamos configurar GDB. Haga clic en el menú de configuración de depuración y luego en ” Configuraciones de depuración …. ” como en la siguiente imagen:

2014-12-25 10_55_36-Debug - test1_src_main.c - Eclipse
2014-12-25 10_55_06-Configuraciones de depuración
2014-12-25 10_58_25-Configuraciones de depuración
2014-12-25 10_53_39-Configuraciones de depuración

En la siguiente ventana, debemos seleccionar la primera entrada ” Depuración de hardware GDB ” y luego hacer clic en el icono ” Nueva configuración de inicio “.En las siguientes ventanas verá una serie de pestañas (Principal, Depurador, Inicio, Fuente, Común). En la pestaña ” Principal “, seleccione ” Habilitar compilación automática “.En la pestaña ” Depurador “, configure el campo como se muestra en la siguiente imagen:

Esto es lo que significa cada campo.

Comando GDB : es la ruta donde se instala GDB. En nuestro caso es   C: \ STM32Toolchain \ gnu-arm \ 4.8-2014q3 \ bin \ arm-none-eabi-gdb.exe . 
Dispositivo JTAG : es el tipo de programador que estamos usando. Seleccione ” GNU ARM OpenOCD “. 
Nombre de host e Número de puerto : este campo debe establecerse en  localhost  y  3333 .

2014-12-25 10_54_02-Configuraciones de depuración

Ahora vaya a la pestaña ” Inicio ” y configure cada campo como se muestra en la siguiente imagen:

Haga clic en ” Aplicar ” y luego en ” Depurar “. Después de unos segundos, nuestro programa de prueba se cargará en el Nucleo. La ejecución se detendrá automáticamente en la función  main ()  . Hemos configurado con éxito Eclipse para depurar aplicaciones para nuestra placa Nucleo. No daré detalles sobre cómo configurar puntos de interrupción, cómo realizar una depuración paso a paso, etc. Supongo que está familiarizado con estos instrumentos de depuración. En la siguiente parte de esta serie mostraré otras herramientas relacionadas con la depuración.

Deja un comentario

Tu dirección de correo electrónico no será publicada.

CUANTAS HORAS FALTA PARA MAÑANA...