// STM32 Nucleo-L031K6 HAL Blink example
// Simulation: https://wokwi.com/projects/367244067477216257 (original)
#include <stdint.h>
#include <stm32l0xx_hal.h>
// ST Nucleo Green user LED (PB3)
#define LED_PORT GPIOB
#define LED_PIN GPIO_PIN_3
#define LED_PORT_CLK_ENABLE __HAL_RCC_GPIOB_CLK_ENABLE
void SystemClock_Config(void);
void osSystickHandler(void)
{
// 1 Hz blinking:
if ((HAL_GetTick() % 500) == 0)
{
HAL_GPIO_TogglePin(LED_PORT, LED_PIN);
}
}
void initGPIO()
{
GPIO_InitTypeDef GPIO_Config;
GPIO_Config.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_Config.Pull = GPIO_NOPULL;
GPIO_Config.Speed = GPIO_SPEED_FREQ_HIGH;
GPIO_Config.Pin = LED_PIN;
LED_PORT_CLK_ENABLE();
HAL_GPIO_Init(LED_PORT, &GPIO_Config);
// Esta linha ja foi habilitada por LED_PORT_CLK_ENABLE(); poderia ser removida
// __HAL_RCC_GPIOB_CLK_ENABLE();
}
int main(void)
{
HAL_Init();
SystemClock_Config();
initGPIO();
HAL_GPIO_TogglePin(LED_PORT, LED_PIN); // Liga o LED na inicialização
while (1); // Loop infinito para o programa continuar rodando
return 0;
}
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
// RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; // Removido, pois não há periféricos específicos de clock agora.
/** Configure the main internal regulator output voltage
*/
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
/** Initializes the RCC Oscillators according to the specified parameters
in the RCC_OscInitTypeDef structure.
*/
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLLMUL_4;
RCC_OscInitStruct.PLL.PLLDIV = RCC_PLLDIV_2;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
{
Error_Handler();
}
/** Initializes the CPU, AHB and APB buses clocks
*/
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK
| RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK)
{
Error_Handler();
}
// PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART2; // Removido
// PeriphClkInit.Usart2ClockSelection = RCC_USART2CLKSOURCE_PCLK1; // Removido
// if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) // Removido
// {
// Error_Handler();
// }
}
void Error_Handler(void)
{
/* User can add his own implementation to report the HAL error return state */
while(1); // Em caso de erro, o programa trava aqui
}
// Funções de UART e _write() foram removidas
Loading
st-nucleo-l031k6
st-nucleo-l031k6