LED verte

On va déjà commencer par organiser les fichiers de façon propre : chaque périphérique aura son propre fichier source, avec le header associé dans lequel il spécifie les fonctions / variables à exporter. Pour les LED, on créera donc les fichiers led.c et led.h.

Pour chaque périphérique, on créera une fonction d'initialisation (void led_init(void) pour les LED, etc.) qui se chargera d'initialiser le périphérique : activation de l'horloge associée, configuration diverse, etc.

❎ Écrivez une fonction void led_init(), qui

  • active l'horloge du port B dans le registre RCC_*ENR* idoine,
  • configure la broche PB14 en mode sortie.

Les adresses des registres sont obtenues en additionnant une adresse de base (table 1 page 77 du manuel de référence) à un offset donné dans la partie "register map" de chaque périphérique.

❎ Écrivez ensuite les fonctions suivantes :

  • led_g_on() : allume la LED2
  • led_g_off() : éteint la LED2

Indice : la lecture de la documentation du registre GPIOx_BSRR pourra s'avérer utile !

❎ Depuis main, appelez la fonction led_init(), puis faites clignoter la LED2 en faisant des boucles d'attente active ainsi (attention, c'est sale) :

for (int i=0; i<....; i++)
  asm volatile("nop");

On verra plus tard comment implémenter des délais de façon plus précise et (beaucoup) plus propre.