#pragma once #include "../chip/iflytop_no_os.h" namespace iflytop { #define STM32_GPIO_LISTENER_NUM 10 class STM32_GPIO; class STM32_GPIO_LISTENER; class STM32_GPIO { public: typedef enum { kRisingIrqEvent, kFallingIrqEvent, } IrqTypeEvent_t; typedef enum { kOutput_nopull, kOutput_pullup, kOutput_pulldown, kOutput_od, kInput_noIrq, kInput_risingIrq, kInput_fallingIrq, kInput_risingAndFallingIrq, } GPIOMode_t; private: const char *m_name; GPIO_TypeDef *m_gpio; uint16_t m_pin; GPIOMode_t m_mode; bool m_mirror; bool lastLevel; STM32_GPIO_LISTENER *m_listener; private: void init(GPIOMode_t gpiomode, bool mirror, bool initLevel); public: STM32_GPIO(const char *name, GPIO_TypeDef *gpio, uint16_t pin) : m_name(name), m_gpio(gpio), m_pin(pin) { m_mirror = false; } void initAsOutput(GPIOMode_t gpiomode, bool mirror, bool initLevel); void initAsOutput(bool initLevel); void initAsInput(GPIOMode_t gpiomode, bool mirror); void initAsInput(); void initAsMirrorInput(); void regListener(STM32_GPIO_LISTENER *listener); bool isMirror(); bool isItRisingEXITGPIO(); bool isItFallingEXITGPIO(); bool isItRisingAndItFallingEXITGPIO(); /******************************************************************************* * 基本状态读写 * *******************************************************************************/ bool getState(); uint32_t getStateUint32(); bool setState(bool state); void toggleState(); /******************************************************************************* * 辅助方法 * *******************************************************************************/ IRQn_Type getEXTIIRQn(); GPIO_TypeDef *getPort() { return m_gpio; } uint16_t getPin() { return m_pin; } bool tryTriggerIRQ(uint16_t GPIO_Pin); private: bool enableClock(); }; class STM32_GPIO_LISTENER { public: virtual void STM32_GPIO_onIRQ(STM32_GPIO *GPIO_Pin, STM32_GPIO::IrqTypeEvent_t irqevent) {} }; #ifdef GPIOA #ifdef GPIO_PIN_0 extern STM32_GPIO PA0; #endif #ifdef GPIO_PIN_1 extern STM32_GPIO PA1; #endif #ifdef GPIO_PIN_2 extern STM32_GPIO PA2; #endif #ifdef GPIO_PIN_3 extern STM32_GPIO PA3; #endif #ifdef GPIO_PIN_4 extern STM32_GPIO PA4; #endif #ifdef GPIO_PIN_5 extern STM32_GPIO PA5; #endif #ifdef GPIO_PIN_6 extern STM32_GPIO PA6; #endif #ifdef GPIO_PIN_7 extern STM32_GPIO PA7; #endif #ifdef GPIO_PIN_8 extern STM32_GPIO PA8; #endif #ifdef GPIO_PIN_9 extern STM32_GPIO PA9; #endif #ifdef GPIO_PIN_10 extern STM32_GPIO PA10; #endif #ifdef GPIO_PIN_11 extern STM32_GPIO PA11; #endif #ifdef GPIO_PIN_12 extern STM32_GPIO PA12; #endif #ifdef GPIO_PIN_13 extern STM32_GPIO PA13; #endif #ifdef GPIO_PIN_14 extern STM32_GPIO PA14; #endif #ifdef GPIO_PIN_15 extern STM32_GPIO PA15; #endif #endif #ifdef GPIOB #ifdef GPIO_PIN_0 extern STM32_GPIO PB0; #endif #ifdef GPIO_PIN_1 extern STM32_GPIO PB1; #endif #ifdef GPIO_PIN_2 extern STM32_GPIO PB2; #endif #ifdef GPIO_PIN_3 extern STM32_GPIO PB3; #endif #ifdef GPIO_PIN_4 extern STM32_GPIO PB4; #endif #ifdef GPIO_PIN_5 extern STM32_GPIO PB5; #endif #ifdef GPIO_PIN_6 extern STM32_GPIO PB6; #endif #ifdef GPIO_PIN_7 extern STM32_GPIO PB7; #endif #ifdef GPIO_PIN_8 extern STM32_GPIO PB8; #endif #ifdef GPIO_PIN_9 extern STM32_GPIO PB9; #endif #ifdef GPIO_PIN_10 extern STM32_GPIO PB10; #endif #ifdef GPIO_PIN_11 extern STM32_GPIO PB11; #endif #ifdef GPIO_PIN_12 extern STM32_GPIO PB12; #endif #ifdef GPIO_PIN_13 extern STM32_GPIO PB13; #endif #ifdef GPIO_PIN_14 extern STM32_GPIO PB14; #endif #ifdef GPIO_PIN_15 extern STM32_GPIO PB15; #endif #endif #ifdef GPIOC #ifdef GPIO_PIN_0 extern STM32_GPIO PC0; #endif #ifdef GPIO_PIN_1 extern STM32_GPIO PC1; #endif #ifdef GPIO_PIN_2 extern STM32_GPIO PC2; #endif #ifdef GPIO_PIN_3 extern STM32_GPIO PC3; #endif #ifdef GPIO_PIN_4 extern STM32_GPIO PC4; #endif #ifdef GPIO_PIN_5 extern STM32_GPIO PC5; #endif #ifdef GPIO_PIN_6 extern STM32_GPIO PC6; #endif #ifdef GPIO_PIN_7 extern STM32_GPIO PC7; #endif #ifdef GPIO_PIN_8 extern STM32_GPIO PC8; #endif #ifdef GPIO_PIN_9 extern STM32_GPIO PC9; #endif #ifdef GPIO_PIN_10 extern STM32_GPIO PC10; #endif #ifdef GPIO_PIN_11 extern STM32_GPIO PC11; #endif #ifdef GPIO_PIN_12 extern STM32_GPIO PC12; #endif #ifdef GPIO_PIN_13 extern STM32_GPIO PC13; #endif #ifdef GPIO_PIN_14 extern STM32_GPIO PC14; #endif #ifdef GPIO_PIN_15 extern STM32_GPIO PC15; #endif #endif #ifdef GPIOD #ifdef GPIO_PIN_0 extern STM32_GPIO PD0; #endif #ifdef GPIO_PIN_1 extern STM32_GPIO PD1; #endif #ifdef GPIO_PIN_2 extern STM32_GPIO PD2; #endif #ifdef GPIO_PIN_3 extern STM32_GPIO PD3; #endif #ifdef GPIO_PIN_4 extern STM32_GPIO PD4; #endif #ifdef GPIO_PIN_5 extern STM32_GPIO PD5; #endif #ifdef GPIO_PIN_6 extern STM32_GPIO PD6; #endif #ifdef GPIO_PIN_7 extern STM32_GPIO PD7; #endif #ifdef GPIO_PIN_8 extern STM32_GPIO PD8; #endif #ifdef GPIO_PIN_9 extern STM32_GPIO PD9; #endif #ifdef GPIO_PIN_10 extern STM32_GPIO PD10; #endif #ifdef GPIO_PIN_11 extern STM32_GPIO PD11; #endif #ifdef GPIO_PIN_12 extern STM32_GPIO PD12; #endif #ifdef GPIO_PIN_13 extern STM32_GPIO PD13; #endif #ifdef GPIO_PIN_14 extern STM32_GPIO PD14; #endif #ifdef GPIO_PIN_15 extern STM32_GPIO PD15; #endif #endif #ifdef GPIOE #ifdef GPIO_PIN_0 extern STM32_GPIO PE0; #endif #ifdef GPIO_PIN_1 extern STM32_GPIO PE1; #endif #ifdef GPIO_PIN_2 extern STM32_GPIO PE2; #endif #ifdef GPIO_PIN_3 extern STM32_GPIO PE3; #endif #ifdef GPIO_PIN_4 extern STM32_GPIO PE4; #endif #ifdef GPIO_PIN_5 extern STM32_GPIO PE5; #endif #ifdef GPIO_PIN_6 extern STM32_GPIO PE6; #endif #ifdef GPIO_PIN_7 extern STM32_GPIO PE7; #endif #ifdef GPIO_PIN_8 extern STM32_GPIO PE8; #endif #ifdef GPIO_PIN_9 extern STM32_GPIO PE9; #endif #ifdef GPIO_PIN_10 extern STM32_GPIO PE10; #endif #ifdef GPIO_PIN_11 extern STM32_GPIO PE11; #endif #ifdef GPIO_PIN_12 extern STM32_GPIO PE12; #endif #ifdef GPIO_PIN_13 extern STM32_GPIO PE13; #endif #ifdef GPIO_PIN_14 extern STM32_GPIO PE14; #endif #ifdef GPIO_PIN_15 extern STM32_GPIO PE15; #endif #endif #ifdef GPIOF #ifdef GPIO_PIN_0 extern STM32_GPIO PF0; #endif #ifdef GPIO_PIN_1 extern STM32_GPIO PF1; #endif #ifdef GPIO_PIN_2 extern STM32_GPIO PF2; #endif #ifdef GPIO_PIN_3 extern STM32_GPIO PF3; #endif #ifdef GPIO_PIN_4 extern STM32_GPIO PF4; #endif #ifdef GPIO_PIN_5 extern STM32_GPIO PF5; #endif #ifdef GPIO_PIN_6 extern STM32_GPIO PF6; #endif #ifdef GPIO_PIN_7 extern STM32_GPIO PF7; #endif #ifdef GPIO_PIN_8 extern STM32_GPIO PF8; #endif #ifdef GPIO_PIN_9 extern STM32_GPIO PF9; #endif #ifdef GPIO_PIN_10 extern STM32_GPIO PF10; #endif #ifdef GPIO_PIN_11 extern STM32_GPIO PF11; #endif #ifdef GPIO_PIN_12 extern STM32_GPIO PF12; #endif #ifdef GPIO_PIN_13 extern STM32_GPIO PF13; #endif #ifdef GPIO_PIN_14 extern STM32_GPIO PF14; #endif #ifdef GPIO_PIN_15 extern STM32_GPIO PF15; #endif #endif } // namespace iflytop