#include <stm32c0xx_hal.h>
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
int main(void) {
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
const struct {
uint16_t Pin;
GPIO_TypeDef *Port;
} segmentor [7U] = { //[i]
{GPIO_PIN_2, GPIOB}, //0 g
{GPIO_PIN_1, GPIOB}, //1 f
{GPIO_PIN_4, GPIOA}, //2 e
{GPIO_PIN_1, GPIOA}, //3 d
{GPIO_PIN_0, GPIOA}, //4 c
{GPIO_PIN_14, GPIOC}, //5 b
{GPIO_PIN_13, GPIOC} //6 a
};
//{GPIO_PIN_11, GPIOB}, --toggle 1
//{GPIO_PIN_2, GPIOA} --toggle 2
while (1) {
// First digit
for(int i=0;i<7;++i) {
GPIO_PinState pin_state = (i==4||i==5?GPIO_PIN_RESET:GPIO_PIN_SET);
HAL_GPIO_WritePin(segmentor[i].Port, segmentor[i].Pin, pin_state);
}
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_11, !HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_11));
HAL_Delay(300);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_11, !HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_11));
HAL_Delay(300);
// Second digit
for(uint8_t i=0;i<7U;i++) {
GPIO_PinState pin_state = (i==6||i==5||i==4||i==3||i==0?GPIO_PIN_RESET:GPIO_PIN_SET);
HAL_GPIO_WritePin(segmentor[i].Port, segmentor[i].Pin, pin_state);
}
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, !HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_2));
HAL_Delay(300);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, !HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_2));
HAL_Delay(300);
}
}
/**
* @brief System Clock Configuration
* @retval None
*/
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;
// Correction : Supprimer la ligne RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
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();
}
}
static void MX_GPIO_Init(void) {
GPIO_InitTypeDef GPIO_InitStruct;
/* GPIO Ports Clock Enable */
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
__HAL_RCC_GPIOC_CLK_ENABLE();
/*Configure GPIO pins : PC13 PC14 */
GPIO_InitStruct.Pin = GPIO_PIN_13|GPIO_PIN_14;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
/*Configure GPIO pins : PA0 PA1 PA2 PA4 */
GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_4;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/*Configure GPIO pins : PB1 PB2 PB11 */
GPIO_InitStruct.Pin = GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_11;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}
void Error_Handler(void) {
// Gérer l'erreur de manière appropriée, par exemple, clignoter une LED d'erreur ou signaler l'erreur via une interface de débogage.
while (1) {
// Boucle infinie pour maintenir le microcontrôleur dans un état d'erreur
}
}
#ifdef USE_FULL_ASSERT
void assert_failed(uint8_t* file, uint32_t line) {
}
#endif /* USE_FULL_ASSERT */