STM32 y ST-LINK: el conector SWD no funciona

Estoy usando un depurador ST-LINK/V2 (versión de firmware V2.J27.S6, actualizada) para programar mi placa de descubrimiento STM32F407G. Hasta ahora, he estado usando USB para flashear la MCU, usando STM32 ST-LINK Utility v4.0.0.0 (controlador v4.4.0.0, st-link_cli.exe v3.0.0.0, debería estar todo actualizado). -fecha). Ahora nos estamos deshaciendo de la placa de descubrimiento y necesitamos flashear la MCU usando la interfaz SWD. Sin embargo, encontré un comportamiento que es inconsistente con el manual del depurador ST-LINK/V2 ( UM1075 ).

La conexión de pines según el manual es

JTAG (en el depurador ST-LINK) - SWD (CN2 en la placa STM32)

  • 1 - 1 (MCU VDD)
  • 5 - 2 (tierra)
  • 7 - 3 (SWDIO)
  • 9 - 4 (SWDCLK)

Sin embargo, en esta configuración me sale el error

¡No se puede conectar con el objetivo!

El archivo de registro lee

Dispositivo ST-Link/V2 detectado
Voltaje objetivo detectado: 0.722835
Error al obtener el IDCODE objetivo: si SWD, verifique la conexión SWD
Error (4) al inicializar ST-Link en modo SWD

Este error también lo encontré en esta pregunta , pero no tuve una respuesta satisfactoria. Creo que esencialmente significa que no detecta el voltaje VDD en la placa STM32 (aunque se alimenta con 3V).

Logré resolver el problema conectando directamente los pines de la siguiente manera:

  • JTAG 1 - P1 VDD
  • JTAG 5 - P1 TIERRA
  • JTAG 7 - P2 PA13
  • JTAG 9 - P2 PA15

Y ahora todo funciona bien, puedo flashear la placa como solía hacerlo con USB.

Encontré preguntas similares aquí y aquí , pero ninguna me ayudó.

Curiosamente, ambos tipos de comportamiento no dependen de las posiciones del puente ST-LINK CN3 en la placa STM32. (¿Por qué no?)

¿Por qué no puedo usar el conector SWD? ¿Por qué ST-LINK/V2 no detecta el voltaje VDD?

Editar

Se descubrió que R2 no está instalado (consulte el esquema SWD en la página 27 del manual de la placa de descubrimiento STM32F407G ). Sospeché que colocar esto con una resistencia 100R resolvería el problema, pero no hizo ninguna diferencia.

¿Conectó también el pin nRST en el conector SWD? IIRC por defecto ST Link intenta usar el reinicio de hardware.
También asegúrese de quitar ambos puentes en CN3 para que el depurador integrado no interfiera con el externo.
Hola Tony K, gracias por tu aporte. Independientemente del estado del pin NRST o de los puentes CN3, reproduzco el comportamiento anterior. Puedo conectarme fácilmente (sin usar el puerto SWD sino al revés), incluso si el pin NRST no está conectado (independientemente de si uso 'Conectar bajo Restablecer' en el software o no) y los puentes CN3 están ENCENDIDOS.
He tenido un éxito general con las cuatro conexiones que está usando en varios chips st y no st cortex-m, no es necesario reiniciar... Uso openocd para hablar con el depurador stlink (placa de descubrimiento/núcleo).
Los STM32 no requieren la confirmación eléctrica de NRST a menos que tenga un firmware defectuoso o uno que deshabilite los pines SWD, entonces es útil conectarse con el reinicio confirmado, aunque para el software de ST puede confirmar el reinicio manualmente.

Respuestas (2)

El conector SWD en una placa Discovery (CN2) no es para programar la MCU de destino integrada.

Más bien, es para permitir que el ST-LINK incorporado se use para programar un objetivo externo.

Si desea programar el objetivo incorporado con un programador diferente, deberá estudiar los esquemas, encontrar todas las señales relevantes y asegurarse de que el programador incorporado no esté cargando las líneas, lo que parece tratarse de lo que desea. hizo al recoger los pines SWD de sus posiciones de ruptura GPIO.

Al observar los esquemas, parece que con los puentes CN3 eliminados, el SWCLK de destino debería estar disponible en CN3-2 y su SWDIO en CN3-4. Pero los pines 1 y 3 de ese conector no son de alimentación y tierra, sino que son las versiones del programador integrado de estas señales que llegan a las posiciones de los puentes.

¡Gracias, este es el tipo de respuesta que estaba buscando! Estaba confundido por el manual ST-LINK/V2 ya que sugiere que puedo conectar las líneas JTAG apropiadas a los pines SWD y luego usarlo como sustituto de la conexión USB.

EDITAR

Para usar el descubrimiento stm32f4 como un depurador de stlink

Hay un conector SWD en la placa de descubrimiento stm32f4.

pin 1 vref (vcc), pin 2 swdclk, pin3 tierra, pin 4 swdio (CN2)

y retire los puentes CN3.

Para acceder al destino con algún otro depurador SWD

Retire los puentes CN3 y el pin 2 es swdclk, el pin 4 es swdio. Necesitará una conexión a tierra y, en general, una referencia de voltaje (para que el depurador que está utilizando sepa si se trata de 1.8v o 3.3v o 5v u otro, básicamente para alimentar el IO en el depurador) que puede tomar desde el final del depurador stlink o el extremo del objetivo, lo que sea, elija un 3.xV y tierra.

O simplemente haga lo que está haciendo y retire los puentes en el extremo del depurador y acceda a los pines swd directamente (PA13/15).

Toda esta información está disponible en la documentación ST de la placa. No utilizan necesariamente los nombres SWDIO/SWDCLk en todas partes.

No, el conector SWD está conectado al programador integrado , no al objetivo integrado .
a la derecha, el extremo de depuración de stlink de la placa que tiene CN2 marcado como SWD, el pin 1 es vref, 2 swdclk, 3 gnd 4 swdio, no 2 gnd y 3 swdclk. combínelos con la parte de su placa y debería funcionar bien, usó el descubrimiento stm32f4 y otras placas nucleo docenas de veces con la mayoría de los chips de las marcas ...
aún necesitará una conexión a tierra común y una referencia de voltaje que pueda obtener desde casi cualquier lugar, cn2 o los conectores principales del chip.
No. Una vez más, los pines 1 y 3 de CN3 son del programador integrado. El objetivo está en los pines 2 y 4. Pero sí, necesitará encontrar tierra (y si al programador le importa) Vtarget, en otro lugar.
derecho derecho se olvidó de los pines de puente 2 y 4.