La LED s'allume faiblement lorsque uC est réinitialisé

Aug 19 2020

J'ai conçu un PCB qui a un STM32G431CBT6 dessus. Il y a aussi deux LED, une rouge et une verte, connectées comme indiqué:

Quand je l'ai mis sous tension pour la première fois (donc pas encore de programme sur l'uC), la LED rouge s'allumait faiblement. Après avoir chargé un programme de clignotants LED sur l'uC, cela fonctionne correctement (avec une luminosité totale), cependant si j'appuie sur le bouton de réinitialisation, la LED rouge s'allume à nouveau faiblement et la tension à travers R1 est de 120 mV. Donc, 120uA coule pour une raison quelconque. L'autre LED ne le fait pas et la tension à travers R2 est de 0.

En regardant la fiche technique, je n'ai trouvé que cette note sur PB4 (page 60):

"Après la réinitialisation, ces broches sont configurées comme des fonctions alternatives de débogage JTAG / SW, et le pull-up interne sur les broches PA15, PA13, PB4 et le pull-down interne sur la broche PA14 sont activés."

Mais même s'il y a un pull-up sur PB4, la LED ne devrait pas être allumée, alors qu'est-ce qui cause ce comportement?


Éditer:

Après avoir mis le projet de côté pendant un certain temps, il ne le fait pas maintenant, mais je ne sais pas ce qui a changé. Je ne faisais que bricoler les paramètres de démarrage dans les octets d'option (avec l'utilitaire ST-Link), bien que je ne pense pas que cela ait quoi que ce soit à voir avec le menu déroulant UCPD.

Au fait, j'ai trouvé le paramètre par défaut pour désactiver le pull-down:
(et oui, cela s'appelle "pull-up" dans les paramètres, mais cela semble être une erreur)

Lorsqu'elle est cochée (par défaut), elle met le

HAL_PWREx_DisableUCPDDeadBattery();

appel de fonction dans la fonction HAL_MspInit.

Lorsqu'elle n'est pas cochée, la LED s'allumait faiblement même après la réinitialisation, elle a donc vérifié la réponse acceptée à la question d'origine. Jusqu'à ce qu'il commence à ne plus jamais faire de lumière tamisée.

Sommaire:

  1. À l'origine, la LED ne s'allumait faiblement que lors de la réinitialisation.
  2. Cela était dû au déroulement UCPD, qui était désactivé par la case à cocher «économiser l'énergie de l'UCPD non actif - pull-up de batterie morte désactivée» cochée par défaut. Je pourrais le vérifier en le décochant et en ne configurant pas la broche GPIO pour la LED, ce qui entraînait un éclairage tamisé même après la réinitialisation.
  3. Quelque chose s'est produit et maintenant il ne le fait jamais, quelle que soit la case à cocher ou en cours de réinitialisation. Peut-être que le pull-down s'est cassé pour une raison quelconque? Je sais seulement que la broche GPIO elle-même est fonctionnelle, elle peut conduire correctement la LED lorsqu'elle est programmée.

Réponses

11 Justme Aug 19 2020 at 15:24

Il lit dans le manuel de référence que cette série MCU particulière utilise PB4 pour l'une des broches CC du connecteur USB-C. Cela signifie que la broche prend en charge une fonction de déroulement interne de 5,1k activée par défaut au moment de la réinitialisation, sinon il pourrait ne pas être possible d'utiliser le chargeur de démarrage pour télécharger le micrologiciel via le connecteur USB-C. Ainsi, si JTAG doit être utilisé, le menu déroulant peut être désactivé. Cela affectera donc également la LED.

KyleB Aug 19 2020 at 14:55

Ce qui cause le comportement est une erreur quelque part. Soit vous n'êtes pas vraiment connecté aux broches que vous pensez (même l'ingénieur le plus expérimenté peut le faire), soit le manuel est en erreur. Vous avez raison. La seule façon dont ceux-ci peuvent être faiblement éclairés est s'il y a un pull-down.

Parfois, la réponse est profondément enfouie dans le manuel.

Si cela vous dérange, faites une forte traction dessus.

citizen Aug 19 2020 at 15:43

S'il est activé par un pull-down par défaut vers GND (et cela doit être noté dans la fiche technique du microprocesseur si cette broche a à l'initialisation un pull-down) alors oui il est probable qu'il évacue du courant à travers la led. Normalement, le code initialise toutes les broches à double fonction à leur état correct et / ou supprime tous les pull-down / pull-ups qui ne sont pas nécessaires. Mais dans votre cas, vous dites qu'il n'y a pas de code. Eh bien, avec un code d'initialisation correctement écrit, la LED sera initialisée à l'état de démarrage correct (probablement éteint par défaut). Si vous perdez le sommeil, il est préférable d'ajouter un pull-up puissant ou de vous assurer que le code est en cours d'exécution dès que vous mettez la carte sous tension et exécutez le code.