#include "stm32c0xx_hal.h"
void SystemClock_Config(void);
#define LED_VERTE_PIN GPIO_PIN_0 // PA0 pour la LED verte
#define LED_ROUGE_PIN GPIO_PIN_1 // PA1 pour la LED rouge
#define LED_ORANGE_PIN GPIO_PIN_4 // PA2 pour la LED orange
#define LED_BLEUE_PIN GPIO_PIN_3 // PA3 pour la LED bleue
// Déclaration des broches pour les boutons
#define BOUTON_INTERNE_PIN GPIO_PIN_0 // PD0 pour le bouton interne
#define BOUTON_EXTERNE_PIN GPIO_PIN_1 // PD1 pour le bouton externe
// Déclaration des ports GPIO correspondants
#define LED_GPIO_PORT GPIOA // Port GPIOA pour les LEDs
#define BOUTON_GPIO_PORT GPIOD // Port GPIOD pour les boutons
void allumerLEDVerte(void);
void allumerLEDRouge(void);
void allumerLEDOrange(void);
void allumerLEDBleue(void);
void eteindreLEDs(void);
void gestionBoutons(void);
// Fonction d'initialisation des GPIO
static void MX_GPIO_Init(void);
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init(); // Ajout de l'initialisation des GPIO
while (1)
{
gestionBoutons();
}
}
void allumerLEDVerte(void)
{
HAL_GPIO_WritePin(LED_GPIO_PORT, LED_VERTE_PIN, GPIO_PIN_SET);
}
// allumer la LED rouge
void allumerLEDRouge(void)
{
HAL_GPIO_WritePin(LED_GPIO_PORT, LED_ROUGE_PIN, GPIO_PIN_SET);
}
// allumer la LED orange
void allumerLEDOrange(void)
{
HAL_GPIO_WritePin(LED_GPIO_PORT, LED_ORANGE_PIN, GPIO_PIN_SET);
}
// allumer la LED bleue
void allumerLEDBleue(void)
{
HAL_GPIO_WritePin(LED_GPIO_PORT, LED_BLEUE_PIN, GPIO_PIN_SET);
}
// éteindre toutes les LEDs
void eteindreLEDs(void)
{
HAL_GPIO_WritePin(LED_GPIO_PORT, LED_VERTE_PIN | LED_ROUGE_PIN | LED_ORANGE_PIN | LED_BLEUE_PIN, GPIO_PIN_RESET);
}
// gestion des boutons
void gestionBoutons(void)
{
// Lire l'état des boutons (PD0 et PD1)
uint8_t etatBoutonInterne = HAL_GPIO_ReadPin(BOUTON_GPIO_PORT, BOUTON_INTERNE_PIN);
uint8_t etatBoutonExterne = HAL_GPIO_ReadPin(BOUTON_GPIO_PORT, BOUTON_EXTERNE_PIN);
// Si le bouton interne ou externe est pressé
if (etatBoutonInterne == GPIO_PIN_RESET || etatBoutonExterne == GPIO_PIN_RESET)
{
// Allumer les LEDs
allumerLEDVerte();
allumerLEDRouge();
allumerLEDOrange();
allumerLEDBleue();
}
else
{
// Éteindre les LEDs
eteindreLEDs();
}
}
// Fonction d'initialisation des GPIO
static void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
// Activer les horloges pour GPIOA (pour les LEDs et les boutons)
__HAL_RCC_GPIOA_CLK_ENABLE();
// Configuration des broches pour les LEDs en sortie push-pull
GPIO_InitStruct.Pin = LED_VERTE_PIN | LED_ROUGE_PIN | LED_ORANGE_PIN | LED_BLEUE_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // Sortie en mode push-pull
GPIO_InitStruct.Pull = GPIO_NOPULL; // Pas de tirage
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; // Vitesse faible
HAL_GPIO_Init(LED_GPIO_PORT, &GPIO_InitStruct);
// Configuration des broches pour les boutons en entrée avec pull-up
GPIO_InitStruct.Pin = BOUTON_INTERNE_PIN | BOUTON_EXTERNE_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT; // Mode entrée
GPIO_InitStruct.Pull = GPIO_PULLUP; // Résistance de tirage vers le haut
HAL_GPIO_Init(BOUTON_GPIO_PORT, &GPIO_InitStruct);
}
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct;
RCC_ClkInitTypeDef RCC_ClkInitStruct;
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();
}
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)
{
// Gérer l'erreur de manière appropriée
while (1)
{
// Boucle infinie pour maintenir le microcontrôleur dans un état d'erreur
}
}
Loading
st-nucleo-c031c6
st-nucleo-c031c6