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.
Réponses:
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:
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:
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.
la source
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.
la source