Depuración de STM32 con ST-Link

Depuración de STM32 con ST-Link

En este artículo explicaré cómo podemos programar, depurar y volcar un firmware desde placas STM32. Para esto, necesitaremos un programador st-link v2. El primer paso es descargar la hoja de datos relacionada con nuestro chipset y localizar el pinout para conectar nuestro programador st-link v2:

  • Conectar el pad CLK en el pcb a SWCLK en el st-link.
  • Conectar el pad DAT a SWDIO.
  • Conectar las tierras GND y ST-link GND juntas.

Explicaré cómo hacerlo usando un Mac, pero usando otros sistemas operativos puede ser similar. Necesitaremos instalar el software stlink, en Mac con brew podemos hacerlo así:

$ brew install stlink

Para conectar el stlink ejecutaremos:

$ stlink

En general, abrirá localhost:4242, debemos anotar esta dirección para más adelante.

Opcionalmente, puedes usar openocd, en este caso escuchará en localhost:4444 por defecto:

$ openocd -f /usr/local/Cellar/open-ocd/0.10.0/share/openocd/scripts/interface/stlink-v2.cfg -f /usr/local/Cellar/open-ocd/0.10.0/share/openocd/scripts/target/stm32f1x.cfg

También necesitaremos gcc arm para la compilación cruzada:

$ brew tap osx-cross/arm

$ brew install arm-gcc-bin

Recuerda añadir símbolos usando la opción de compilación -g en gcc. Para cargar nuestro archivo, cargaremos nuestro elf en gdb:

$ arm-none-eabi-gdb -tui /path/to/file.elf
(gdb) target remote localhost:4242
(gdb) load
(gdb) break main

Podemos conectarnos a openocd usando radare2:

$ r2 -a arm -b 32 -D gdb gdb://127.0.0.1:4444

Para volcar la memoria podemos hacer:

$ st-flash read /tmp/output.bin 0x8000000 0x8000

ADVERTENCIA: Al trabajar y alimentar la placa objetivo STM desde el programador, si conectas el puerto USB al mismo tiempo, primero quita el cable de alimentación (naranja) y alimenta la placa desde el USB, de lo contrario podrías quemar tu placa.