clignotante.c
Le clignotement de référence en C nu avec la STM32 HAL : la LED broche 5 de la carte bascule toutes les 500 ms grâce au tick SysTick de 1 ms. Le squelette est celui généré par STM32CubeIDE, prêt à compiler.
Matériel requis
Une Nucleo F4 (STM32F401RE/F411RE, Cortex-M4) programmee via ST-LINK (USB), broches 3,3 V. Aucun : la LED utilisateur (LD2 verte, broche PA5) suffit. La carte se programme via son connecteur USB (ST-LINK ou bootloader).
Câblage
Rien à câbler : LED interne sur GPIOA/GPIO_PIN_5, active à l'état HIGH.
Fonctionnement
HAL_Init() configure SysTick (tick 1 ms) ; HAL_GetTick() sert d'horloge non bloquante. HAL_GPIO_WritePin pilote la broche en push-pull. __WFI() endort le CPU entre deux ticks.
Exécution
Creer un projet STM32CubeIDE (selection Nucleo-F401RE ou F411RE), coller le code dans main.c, configurer les peripheriques dans le .ioc, puis Executer > Run. Le terminal serie du ST-LINK affiche les printf a 115200.
Variantes
Créer le projet avec le .ioc fourni par ST (ou un fichier .ioc équivalent), ou passer par la bibliothèque LL pour un code plus léger.
clignotante.c
// Clignotement LED en STM32 HAL (projet genere par STM32CubeIDE/.ioc).
#include "main.h"
/* Broche de la LED utilisateur de la carte. */
#define LED_PORT GPIOA
#define LED_PIN GPIO_PIN_5
/* LED active a l'etat HIGH. */
uint32_t dernierBlink = 0;
uint8_t etat = 0;
int main(void) {
HAL_Init(); // SysTick 1 ms + priorites NVIC
SystemClock_Config(); // horloge generee depuis CubeMX
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
__HAL_RCC_GPIOC_CLK_ENABLE();
__HAL_RCC_GPIOD_CLK_ENABLE();
GPIO_InitTypeDef g = {0};
g.Pin = LED_PIN;
g.Mode = GPIO_MODE_OUTPUT_PP; // sortie push-pull
g.Pull = GPIO_NOPULL;
g.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(LED_PORT, &g);
for (;;) {
if (HAL_GetTick() - dernierBlink >= 500) { // 500 ms
dernierBlink = HAL_GetTick();
etat ^= 1;
HAL_GPIO_WritePin(LED_PORT, LED_PIN, etat ? GPIO_PIN_SET : GPIO_PIN_RESET);
}
__WFI(); // attend l'interruption SysTick : consomme moins
}
}