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.