STM32 y ST-LINK: no se puede conectar a MCU después de una programación exitosa


13

He construido mi propia placa con STM32F7-45VGT6. Lo he programado con éxito con ST-LINK v2 (aunque no el original) y ahora ni siquiera puedo conectarme con MCU.

Uso la utilidad ST-Link de la interfaz ST y SWD. Puede ser el caso de que use pines SWD como salida y en mi código los configuré como salida GPIO. ¿Puede ser el caso?

Sin embargo, conecto mi pin de reinicio a GND y configuro la opción "Conectar bajo reinicio" en la Utilidad ST-Link pero no funciona ... ¿Qué puedo hacer?

En Internet, he encontrado algo sobre el uso de BOOT0 Pin, pero no sé exactamente ...


"Puede ser el caso de que use pines SWD como salida", eso es posible, pero el único que lo sabría es usted, a menos que se refiera a una carga corrupta de un firmware que no hace eso intencionalmente, pero podría ser el resultado de El error, que de hecho sucede. En general, esto es recuperable al realizar la conexión SWD inicial con el restablecimiento de hardware confirmado, ya sea manual o automáticamente. Si desea usar los pines SWD como E / S que retrasan un par de segundos antes de hacer que la configuración pueda facilitar el desarrollo, pero tenga en cuenta que aún significa que no puede usar el depurador.
Chris Stratton

Respuestas:


21

Me las arreglé para resolver ese problema. Si alguien encuentra un problema similar, esto es lo que he hecho:

Utilicé ST-Link v2 y ST-Link Utility. En la configuración, configuro "Conectar bajo reinicio" y la interfaz SWD (no estoy seguro acerca de la frecuencia).
Luego presioné el botón de reinicio en mi tablero e hice clic en "Destino" -> "Borrar chip" y justo después de hacer clic solté el botón - Borré el chip para que ahora pueda reprogramar mi MCU.


De todos modos, si necesita usar pines SWD como salida, agregue algo de retraso al comienzo del programa o use algún puente para deshabilitar / habilitar la configuración de estos pines como salidas.


Sí, eso es bastante de esperar si usa los pines SWD para un propósito diferente. La experiencia muestra que incluso los diseños STM32 que no lo hacen intencionalmente pueden en ocasiones quedar "atascados" en un modo donde los pines SWD no responden (¿programa dañado?) Y requieren dicho tratamiento para la recuperación.
Chris Stratton

1
En Linux, utilicé este comando bash para borrar el chip: st-flash erase
nathan

El chip Erase no funcionó para mí. Fui a Destino -> Borrar sectores -> Seleccionar todo -> aplicar. Después de esto recuperé el acceso a mi tablero. No estoy seguro de por qué el borrado de chips no se
informó

6

Para que la conexión bajo reinicio funcione, el ST-Link debe tener control sobre el pin de reinicio, si lo ata a tierra, el ST-Link no tiene ninguna posibilidad de ejecutar el objetivo y obtener acceso a él.


Si tira del pin BOOT0 alto durante el encendido, la MCU se iniciará en el cargador de arranque interno y podrá obtener acceso mediante varios protocolos en serie (consulte el manual de referencia para obtener más detalles).

Dentro del gestor de arranque, los pines SWD deberían estar disponibles para obtener acceso, pero no estoy 100% seguro de esto.

El ST Flash Loader Demonstrator es una herramienta que le permite borrar / programar el micro usando la interfaz UART. Si no puede acceder a ninguno de los UART de su micro, esta solución no funcionará para usted.


Puedo acceder a USART3, que es compatible con el gestor de arranque, así que lo intentaré más tarde, será complicado, porque BOOT0 está vinculado a GND en PCB ... Pero quiero saber qué está mal. ¿Qué mal he hecho? Configuré pines SWD / JTAG como salidas en mi función main (). Pero dice en el manual que durante el restablecimiento, todos los pines tienen su función predeterminada y se pueden usar de inmediato. Entonces, ¿por qué no puedo borrar el flash en el reinicio? También probé el programador U-LINK 2 y uVision 5. Espero que no se haya establecido ningún nivel de protección, de alguna manera accidental. No configuré ninguno de esos bits, pero ¿hay alguna forma de probar si los bits de protección están bien?
zupazt3

@ zupazt3 No quiero parecer grosero, pero por favor relee mi primera oración. Contiene una respuesta al problema con la conexión en restablecimiento. Si no lo comprende, publique un comentario más específico.
Arsenal

Pero no lo ato todo el tiempo :) En mi primera publicación quise decir que INCLUSO lo até directamente a GND para verificar si eso ayudaría. Pero normalmente no asocio NRST a GND, sino a un programador, por lo que tiene control sobre el restablecimiento. Y todavía no se conectará. También intenté usar U-Link 2 y Keil uVision 5 pero con el mismo resultado. cual puede ser la razon?
zupazt3

@ zupazt3 que no estaba del todo claro en su pregunta. Quizás aumentar el reloj SWD podría ayudar, ya que podría obtener la conexión antes de que el objetivo cambie a salida. Pero accidentalmente configuré los pines SWD para la salida y no pude obtener una conexión a mi objetivo y solo usando el BOOT0 pude recuperarlo, si los ataste a tierra directamente (sin una resistencia) esto será difícil.
Arsenal

1
¡Finalmente logré borrar el chip! Con la utilidad ST-Link: presioné el botón de reinicio, hice clic en "borrar por completo" y solté el botón y de alguna manera se borró y ahora funciona. Lo intenté antes, pero solo ahora funcionó.
zupazt3

3

si está usando stmcubemx, debe configurar el cable serie en la pestaña de pin stmcube. en la pestaña de pinout, haga clic en SYS y cambie la opción de depuración a cable serial. solucionó mi problema, y ​​quizás tu problema también.


Si bien eso podría ser un problema, si dejar los pines SWD en el encendido predeterminado del modo SWD no es la configuración predeterminada de este paquete de software, podría decirse que es un defecto de usabilidad bastante grave que necesita un informe de error y corrección. ¿Estás seguro de que no cambiaste la configuración de sus valores originales, o que no comenzaste con un proyecto en particular que requería usar esos pines de forma no predeterminada?
Chris Stratton

Primero configuré mis pines como SYS_SW ... pero se colorearon en naranja. También tuve problemas para conectarme al chip después de cargar el código. Cuando seleccioné el modo de depuración en SYS-Serial Wire, el chip se conecta normalmente después de parpadear.
Gtu

1

Descargué un código en mi propia placa STM32F427. Entonces ya no puedo conectarme a mi placa usando la utilidad ST-LINK. Creo que mi código desordena las configuraciones de pin del puerto de depuración (? No puedo confirmar). Lo que hice es lo siguiente para hacer la conexión y reprogramar mi placa:

  1. Abra la utilidad ST-LINK y prepárese para "Conectarse" en el menú Destino.
  2. Encienda su placa (en mi caso, uso un cable USB) y AL MISMO TIEMPO haga clic en "Conectar" de la utilidad ST-LINK.

Restablecí 2 tableros con este truco. Espero que esto ayude. --Beto


1

Como dijo dili:

si está usando stmcubemx, debe configurar el cable serie en la pestaña de pin stmcube. en la pestaña de pinout, haga clic en SYS y cambie la opción de depuración a cable serial. solucionó mi problema, y ​​quizás tu problema también.

STM32CubeMx no configura el puerto de depuración de forma predeterminada, por lo tanto, ST-Link dejará de funcionar una vez que actualice su código. Tienes que borrar el chip con ST-link Utility, por ejemplo. Para conectarme con la MCU, tuve que tirar del pin BOOT0 alto durante el encendido para activar el gestor de arranque. Luego vaya al menú Tarjet y borre el chip .


0

Para reprogramar la MCU, mantenga presionado el botón de reinicio y elija conectarse al dispositivo en la utilidad ST-Link o presione descargar en su IDE (por ejemplo, Keil) y luego suelte el botón de reinicio.


-1

Los pines de arranque (bits en algunas versiones) pueden evitar que se inicie el depurador. Asegúrese de no implementar el patrón de arranque al inicio (cierto patrón binario en los pines boot0 y boot1), de lo contrario su MCU entrará en estado de arranque.


Tengo el pin boot0 atado a GND ... No estoy seguro de lo que ha escrito, porque, como dije, logré programar con éxito mi flash y el programa aún se ejecuta en MCU. Simplemente no puedo conectarme a MCU con ST -Enlace sobre la interfaz SWD. Bajo reinicio, no debería ejecutar el arranque y los pines deberían estar en estado predeterminado, por lo que no entiendo por qué no se conecta.
zupazt3

¿Estás seguro de eso? ¿Qué combinación crees que deshabilitaría el SWD de una manera que la manipulación del reinicio no pueda anular?
Chris Stratton
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.