You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
#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
|