GPIO : comparaison F1 vs L4
Famille F1 (exemple : STM32F103)
Bits de configuration
Chaque pin de GPIO a :
- 4 bits de configuration CNF1, CNF0, MODE1, MODE0 dans les registre GPIOx->CRL et GPIOx->CRH
(il faut 2 registres car chaque registre configure 8 pins, et il y a 16 pins dans un port)
- 1 bit de direction de pull resistor (UP ou DOWN) qui est aussi le bit de sortie, dans le registre ODR
La signification individuelle des bits CNF1 et CNF0 est différente selon qu'on est en input (MODE=00) ou output (MODE!=00).
Les bits MODE1 et MODE0 n'ont pas de signification individuelle, la valeur 00 met le port en input, les 3 autres valeurs mettent
le port en output avec différentes options de vitesse (et de consommation).
Configuration au reset
Sauf exception, au reset les GPIO sont configurés en
floating input.
Cela minimise les risques de conflit avec les composants extérieurs,
mais crée une consommation incontrôlée sur les pins non connectées.
Alternate function
En output, le bit CNF1 autorise le contrôle de la pin par un périphérique spécialisé, désigné pour chaque pin à la construction
(voir datasheet)
De plus pour donner plus de flexibilité, on peut pour chaque périphérique concerné choisir une seconde affectation de pin,
c'est "l'alternate de l'alternate".
Ce mécanisme s'appelle "remapping", il se configure pour chaque
périphérique et non pour chaque pin GPIO, dans le registre
AFIO->MAPR.
Famille L4 (exemple : STM32L476)
Bits de configuration
Les fonctions sont plus clairement séparées, chaque pin de GPIO a :
- 2 bits MODE dans le registre GPIOx->MODER
- 00 : digital input
- 01 : digital output
- 10 : alternate function
- 11 : analog input
- 1 bit OT (output type) qui sert à activer le mode open-drain, dans le registre GPIOx->OTYPER
- 2 bits de vitesse dans le registre GPIOx->OSPEEDR
- 2 bits de pullup/down dans le registre GPIOx->PUPDR
Configuration au reset
Sauf exception, au reset les GPIO sont configurés en
analog input.
Cela minimise les risques de conflit avec les composants extérieurs,
ainsi que la consommation sur les pins non connectées.
N.B. Contrairement à la famille F1, le mode analog input peut-être appliqué aux pins "tolérante 5 Volts" dites FT,
même celles qui n'ont pas de fonction analog, dans le seul but de réduire la consommation.
Alternate function
Lorsque le mode Alternate Function est sélectionné (registre GPIOx->MODER),
chaque pin peut être connectée à
un parmi 16 périphériques (au max).
Le choix du périphérique se fait au moyen de 4 bits par pin, dans les registres GPIOx->AFRL et GPIOx->AFRH
(il faut 2 registres car chaque registre configure 8 pins, et il y a 16 pins dans un port)
La liste des périphériques attribués à chaque pin est dans la datasheet.
N.B. la notion de remapping a disparu.