#include "board_support.h" #include void leds_init() { __HAL_RCC_GPIOC_CLK_ENABLE(); GPIO_InitTypeDef init; init.Mode = GPIO_MODE_OUTPUT_PP; init.Pin = GPIO_PIN_2 | GPIO_PIN_3; init.Pull = GPIO_NOPULL; init.Alternate = 0; init.Speed = GPIO_SPEED_LOW; HAL_GPIO_Init(GPIOC, &init); HAL_GPIO_WritePin(GPIOC, init.Pin, GPIO_PIN_SET); } void leds_write(uint8_t idx, bool state) { GPIO_TypeDef *gpio; uint16_t pin; switch (idx) { case LEDS_USER1_GREEN: gpio = GPIOC; pin = GPIO_PIN_3; break; case LEDS_USER2_RED: gpio = GPIOC; pin = GPIO_PIN_2; break; default: break; } HAL_GPIO_WritePin(gpio, pin, state ? GPIO_PIN_SET : GPIO_PIN_RESET); } static EXTI_HandleTypeDef hEXTI13; void btn_init() { // pin initialization __HAL_RCC_GPIOC_CLK_ENABLE(); GPIO_InitTypeDef init; init.Mode = GPIO_MODE_INPUT; init.Pin = GPIO_PIN_13; init.Pull = GPIO_NOPULL; init.Alternate = 0; init.Speed = GPIO_SPEED_LOW; HAL_GPIO_Init(GPIOC, &init); // EXTI13 initialization EXTI_ConfigTypeDef extiConf; extiConf.Line = EXTI_LINE_13; extiConf.GPIOSel = EXTI_GPIOC; extiConf.Trigger = EXTI_TRIGGER_RISING; extiConf.Mode = EXTI_MODE_INTERRUPT; HAL_EXTI_SetConfigLine(&hEXTI13, &extiConf); // enable interrupt source HAL_NVIC_SetPriority(EXTI15_10_IRQn, 12, 0); // some medium-low priority HAL_NVIC_EnableIRQ(EXTI15_10_IRQn); } __weak void btn_cb() { return; } void EXTI15_10_IRQHandler() { HAL_EXTI_ClearPending(&hEXTI13, EXTI_TRIGGER_RISING); // clear interrupt btn_cb(); }