ST-Link no puede restablecer el software de mis MCU STM32 a través de SWD

He estado trabajando en un problema con dos placas diferentes (una con STM32F7 y la otra con STM32F3). Cuando intento programar las placas (usando un ST-Link provisto en las placas Nucleo/Discovery) obtengo varios errores relacionados con el reinicio.

Básicamente, cuando trato de "ejecutar" un programa desde STM32CubeIDE, con "Restablecimiento del sistema de software" seleccionado, dependiendo del depurador que use, obtengo:

  • para ST-Link GDB:

    STM32_AppReset(), objetivo de reinicio por falla.

  • para OpenOCD:

    motivo de depuración indefinido 8: el objetivo debe restablecerse
    Información: se acepta la conexión 'gdb' en tcp/3333
    motivo de depuración indefinido 8: el objetivo debe restablecerse
    Error: se agotó el tiempo de espera mientras se detuvo el objetivo
    Error al ejecutar el evento gdb-flash-erase-start en el objetivo STM32F373CCTx. cpu:
    OBJETIVO: STM32F373CCTx.cpu - No detenido
    Error: Objetivo no detenido
    Error: error al borrar los sectores 0 a 10
    Error: flash_erase devolvió -304

La única forma de programar las MCU es usar la utilidad ST-Link, establecerla en Restablecimiento de hardware (porque ni siquiera se conectará a la MCU cuando se usa el Restablecimiento del sistema de software), programar la MCU y luego reiniciarla manualmente. Si ya hay un programa en la memoria de la MCU, la utilidad ST-Link fallará. Las fallas son diferentes para el F3 y F7. En F7 solo dirá que no puede restablecer el objetivo, y en F3 la salida es:

13:06:09: ID del dispositivo: 0x432
13:06:09: Tamaño flash del dispositivo: 256 KBytes
13:06:09: Familia del dispositivo: STM32F37xx
13:06:26: La función del programa del cargador elf falla.
13:06:28: La función del programa del cargador elf falla.
13:06:28: Error del cargador de memoria
13:06:28: ¡Ocurrió un error durante la operación del programa!
13:06:28: ¡Error de programación @ 0x08000188!

No estoy seguro si es un problema de software o de hardware. Con respecto a mis conexiones, en ambas placas solo estoy usando SWDIO, SWCLK y GND. La MCU está obteniendo 3.3V estables en ambas placas. No hay botón de reinicio, en ambas placas el pin NRST está conectado directamente a 3.3V. Intenté agregar un capacitor de 100nF entre NRST y GND para asegurarme de que no haya una caída de 3.3V, pero eso no cambió nada.

Como protección de entrada, hay resistencias de 100 ohmios en las líneas SWDIO y SWCLK, también había diodos TVS, pero los eliminé mientras intentaba encontrar una solución (y no cambió nada). También probé varios dispositivos ST-Link diferentes, pero no tuvo ningún impacto.

Espero haber proporcionado todos los detalles necesarios, porque he estado tirándome de los pelos durante horas y no pude encontrar una solución. He diseñado varias otras placas con exactamente el mismo esquema de conexión (solo SWDIO y SWCLK, resistencias de 100 ohmios, etc.) y no tuve problemas para programarlas y depurarlas. Al principio pensé que una placa F7 estaba defectuosa, pero el mismo problema persiste en diferentes PCB con una MCU diferente, lo que sugiere que podría estar cometiendo un error mayor.

Muchas gracias por adelantado.

Respuestas (1)

La conexión directa de NRST a 3.3V VCC es incorrecta. Desconéctelo.

¡Muchas gracias! Sabía que era un error tonto;)