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
PB14en 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 LED2led_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.