#include "main.h"
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
GPIO_PinState last_button_state = GPIO_PIN_RESET;
GPIO_PinState current_button_state;
while (1)
{
current_button_state =
HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_9);
/* Detect button press */
if ((current_button_state == GPIO_PIN_SET) &&
(last_button_state == GPIO_PIN_RESET))
{
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_11);
/* Debounce */
HAL_Delay(200);
}
last_button_state = current_button_state;
}
}
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
RCC_OscInitStruct.OscillatorType =
RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState =
RCC_HSE_ON;
RCC_OscInitStruct.HSEPredivValue =
RCC_HSE_PREDIV_DIV1;
RCC_OscInitStruct.HSIState =
RCC_HSI_ON;
RCC_OscInitStruct.PLL.PLLState =
RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource =
RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLMUL =
RCC_PLL_MUL9;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
{
Error_Handler();
}
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_DIV2;
RCC_ClkInitStruct.APB2CLKDivider =
RCC_HCLK_DIV1;
if (HAL_RCC_ClockConfig(
&RCC_ClkInitStruct,
FLASH_LATENCY_2) != HAL_OK)
{
Error_Handler();
}
}
static void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIOA_CLK_ENABLE();
/* =====================================================
PA11 = LED
===================================================== */
HAL_GPIO_WritePin(
GPIOA,
GPIO_PIN_11,
GPIO_PIN_RESET
);
GPIO_InitStruct.Pin =
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(
GPIOA,
&GPIO_InitStruct
);
/* =====================================================
PA9 = BUTTON
===================================================== */
GPIO_InitStruct.Pin =
GPIO_PIN_9;
GPIO_InitStruct.Mode =
GPIO_MODE_INPUT;
GPIO_InitStruct.Pull =
GPIO_PULLDOWN;
GPIO_InitStruct.Speed =
GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(
GPIOA,
&GPIO_InitStruct
);
}
void Error_Handler(void)
{
__disable_irq();
while (1)
{
}
}Loading
stm32-bluepill
stm32-bluepill