STM32 Compréhension des paramètres GPIO


41

Dans la bibliothèque de périphériques standard STM32, nous devons configurer le GPIO.

Mais il y a 3 fonctions que je ne sais pas comment les configurer;

  • GPIO_InitStructure.GPIO_Speed
  • GPIO_InitStructure.GPIO_OType
  • GPIO_InitStructure.GPIO_PuPd

Dans GPIO_Speed , vous avez le choix entre 4 paramètres.

GPIO_Speed_2MHz  /*!< Low speed */
GPIO_Speed_25MHz /*!< Medium speed */
GPIO_Speed_50MHz /*!< Fast speed */
GPIO_Speed_100MHz

Comment savoir quelle vitesse choisir? Y at-il des avantages ou des inconvénients à utiliser une vitesse élevée ou faible? (par exemple: consommation d'énergie?)

Dans GPIO_OType , il y a 2 paramètres à choisir.

GPIO_OType_PP // Push pull
GPIO_OType_OD // Open drain

Comment savoir lequel choisir? et qu'est-ce que le drain ouvert et le push pull?

Dans GPIO_PuPd , il y a 3 paramètres à choisir.

GPIO_PuPd_NOPULL // No pull
GPIO_PuPd_UP     // Pull up
GPIO_PuPd_DOWN   // Pull down

Je pense que ces paramètres sont liés à la configuration initiale du push pull.


Connexes: comment forcer explicitement le mode « drain ouvert » sur les micro - contrôleurs qui ne supportent pas nativement, comme AVR / Arduino, PIC, etc: electronics.stackexchange.com/a/354993/26234
Gabriel Staples

Réponses:


45
  • GPIO_PuPd (Pull-up / Pull-down)

    Dans les circuits numériques, il est important que les lignes de signal ne puissent jamais "flotter". C'est-à-dire qu'ils doivent toujours être dans un état haut ou bas. Lorsqu’il est flottant, l’état est indéterminé et pose différents types de problèmes.

    La solution consiste à ajouter une résistance de la ligne de signal à Vcc ou à Gnd. Ainsi, si la ligne n'est pas activement pilotée haut ou bas, la résistance risque de dériver à un niveau connu.

    L'ARM (et d'autres microcontrôleurs) possède des circuits intégrés pour le faire. De cette façon, vous n'avez pas besoin d'ajouter une autre partie à votre circuit. Si vous choisissez "GPIO_PuPd_UP", par exemple, il est équivalent d'ajouter une résistance entre la ligne de signal et Vcc.

  • GPIO_OType (Type de sortie):

    Push-Pull: C'est le type de sortie que la plupart des gens considèrent comme "standard". Lorsque la sortie devient basse, il est activement "tiré" à la terre. Inversement, lorsque la sortie est réglée sur haut, elle est activement "poussée" vers Vcc. Simplifié, ça ressemble à ça:

    pushpull

    En revanche, une sortie Open-Drain n’est active que dans un sens. Il peut tirer la goupille vers le sol, mais il ne peut pas la pousser haut. Imaginez l'image précédente, mais sans le MOSFET supérieur. Lorsqu'il ne tire pas à la terre, le MOSFET est simplement non conducteur, ce qui provoque la sortie de la sortie:

    opendrain

    Pour ce type de sortie, il faut ajouter une résistance de rappel au circuit, ce qui fera monter la ligne quand elle ne sera pas asservie. Vous pouvez le faire avec un composant externe ou en définissant la valeur GPIO_PuPd sur GPIO_PuPd_UP.

    Le nom vient du fait que le drain du MOSFET n'est connecté à rien en interne. Ce type de sortie est également appelé "collecteur ouvert" lorsqu’on utilise un BJT au lieu d’un MOSFET.

  • GPIO_Speed

    Fondamentalement, cela contrôle la vitesse de balayage (le temps de montée et le temps de descente) du signal de sortie. Plus la vitesse de balayage est rapide, plus le circuit émet de bruit. Il est judicieux de maintenir la vitesse de balayage lente et de ne l'augmenter que si vous avez une raison spécifique.


Merci! pour la bonne réponse;), est-ce que ça vous dérange d'expliquer un peu plus sur différents problèmes quand il est en état de flottement?
Tim

3
L'idée est que rester pendant un certain temps à une tension d'entrée intermédiaire peut activer partiellement les FET supérieur et inférieur dans un bloc d'entrée et court-circuiter l'alimentation à travers eux, entraînant une consommation excessive d'énergie (ou dans des cas particulièrement graves). ) potentiellement des dommages.
Chris Stratton

@ Tim Oui, ce que Chris Stratton vient de dire :)
bitsmack

3
@ Tim En outre, lorsque les lignes sont flottantes, il est très facile de perturber les niveaux de tension. Agiter simplement votre main autour du circuit peut changer l'état de l'entrée, à cause des interactions capacitives ...
bitsmack

1
@ Tim Cela dépend vraiment de l'application. Si vous lisez un commutateur (ou un bouton), cela n'a pas vraiment d'importance. Si vous vous connectez à d'autres composants, cela dépend de l'interface. Par exemple, pour les communications SPI, la ligne CS est basse active. Dans ce cas, vous voudriez une résistance de rappel, afin que le CS ne baisse jamais par inadvertance. Vous pensez peut-être que cela n'est pas nécessaire si vous conduisez toujours activement la ligne de commande avec un microcontrôleur. Mais qu'en est-il avant que le microcontrôleur s'initialise? Ou si ça réinitialise? La résistance de
rappel

5

La vitesse GPIO est la fréquence maximale que le GPIO peut produire. Des réglages plus faibles peuvent économiser de l’énergie.

Le type de sortie indique si la broche affiche des hauts et des bas (push-pull) ou si la sortie active la grille d'un FET attaché à la broche au niveau du drain (drain ouvert). Cela peut être pratique si vous avez besoin d'une broche attachée pour pouvoir tirer un bus sans avoir à court-circuiter les autres broches.

Les résistances tirées fixent la sortie des broches au rail d’alimentation, et tirez-la vers le bas pour la relier à la terre. Cela permet, entre autres, de contrôler la tension de la broche même si le bit est dans un état haute impédance. Il est important de faire des choses comme utiliser un commutateur ponctuel pour modifier une valeur d’entrée numérique. Même avec le commutateur ouvert, l'entrée est prévisible.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.