#include "stm32c0xx_hal.h"
// Definição dos pinos para a placa Nucleo
#define LED_VERMELHO GPIO_PIN_0
#define LED_AMARELO GPIO_PIN_1
#define LED_VERDE GPIO_PIN_4
#define LED_PORT GPIOA
#define BOTAO_PEDESTRE GPIO_PIN_5
//Variavel global volatil (avisa ao compilador que variavel muda dentro de uma interrupção)
volatile uint8_t pedestre_solicitou = 0;
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
int main(void) {
// 1. Inicializa a camada de abstração de hardware (HAL)
HAL_Init();
// 2. Configura os pinos PA0, PA1 e PA4 como saídas digitais
MX_GPIO_Init();
// Estado inicial: trafego LIVRE, verde sempre ligado
HAL_GPIO_WritePin(LED_PORT, LED_VERDE, GPIO_PIN_SET);
HAL_GPIO_WritePin(LED_PORT, LED_AMARELO, GPIO_PIN_RESET);
HAL_GPIO_WritePin(LED_PORT, LED_VERMELHO, GPIO_PIN_RESET);
// 3. Loop Infinito do Semáforo
while (1) {
// --- ESTADO 1: VERDE LIGADO (3 segundos) ---
HAL_GPIO_WritePin(LED_PORT, LED_VERDE, GPIO_PIN_SET);
HAL_GPIO_WritePin(LED_PORT, LED_AMARELO, GPIO_PIN_RESET);
HAL_GPIO_WritePin(LED_PORT, LED_VERMELHO, GPIO_PIN_RESET);
// --- ESTADO 2: AMARELO LIGADO (2 segundos) ---
HAL_GPIO_WritePin(LED_PORT, LED_VERDE, GPIO_PIN_RESET);
HAL_GPIO_WritePin(LED_PORT, LED_AMARELO, GPIO_PIN_SET);
HAL_GPIO_WritePin(LED_PORT, LED_VERMELHO, GPIO_PIN_RESET);
// --- ESTADO 3: VERMELHO LIGADO (3 segundos) ---
HAL_GPIO_WritePin(LED_PORT, LED_VERDE, GPIO_PIN_RESET);
HAL_GPIO_WritePin(LED_PORT, LED_AMARELO, GPIO_PIN_RESET);
HAL_GPIO_WritePin(LED_PORT, LED_VERMELHO, GPIO_PIN_SET);
} // Fim do Loop while
} // Fim main()
// Inicialização dos pinos GPIO adaptada para a arquitetura STM32C0
static void MX_GPIO_Init(void) {
GPIO_InitTypeDef GPIO_InitStruct = {0};
// Ativa o relógio (clock) elétrico para o barramento do GPIOA
__HAL_RCC_GPIOA_CLK_ENABLE();
// Configura os pinos como saída digital Push-Pull
GPIO_InitStruct.Pin = LED_VERMELHO | LED_AMARELO | LED_VERDE;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(LED_PORT, &GPIO_InitStruct);
}