Mis primeros pasos con STM32 (II): Convertir una Black Pill en una Black Magic Probe

En este artículo voy a explicar como convertir una placa Black Pill, una placa basada en el microcontrolador Cortex M3 STM32F103C8T6, en una Black Magic Probe.

Hace poco Andrés Sabas escribió un artículo sobre el mismo tema. Como diferencia al suyo utilizaremos Ubuntu y ST-Link v2.

Es posible convertir en una Black Magic Probe cualquier placa basada en STM32F103. Incluso podría hacerse con un clon del ST-Link v2, pero asegurandose que tiene estos controladores porque también los hay que usan el STM32F101, que no serviría.

¿Pero qué es una Black Magic Probe?

La Black Magic Probe una herramienta de depuración para microcontroladores ARM. Permite ver que es lo que pasa dentro del microcontrolador mientras que se ejecuta el código. Esto puede hacerlo gracias a JTAG o Serial Wire Debugging (SWD) y la capacidad de depuración propia del microcontrolador. La sonda se conecta al equipo mediante USB y la depuración se realiza a través de GDB.

Además, en mi caso, la voy a utilizar como programador para diferentes familias de Cortex M0, evitando tener que adquirir un programador de cada fabricante.

¿Qué necesitamos?

  • Black Pill (Aliexpress)
  • ST-Link v2 (Aliexpress)
  • El paquete gcc-arm-none-eabi, instalar con: sudo apt-get install gcc-arm-none-eabi
  • Texane stlink (Github)
  • Black Magic Probe Firmware (Github)

Compilar el firmware

Para compilar el firmware primero clonaremos el repositorio:

$ git clone git@github.com:blacksphere/blackmagic.git

El firmware depende de libopencm3, pero por suerte está includo en el repositorio como un submódulo:

blackmagic$ git submodule init && git submodule update

Ahora un detalle importante: Para compilar el firmware y poder cargarlo después con nuestro ST-Link v2 deberemos añadir el parametro PROBE_HOST=stlink, de tal manera que:

blackmagic$ make PROBE_HOST=stlink

Esto generará varios archivos en la ruta blackmagic/src. Los que nos importan son blackmagic.bin y blackmagic_dfu.bin

Cargar el firmware

Antes de cargar el firmware necesitamos instalar stlink. Cómo intalarlo está en su repositorio, en inglés, y en el primer artículo sobre ARM que escribí, en español.

La conexión de Blackpill al ST-Link v2 debe seguir este patrón:

ST-Link V2 Black Pill
3.3 3.3
GND GND
SWDIO IO
SWCLK CLK

Los jumpers deben estar conectados a tierra (B0- y B1-). Una vez conectado procedemos a limpiar la memoria flash del microcontrolador y cargar el firmware:

blackmagick/src$ st-flash erase blackmagick/src$ st-flash –flash=0x20000 write blackmagic_dfu.bin 0x8000000 blackmagick/src$ st-flash –flash=0x20000 –reset write blackmagic.bin 0x8002000

El parámetro –flash=0x20000 indica al programador que el tamaño real del la memoria flash del microcontrolador es de 128K en vez de los 64K por defecto.

Si todo ha salido bien la Black Magic Probe aparecerá conectada en los puertos /dev/ttyACM0 y /dev/ttyACM1.

Conectándola

Para depurar con JTAG/SWD (GDB Server) utilizando el puerto /dev/ttyACM0, la conexión es:

Microcontrolador Depurador
3.3 3.3
GND GND
SWDIO PB14
SWCLK PA5

Y para depurar con la conexión serie UART utilizando el puerto /dev/ttyACM1:

Microcontrolador Depurador
3.3 3.3
GND GND
RXD PA3
TXD PA2

En próximos episodios veremos como usar la Black Magic Probe para cargar firmware a un microcontrolador y depurarlo. Continuará…