BSzFL-Ethernet/Src/board_support.c

73 lines
1.6 KiB
C

#include "board_support.h"
#include <stm32h7xx_hal.h>
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();
}