Multiplexage des broches

Un microcontrôleur n'a qu'un nombre limité de broches. Pas assez pour pouvoir utiliser tous les périphériques internes. La plupart des broches peuvent donc être configurées pour être utilisées comme des GPIO, port série, port I2C, port SPI, pour USB, etc. Les broches sont aussi groupées par "ports", groupes de 16 broches, pour faciliter leur repèrage. Par exemple, la broche PA5 est la broche 5 du port A.

Notre processeur dispose de neuf ports : GPIOA à GPIOI, mais, en fonction des boîtiers, seulement certaines broches sont accessibles.

Certains contrôleurs permettent à chaque broche d'être configurée pour servir à n'importe quel périphérique (exemple : nRF52840, ESP32), mais ce n'est pas le cas du nôtre. La table 17 de la datasheet du processeur (pages 69 et suivantes) liste, pour chaque broche, les fonctions disponibles dessus.

La fonction qui sera utilisée sur une broche particulière est déterminée par plusieurs registres. Le registre GPIOx_MODER (cf. manuel de référence page 303) détermine si la broche est :

  • une GPIO en entrée,
  • une GPIO en sortie ou bidirectionnelle,
  • une fonction analogique,
  • une fonction spéciale (I2C, SPI…). Dans ce cas, les registres GPIOx_AFRL (pour les broches de 0 à 7) et GPIOx_AFRH (pour les broches de 8 à 15) déterminent la fonction en question. Cf. manuel de référence page 307 pour le layout de ces registres, et la datasheet table 17 page 69 pour la liste des fonctions spéciales (Alternate Functions).

(x = A … I dans les lignes ci-dessus en dessous)

Exemples :

  • Pour utiliser la broche PA5 comme une GPIO en entrée, on écrira 00 dans les bits [11:10] de GPIOA_MODER.
  • Pour utiliser la même broche comme une GPIO en sortie, on écrira 01 dans les bits [11:10] de GPIOA_MODER.
  • Pour utiliser la même broche comme le fil d'horloge du bus SPI1 (Alternate Function 5), on écrira 10 dans les bits [11:10] de GPIOA_MODER, et 0101 dans les bits [23:20] de GPIOA_AFRL.

Pour l'instant, nous allons piloter une seule LED, verte (LED2), branchée sur la broche PB14. Pour allumer cette LED, il faudra mettre la broche PB14 à l'état haut, et pour l'éteindre la mettre à l'état bas.