41 GPIO(GPIO_TypeDef *port, uint16_t pin) : port_{port}, pin_{pin} {
43 std::find(get_instances().begin(), get_instances().end(),
nullptr);
49 auto gpio = std::find(get_instances().begin(), get_instances().end(),
this);
55 HAL_GPIO_WritePin(port_, pin_,
static_cast<GPIO_PinState
>(state));
58 bool read() {
return HAL_GPIO_ReadPin(port_, pin_); }
60 void toggle() { HAL_GPIO_TogglePin(port_, pin_); }
63 callback_ = std::move(callback);
73 std::function<void()> callback_;
75 static inline std::array<GPIO *, 20> &get_instances() {
76 static std::array<GPIO *, 20> instances{};
80 friend void ::HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin);