1#include "stm32_gpio.hpp"
3#ifdef HAL_GPIO_MODULE_ENABLED
10static inline uint8_t STM32_GPIO_PinToLine(uint16_t pin)
12 ASSERT(pin != 0 && (pin & (pin - 1)) == 0);
13 const uint8_t LINE =
static_cast<uint8_t
>(__builtin_ctz(
static_cast<unsigned>(pin)));
18 : port_(port), pin_(pin), irq_(irq)
20 if (irq_ != NonMaskableInt_IRQn)
22 map[STM32_GPIO_PinToLine(pin)] =
this;
28 ASSERT(irq_ != NonMaskableInt_IRQn);
29 HAL_NVIC_EnableIRQ(irq_);
35 ASSERT(irq_ != NonMaskableInt_IRQn);
36 HAL_NVIC_DisableIRQ(irq_);
40extern "C" void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
42 const uint8_t LINE = STM32_GPIO_PinToLine(GPIO_Pin);
43 if (
auto* gpio = STM32GPIO::map[LINE])
45 gpio->callback_.Run(
true);
STM32 GPIO 驱动实现 / STM32 GPIO driver implementation.
STM32GPIO(GPIO_TypeDef *port, uint16_t pin, IRQn_Type irq=NonMaskableInt_IRQn)
构造 GPIO 对象 / Construct GPIO object
ErrorCode DisableInterrupt()
禁用 GPIO 引脚中断。Disables the GPIO pin interrupt.
ErrorCode EnableInterrupt()
使能 GPIO 引脚中断。Enables the GPIO pin interrupt.