/* STM32 Blue Pill: Blink an LED on PB9 */

#include "stm32f1xx_hal.h"

#define LED1_PIN                               GPIO_PIN_9
#define LED2_PIN                               GPIO_PIN_8
#define LED3_PIN                               GPIO_PIN_7
#define LED4_PIN                               GPIO_PIN_6
#define LED_GPIO_PORT                          GPIOB
#define LED_GPIO_CLK_ENABLE()                  __HAL_RCC_GPIOB_CLK_ENABLE()

int main(void)
{
  HAL_Init();

  LED_GPIO_CLK_ENABLE();

  GPIO_InitTypeDef GPIO_InitStruct;

  GPIO_InitStruct.Pin = LED1_PIN | LED2_PIN | LED3_PIN | LED4_PIN;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_PULLUP;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  HAL_GPIO_Init(LED_GPIO_PORT, &GPIO_InitStruct);

  while (1)
  {
    HAL_GPIO_TogglePin(LED_GPIO_PORT, LED1_PIN);
    HAL_Delay(500);
    HAL_GPIO_TogglePin(LED_GPIO_PORT, LED1_PIN);
    HAL_GPIO_TogglePin(LED_GPIO_PORT, LED2_PIN);
    HAL_Delay(500);
    HAL_GPIO_TogglePin(LED_GPIO_PORT, LED2_PIN);
    HAL_GPIO_TogglePin(LED_GPIO_PORT, LED3_PIN);
    HAL_Delay(500);
    HAL_GPIO_TogglePin(LED_GPIO_PORT, LED3_PIN);
    HAL_GPIO_TogglePin(LED_GPIO_PORT, LED4_PIN);
    HAL_Delay(500);
    HAL_GPIO_TogglePin(LED_GPIO_PORT, LED4_PIN);
  }
}

void SysTick_Handler(void)
{
  HAL_IncTick();
}

void NMI_Handler(void)
{
}

void HardFault_Handler(void)
{
  while (1) {}
}


void MemManage_Handler(void)
{
  while (1) {}
}

void BusFault_Handler(void)
{
  while (1) {}
}

void UsageFault_Handler(void)
{
  while (1) {}
}

void SVC_Handler(void)
{
}


void DebugMon_Handler(void)
{
}

void PendSV_Handler(void)
{
}