1#include "stm32_gpio.hpp"
3#ifdef HAL_GPIO_MODULE_ENABLED
7STM32GPIO *STM32GPIO::map[STM32_GPIO_EXTI_NUMBER] = {
nullptr};
15stm32_gpio_exti_t STM32_GPIO_EXTI_GetID(uint16_t pin)
17 uint8_t pin_num = __builtin_ctz(pin);
19 if (pin == 0 || pin_num > 15)
22 return STM32_GPIO_EXTI_NUMBER;
25#if defined(STM32F0) || defined(STM32G0) || defined(STM32L0)
28 return STM32_GPIO_EXTI_0_1;
30 else if (pin_num <= 3)
32 return STM32_GPIO_EXTI_2_3;
36 return STM32_GPIO_EXTI_4_15;
42 return static_cast<stm32_gpio_exti_t
>(pin_num);
44 else if (pin_num <= 9)
46 return STM32_GPIO_EXTI_5_9;
50 return STM32_GPIO_EXTI_10_15;
55 return STM32_GPIO_EXTI_NUMBER;
58extern "C" void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
60 auto id = STM32_GPIO_EXTI_GetID(GPIO_Pin);
61 auto gpio = STM32GPIO::map[id];
65 gpio->callback_.Run(
true);