Intento seguir esta guía "Instalación de una cadena de herramientas para Cortex-M3 / STM32 en GNU / Linux" (disponible: enlace ) con la placa de desarrollo STM32-H103 de Olimex. Todo funciona como se esperaba hasta el momento en que necesito copiar mi programa compilado en flash usando openocd.
Siguiendo las instrucciones, inicio el servidor openocd ('openocd -f openocd.cfg') y luego telnet ('telnet localhost 4444'). Inicialmente, al iniciar el servidor openocd no se inicia la salida:
Info : This adapter doesn't support configurable speed
Info : STLINK v2 JTAG v23 API v2 SWIM v4 VID 0x0483 PID 0x3748
Info : Target voltage: 2.038896
Error: init mode failed
in procedure 'transport'
in procedure 'init'
intentarlo de nuevo, sin embargo, parece funcionar ... Sin embargo, 0 puntos de interrupción y puntos de control parecen sospechosos.
Info : This adapter doesn't support configurable speed
Info : STLINK v2 JTAG v23 API v2 SWIM v4 VID 0x0483 PID 0x3748
Info : Target voltage: 2.054665
Info : stm32f1x.cpu: hardware has 0 breakpoints, 0 watchpoints
En este estado no puedo detener ni probar el dispositivo.
> reset halt
in procedure 'reset'
> flash probe 0
Cannot identify target as a stm32x
auto_probe failed
in procedure 'flash'
Luego encontré este artículo en el sitio web de NuttX ( enlace ) que parece Ayúdame un poco (no estoy usando el NuttX RTOS, sin embargo, solo el metal desnudo). Siguiendo el artículo y manteniendo presionado el botón de reinicio hasta que se agote el tiempo de espera de 'reiniciar', puedo probar el dispositivo con éxito. También tenga en cuenta que ahora hay 6 puntos de interrupción y 4 puntos de observación.
Info : This adapter doesn't support configurable speed
Info : STLINK v2 JTAG v23 API v2 SWIM v4 VID 0x0483 PID 0x3748
Info : Target voltage: 2.047244
Info : stm32f1x.cpu: hardware has 6 breakpoints, 4 watchpoints
> reset halt
timed out while waiting for target halted
TARGET: stm32f1x.cpu - Not halted
in procedure 'reset'
target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0x01000000 pc: 0x08000250 msp: 0x20005000
> flash probe 0
device id = 0x20036410
flash size = 128kbytes
device id = 0x20036410
flash size = 128kbytes
flash 'stm32f1x' found at 0x08000000
Sin embargo, cuando programo y ejecuto el dispositivo, obtengo el siguiente mensaje de error ...
> stm32f1x mass_erase 0
stm32x mass erase complete
> flash write_bank 0 main.bin 0
wrote 9704 bytes from file main.bin to flash bank 0 at offset 0x00000000 in 0.719990s (13.162 KiB/s)
> reset run
in procedure 'reset'
jtag status contains invalid mode value - communication failure
Polling target stm32f1x.cpu failed, GDB will be halted. Polling again in 100ms
jtag status contains invalid mode value - communication failure
Polling target stm32f1x.cpu failed, GDB will be halted. Polling again in 300ms
jtag status contains invalid mode value - communication failure
Polling target stm32f1x.cpu failed, GDB will be halted. Polling again in 700ms
jtag status contains invalid mode value - communication failure
Polling target stm32f1x.cpu failed, GDB will be halted. Polling again in 1500ms
jtag status contains invalid mode value - communication failure
Polling target stm32f1x.cpu failed, GDB will be halted. Polling again in 3100ms
En esta etapa no puedo ver el LED parpadeando en el tablero como sugiere la guía. ¿Alguien tiene alguna idea de lo que está mal?
[EDITAR] He encontrado que el archivo main.elf (en lugar de main.bin) parpadea no hace que se generen los errores anteriores después de 'reinicio', sin embargo, todavía no veo el LED parpadeando.
Luego use gdb con el comando 'arm-none-eabi-gdb -tui --eval-command="target localhost remoto: 3333" main.elf'.
Si ingreso 'c' para continuar, obtengo
(gdb) c
Continuing.
Program received signal SIGINT, Interrupt.
0x00010100 in ?? ()
Y si ingreso 's' para el paso, obtengo
(gdb) s
Cannot find bounds of current function