STM32 & ST-LINK - Impossible de se connecter au MCU après une programmation réussie

13

J'ai construit ma propre carte avec STM32F7-45VGT6. Je l'ai programmé avec succès avec ST-LINK v2 (pas l'original cependant) et maintenant je ne peux même plus me connecter avec MCU.

J'utilise l'utilitaire ST-Link de l'interface ST et SWD. Il peut arriver que j'utilise des broches SWD en sortie et dans mon code, je les ai définies comme sortie GPIO. Cela peut-il être le cas?

Néanmoins, je connecte ma broche de réinitialisation à GND et définit l'option "Connect under reset" dans l'utilitaire ST-Link mais cela ne fonctionne pas ... Que puis-je faire?

Sur Internet, j'ai trouvé quelque chose sur l'utilisation de BOOT0 Pin, mais je ne sais pas exactement ...

zupazt3
la source
«Il peut arriver que j'utilise des broches SWD en sortie», c'est possible, mais le seul qui le sache, c'est vous, à moins que vous ne parliez d'une charge corrompue d'un micrologiciel qui ne le fasse pas intentionnellement, mais qui pourrait résulter de l'erreur, qui se produit en effet. Généralement, cela peut être récupéré en effectuant la connexion SWD initiale avec la réinitialisation matérielle confirmée, manuellement ou automatiquement. Si vous souhaitez utiliser les broches SWD comme E / S retardant quelques secondes avant de définir ce paramètre peut faciliter le développement, mais réalisez que cela signifie que vous ne pouvez pas utiliser le débogueur.
Chris Stratton

Réponses:

21

J'ai réussi à résoudre ce problème. Si quelqu'un rencontre un problème similaire, voici ce que j'ai fait:

J'ai utilisé ST-Link v2 et ST-Link Utility. Dans le réglage, j'ai mis "Connect under reset" et l'interface SWD (je ne suis pas sûr de la fréquence).
Ensuite, j'appuie sur le bouton de réinitialisation de ma carte et j'ai cliqué sur "Cible" -> "Effacer la puce" et juste après avoir cliqué, j'ai relâché le bouton - Il a effacé la puce pour que je puisse maintenant reprogrammer mon MCU.


Quoi qu'il en soit, si vous devez utiliser des broches SWD comme sortie, ajoutez un certain retard au début du programme ou utilisez un cavalier pour désactiver / activer le réglage de ces broches comme sorties.

zupazt3
la source
Oui, c'est à peu près à prévoir si vous utilisez les broches SWD à des fins différentes. L'expérience montre que même les conceptions STM32 qui ne le font pas intentionnellement peuvent parfois être «bloquées» dans un mode où les broches SWD ne répondent pas (programme corrompu?) Et nécessitent un tel traitement pour la récupération.
Chris Stratton
1
Sous Linux, j'ai utilisé cette commande bash pour effacer la puce: st-flash erase
nathan
La puce Erase n'a pas fonctionné pour moi. Je suis allé dans Target -> Erase Sectors -> Select all -> apply. Après cela, j'ai retrouvé l'accès à ma planche. Je ne sais pas pourquoi l'effacement des puces n'a pas été
écrit
6

Pour que la connexion sous réinitialisation fonctionne, le ST-Link doit avoir le contrôle sur la broche de réinitialisation.Si vous l'attachez à la terre, le ST-Link n'a aucune chance de faire fonctionner la cible et d'y accéder.


Si vous tirez la broche BOOT0 vers le haut lors de la mise sous tension, le MCU démarre dans le chargeur de démarrage interne et vous pouvez y accéder en utilisant plusieurs protocoles série (voir le manuel de référence pour plus de détails).

À l'intérieur du chargeur de démarrage, les broches SWD devraient être disponibles pour y accéder, mais je n'en suis pas sûr à 100%.

Le ST Flash Loader Demonstrator est un outil qui vous permet d'effacer / programmer le micro en utilisant l'interface UART. Si vous ne pouvez accéder à aucun des UART de votre micro, cette solution ne fonctionnera pas pour vous.

Arsenal
la source
Je peux accéder à USART3 qui est pris en charge par le chargeur de démarrage, donc je vais essayer plus tard - ce sera difficile, car BOOT0 est lié à GND sur PCB ... Mais je veux savoir ce qui ne va pas. Quel mal ai-je fait? J'ai défini des broches SWD / JTAG comme sorties dans ma fonction main (). Mais il est dit dans le manuel que lors de la réinitialisation, toutes les broches ont leur fonction par défaut et peuvent être utilisées immédiatement. Alors pourquoi je ne peux pas effacer le flash lors de la réinitialisation? J'ai également testé le programmateur U-LINK 2 et uVision 5. J'espère qu'aucun niveau de protection n'a été - d'une manière ou d'une autre accidentellement - défini. Je n'ai pas défini de tels bits, mais existe-t-il un moyen de tester si les bits de protection sont corrects?
zupazt3
@ zupazt3 Je ne veux pas paraître grossier, mais veuillez relire ma première phrase. Il contient une réponse au problème de la connexion en cours de réinitialisation. Si vous ne le comprenez pas, postez un commentaire plus spécifique.
Arsenal
Mais je ne le lie pas tout le temps :) Dans mon premier post, je voulais dire que je l'ai même lié directement à GND pour vérifier si cela aiderait. Mais normalement, je ne lie pas NRST à GND, mais à un programmeur, il a donc le contrôle de la réinitialisation. Et il ne se connectera toujours pas. J'ai également essayé d'utiliser U-Link 2 et Keil uVision 5 mais avec le même résultat. Quelle peut être la raison?
zupazt3
@ zupazt3 qui n'était pas tout à fait clair à partir de votre question. Peut-être que l'augmentation de l'horloge SWD pourrait aider, car elle pourrait obtenir la connexion avant que la cible ne passe en sortie. Mais j'ai accidentellement mis les broches SWD en sortie et je n'ai pas pu obtenir de connexion à ma cible et en utilisant uniquement le BOOT0, j'ai pu le récupérer, si vous les avez directement mises à la terre (sans résistance), cela va et dure.
Arsenal
1
J'ai finalement réussi à effacer la puce! Avec l'utilitaire ST-Link - J'ai appuyé sur le bouton de réinitialisation, j'ai cliqué sur "Effacement complet" et le bouton de libération et il s'est en quelque sorte effacé et maintenant cela fonctionne. J'ai essayé ça avant mais seulement maintenant ça a marché.
zupazt3
3

si vous utilisez stmcubemx, vous devez configurer le câble série sur l'onglet de brochage stmcube. sur l'onglet de brochage, cliquez sur SYS et changez l'option de débogage en fil série. cela résout mon problème, et peut-être aussi votre problème.

dili
la source
Bien que cela puisse être un problème, si laisser les broches SWD dans le mode SWD par défaut à la mise sous tension n'est pas le paramètre par défaut de cette suite logicielle, c'est sans doute un défaut d'utilisation assez grave qui nécessite un rapport de bogue et une correction. Êtes-vous sûr de ne pas avoir modifié les paramètres par rapport à leurs valeurs d'origine, ou de commencer avec un projet particulier nécessitant l'utilisation de ces broches de manière non par défaut?
Chris Stratton
Je viens tout d'abord de définir mes épingles comme SYS_SW .... mais ils ont coloré en orange. Également eu un problème de connexion à la puce après avoir téléchargé le code. Lorsque j'ai sélectionné le mode de débogage dans SYS-Serial Wire, la puce se connecte normalement après le flashage.
gtu
1

J'ai téléchargé du code sur ma propre carte STM32F427. Ensuite, je ne peux plus me connecter à ma carte à l'aide de l'utilitaire ST-LINK. Je pense que mon code perturbe les configurations des broches du port de débogage (? Ne peut pas confirmer). Ce que j'ai fait est le suivant pour établir la connexion et reprogrammer ma carte:

  1. Ouvrez l'utilitaire ST-LINK et préparez-vous à "Se connecter" dans le menu Cible.
  2. Alimentez votre carte (dans mon cas, j'utilise un câble USB) et EN MÊME TEMPS cliquez sur "Connect" dans l'utilitaire ST-LINK.

J'ai restauré 2 planches avec cette astuce. J'espère que cela t'aides. --Bob

Bob Liu
la source
1

Comme l'a dit Dili:

si vous utilisez stmcubemx, vous devez configurer le câble série sur l'onglet de brochage stmcube. sur l'onglet de brochage, cliquez sur SYS et changez l'option de débogage en fil série. cela résout mon problème, et peut-être aussi votre problème.

STM32CubeMx ne configure pas le port de débogage par défaut, par conséquent ST-Link cessera de fonctionner une fois que vous aurez flashé votre code. Vous devez effacer la puce avec l'utilitaire ST-link par exemple. Pour me connecter au MCU, j'ai dû tirer la broche BOOT0 vers le haut pendant la mise sous tension pour activer le chargeur de démarrage. Ensuite, allez dans le menu Tarjet et effacez la puce .

Pablo Soria
la source
0

Pour reprogrammer le MCU, maintenez le bouton de réinitialisation et choisissez de vous connecter au périphérique dans l'utilitaire ST-Link ou appuyez sur télécharger dans votre IDE (par exemple Keil), puis relâchez le bouton de réinitialisation.

Misagh
la source
-1

Les broches de démarrage (bits dans certaines versions) peuvent empêcher le débogueur de démarrer. Assurez-vous de ne pas implémenter le modèle de démarrage au démarrage (certain modèle binaire sur les broches boot0 et boot1), sinon votre MCU passera à l'état de démarrage.

Lior Bilia
la source
J'ai une broche boot0 liée à GND ... Je ne suis pas sûr de ce que vous avez écrit, car - comme je l'ai dit - j'ai réussi à programmer mon flash et le programme s'exécute toujours sur MCU - Je ne peux tout simplement pas me connecter à MCU avec ST -Lien sur l'interface SWD. Sous réinitialisation, il ne devrait pas exécuter le démarrage et les broches devraient être dans l'état par défaut, donc je ne comprends pas pourquoi il ne se connecte pas.
zupazt3
Êtes-vous sûr de cela? Selon vous, quelle combinaison désactiverait le SWD d'une manière que la manipulation de la réinitialisation ne peut pas annuler?
Chris Stratton