¿Mejor procedimiento para 'recuperar' un STM32F103C8T6?

Tengo un STM32F103C8T6 (también conocido como píldora azul) y trabajé con él.

A veces, por una razón que no entiendo, después de depurarlo (usando Eclipse), la conexión se pierde y no puedo iniciar una nueva sesión de depuración.

Lo único que debe hacer es el siguiente procedimiento que requiere mucho tiempo:

  • cerrar eclipse
  • Iniciar la utilidad ST-Link
  • En el menú ST-LINK/Actualización de firmware, seleccione el botón Device Connect (para ver si el dispositivo ST Link puede conectarse).
  • En caso de error, reinsértelo (Windows muestra Dispositivo USB desconocido) y repita el paso anterior
  • En caso de no haber error muestra la versión: V2.J27.S6 STM32+STM8 Debugger
  • Que en el STM32 tengo que mantener presionado el botón de reinicio
  • Seleccione la opción de menú Target/Erase Chip
  • Suelte el botón (a tiempo, de lo contrario repita el paso anterior)
  • Que el chip se borra.
  • Luego, vuelva a iniciar Eclipse y puedo continuar.

Esto ya es una operación muy tediosa... ¿hay una solución mejor? ¿O por qué motivo la sesión de depuración hace que el STM32 pierda la capacidad de iniciar una nueva sesión de depuración?

E incluso en algunos casos me sale el siguiente error al intentar depurar:

23:23:02 : Can not connect to target!
                  If you're trying to connect to an STM32W1xx device, please select Normal or HotPlug mode from Target->Settings menu.
                  If you're trying to connect to a low frequency application , please select a lower SWD Frequency mode from Target->Settings menu.
23:23:03 : No target connected

El fragmento del archivo de configuración del proyecto Eclipse:

# use software system reset
reset_config none
set CONNECT_UNDER_RESET 0

Respuestas (1)

Encontré el problema de una de las preguntas, así que lo agregué para referencia de otras personas, ya que es un valor predeterminado no trivial:

Al usar el STM32CubeMX que hago, cada vez que se realiza un proyecto, por defecto se selecciona el siguiente elemento:

  • SYS, depuración: sin depuración

Esto provoca que se genere el siguiente código en HAL_MspInit:

__HAL_AFIO_REMAP_REMAP_SWJ_DISABLE();

Tan pronto como el depurador pasa este comando (que es uno de los primeros comandos en HAL_Init que se llama en main()), el depurador pierde la conexión e incluso no se puede iniciar una nueva sesión de depuración.

Se puede arreglar fácilmente con el ajuste a

  • SYS, depuración: cable serie

(que también se llama SWD: Serial Wire Debug y es compatible con ST Link 2).

Esto provoca que se genere el siguiente código en HAL_MspInit:

__HAL_AFIO_REMAP_SWJ_NOJTAG();

Y la depuración funciona como de costumbre.