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