#include "stm32c0xx_hal.h"
void SystemClock_Config(void);
void Error_Handler(void);
void GPIO_Init(void) {
// Activer l'horloge du port GPIOA
__HAL_RCC_GPIOA_CLK_ENABLE();
// Configurer les broches PA0 et PA1
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1; // Sélectionner PA0 et PA1
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // Mode sortie push-pull
GPIO_InitStruct.Pull = GPIO_NOPULL; // Pas de résistance de pull
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; // Vitesse faible
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); // Initialiser les GPIOs
}
void LED_Blink(void) {
while (1) {
// Éteindre la LED sur PA0 et allumer la LED sur PA1
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET); // PA0 éteinte
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_SET); // PA1 allumée
HAL_Delay(1000); // Délai de 1 seconde
// Allumer la LED sur PA0 et éteindre la LED sur PA1
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET); // PA0 allumée
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET); // PA1 éteinte
HAL_Delay(1000); // Délai de 1 seconde
}
}
int main(void) {
// Initialisation de la HAL et de l'horloge système
HAL_Init();
SystemClock_Config();
// Initialisation des GPIO
GPIO_Init();
// Clignotement des LEDs
LED_Blink();
return 0; // Non atteint
}
void SystemClock_Config(void) {
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
// Configurer l'oscillateur principal
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) {
Error_Handler();
}
// Configurer les horloges
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK) {
Error_Handler();
}
}
void Error_Handler(void) {
// Gestion d'erreur : clignoter une LED ou boucle infinie
while (1) {
// Boucle infinie pour signaler l'erreur
}
}