GPIO : comparaison F1 vs L4

Famille F1 (exemple : STM32F103)

Bits de configuration

Chaque pin de GPIO a :
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 :

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.