01. GPIO固件库概述stm32f4xx_gpio.h GPIO相关函数和类型的声明stm32f4xx_gpio.c GPIO相关函数具体实现。02. GPIO相关类型GPIO相关的类型几乎都在stm32f4xx_gpio.h文件中。GPIO的模式- /**
- * @brief GPIO Configuration Mode enumeration
- */
- typedef enum
- {
- GPIO_Mode_IN = 0x00, /*!< GPIO Input Mode */
- GPIO_Mode_OUT = 0x01, /*!< GPIO Output Mode */
- GPIO_Mode_AF = 0x02, /*!< GPIO Alternate function Mode */
- GPIO_Mode_AN = 0x03 /*!< GPIO Analog Mode */
- }GPIOMode_TypeDef;
- #define IS_GPIO_MODE(MODE) (((MODE) == GPIO_Mode_IN) || ((MODE) == GPIO_Mode_OUT) || \
- ((MODE) == GPIO_Mode_AF)|| ((MODE) == GPIO_Mode_AN))
复制代码 GPIO输出类型- /**
- * @brief GPIO Output type enumeration
- */
- typedef enum
- {
- GPIO_OType_PP = 0x00,
- GPIO_OType_OD = 0x01
- }GPIOOType_TypeDef;
- #define IS_GPIO_OTYPE(OTYPE) (((OTYPE) == GPIO_OType_PP) || ((OTYPE) == GPIO_OType_OD))
复制代码 GPIO输出速度- /**
- * @brief GPIO Output Maximum frequency enumeration
- */
- typedef enum
- {
- GPIO_Low_Speed = 0x00, /*!< Low speed */
- GPIO_Medium_Speed = 0x01, /*!< Medium speed */
- GPIO_Fast_Speed = 0x02, /*!< Fast speed */
- GPIO_High_Speed = 0x03 /*!< High speed */
- }GPIOSpeed_TypeDef;
- /* Add legacy definition */
- #define GPIO_Speed_2MHz GPIO_Low_Speed
- #define GPIO_Speed_25MHz GPIO_Medium_Speed
- #define GPIO_Speed_50MHz GPIO_Fast_Speed
- #define GPIO_Speed_100MHz GPIO_High_Speed
- #define IS_GPIO_SPEED(SPEED) (((SPEED) == GPIO_Low_Speed) || ((SPEED) == GPIO_Medium_Speed) || \
- ((SPEED) == GPIO_Fast_Speed)|| ((SPEED) == GPIO_High_Speed))
复制代码 GPIO上下拉- /**
- * @brief GPIO Configuration PullUp PullDown enumeration
- */
- typedef enum
- {
- GPIO_PuPd_NOPULL = 0x00,
- GPIO_PuPd_UP = 0x01,
- GPIO_PuPd_DOWN = 0x02
- }GPIOPuPd_TypeDef;
- #define IS_GPIO_PUPD(PUPD) (((PUPD) == GPIO_PuPd_NOPULL) || ((PUPD) == GPIO_PuPd_UP) || \
- ((PUPD) == GPIO_PuPd_DOWN))
复制代码 GPIO置位和复位- /**
- * @brief GPIO Bit SET and Bit RESET enumeration
- */
- typedef enum
- {
- Bit_RESET = 0,
- Bit_SET
- }BitAction;
- #define IS_GPIO_BIT_ACTION(ACTION) (((ACTION) == Bit_RESET) || ((ACTION) == Bit_SET))
复制代码 GPIO初始化结构体类型声明- /**
- * @brief GPIO Init structure definition
- */
- typedef struct
- {
- uint32_t GPIO_Pin; /*!< Specifies the GPIO pins to be configured.
- This parameter can be any value of @ref GPIO_pins_define */
- GPIOMode_TypeDef GPIO_Mode; /*!< Specifies the operating mode for the selected pins.
- This parameter can be a value of @ref GPIOMode_TypeDef */
- GPIOSpeed_TypeDef GPIO_Speed; /*!< Specifies the speed for the selected pins.
- This parameter can be a value of @ref GPIOSpeed_TypeDef */
- GPIOOType_TypeDef GPIO_OType; /*!< Specifies the operating output type for the selected pins.
- This parameter can be a value of @ref GPIOOType_TypeDef */
- GPIOPuPd_TypeDef GPIO_PuPd; /*!< Specifies the operating Pull-up/Pull down for the selected pins.
- This parameter can be a value of @ref GPIOPuPd_TypeDef */
- }GPIO_InitTypeDef;
复制代码 03. GPIO相关宏判断是否为合法的GPIO外设- #define IS_GPIO_ALL_PERIPH(PERIPH) (((PERIPH) == GPIOA) || \
- ((PERIPH) == GPIOB) || \
- ((PERIPH) == GPIOC) || \
- ((PERIPH) == GPIOD) || \
- ((PERIPH) == GPIOE) || \
- ((PERIPH) == GPIOF) || \
- ((PERIPH) == GPIOG) || \
- ((PERIPH) == GPIOH) || \
- ((PERIPH) == GPIOI) || \
- ((PERIPH) == GPIOJ) || \
- ((PERIPH) == GPIOK))
复制代码 GPIO合法的引脚- /** @defgroup GPIO_pins_define
- * @{
- */
- #define GPIO_Pin_0 ((uint16_t)0x0001) /* Pin 0 selected */
- #define GPIO_Pin_1 ((uint16_t)0x0002) /* Pin 1 selected */
- #define GPIO_Pin_2 ((uint16_t)0x0004) /* Pin 2 selected */
- #define GPIO_Pin_3 ((uint16_t)0x0008) /* Pin 3 selected */
- #define GPIO_Pin_4 ((uint16_t)0x0010) /* Pin 4 selected */
- #define GPIO_Pin_5 ((uint16_t)0x0020) /* Pin 5 selected */
- #define GPIO_Pin_6 ((uint16_t)0x0040) /* Pin 6 selected */
- #define GPIO_Pin_7 ((uint16_t)0x0080) /* Pin 7 selected */
- #define GPIO_Pin_8 ((uint16_t)0x0100) /* Pin 8 selected */
- #define GPIO_Pin_9 ((uint16_t)0x0200) /* Pin 9 selected */
- #define GPIO_Pin_10 ((uint16_t)0x0400) /* Pin 10 selected */
- #define GPIO_Pin_11 ((uint16_t)0x0800) /* Pin 11 selected */
- #define GPIO_Pin_12 ((uint16_t)0x1000) /* Pin 12 selected */
- #define GPIO_Pin_13 ((uint16_t)0x2000) /* Pin 13 selected */
- #define GPIO_Pin_14 ((uint16_t)0x4000) /* Pin 14 selected */
- #define GPIO_Pin_15 ((uint16_t)0x8000) /* Pin 15 selected */
- #define GPIO_Pin_All ((uint16_t)0xFFFF) /* All pins selected */
- #define GPIO_PIN_MASK ((uint32_t)0x0000FFFF) /* PIN mask for assert test */
- #define IS_GPIO_PIN(PIN) (((PIN) & GPIO_PIN_MASK ) != (uint32_t)0x00)
- #define IS_GET_GPIO_PIN(PIN) (((PIN) == GPIO_Pin_0) || \
- ((PIN) == GPIO_Pin_1) || \
- ((PIN) == GPIO_Pin_2) || \
- ((PIN) == GPIO_Pin_3) || \
- ((PIN) == GPIO_Pin_4) || \
- ((PIN) == GPIO_Pin_5) || \
- ((PIN) == GPIO_Pin_6) || \
- ((PIN) == GPIO_Pin_7) || \
- ((PIN) == GPIO_Pin_8) || \
- ((PIN) == GPIO_Pin_9) || \
- ((PIN) == GPIO_Pin_10) || \
- ((PIN) == GPIO_Pin_11) || \
- ((PIN) == GPIO_Pin_12) || \
- ((PIN) == GPIO_Pin_13) || \
- ((PIN) == GPIO_Pin_14) || \
- ((PIN) == GPIO_Pin_15))
复制代码 GPIO合法的引脚源- /** @defgroup GPIO_Pin_sources
- * @{
- */
- #define GPIO_PinSource0 ((uint8_t)0x00)
- #define GPIO_PinSource1 ((uint8_t)0x01)
- #define GPIO_PinSource2 ((uint8_t)0x02)
- #define GPIO_PinSource3 ((uint8_t)0x03)
- #define GPIO_PinSource4 ((uint8_t)0x04)
- #define GPIO_PinSource5 ((uint8_t)0x05)
- #define GPIO_PinSource6 ((uint8_t)0x06)
- #define GPIO_PinSource7 ((uint8_t)0x07)
- #define GPIO_PinSource8 ((uint8_t)0x08)
- #define GPIO_PinSource9 ((uint8_t)0x09)
- #define GPIO_PinSource10 ((uint8_t)0x0A)
- #define GPIO_PinSource11 ((uint8_t)0x0B)
- #define GPIO_PinSource12 ((uint8_t)0x0C)
- #define GPIO_PinSource13 ((uint8_t)0x0D)
- #define GPIO_PinSource14 ((uint8_t)0x0E)
- #define GPIO_PinSource15 ((uint8_t)0x0F)
- #define IS_GPIO_PIN_SOURCE(PINSOURCE) (((PINSOURCE) == GPIO_PinSource0) || \
- ((PINSOURCE) == GPIO_PinSource1) || \
- ((PINSOURCE) == GPIO_PinSource2) || \
- ((PINSOURCE) == GPIO_PinSource3) || \
- ((PINSOURCE) == GPIO_PinSource4) || \
- ((PINSOURCE) == GPIO_PinSource5) || \
- ((PINSOURCE) == GPIO_PinSource6) || \
- ((PINSOURCE) == GPIO_PinSource7) || \
- ((PINSOURCE) == GPIO_PinSource8) || \
- ((PINSOURCE) == GPIO_PinSource9) || \
- ((PINSOURCE) == GPIO_PinSource10) || \
- ((PINSOURCE) == GPIO_PinSource11) || \
- ((PINSOURCE) == GPIO_PinSource12) || \
- ((PINSOURCE) == GPIO_PinSource13) || \
- ((PINSOURCE) == GPIO_PinSource14) || \
- ((PINSOURCE) == GPIO_PinSource15))
复制代码 04. GPIO相关函数- /* Function used to set the GPIO configuration to the default reset state ****/
- //配置GPIO为默认状态
- void GPIO_DeInit(GPIO_TypeDef* GPIOx);
- /* Initialization and Configuration functions *********************************/
- //GPIO初始化
- void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
- //GPIO结构体初始化
- void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct);
- //GPIO锁配置
- void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
- /* GPIO Read and Write functions **********************************************/
- //GPIO读写函数
- uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
- uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);
- uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
- uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);
- void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
- void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
- void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);
- void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);
- void GPIO_ToggleBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
- /* GPIO Alternate functions configuration function ****************************/
- void GPIO_PinAFConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinSource, uint8_t GPIO_AF);
复制代码 05. GPIO其它相关stm32f4xx.h文件中通用GPIO结构体封装- typedef struct
- {
- __IO uint32_t MODER; /*!< GPIO port mode register, Address offset: 0x00 */
- __IO uint32_t OTYPER; /*!< GPIO port output type register, Address offset: 0x04 */
- __IO uint32_t OSPEEDR; /*!< GPIO port output speed register, Address offset: 0x08 */
- __IO uint32_t PUPDR; /*!< GPIO port pull-up/pull-down register, Address offset: 0x0C */
- __IO uint32_t IDR; /*!< GPIO port input data register, Address offset: 0x10 */
- __IO uint32_t ODR; /*!< GPIO port output data register, Address offset: 0x14 */
- __IO uint16_t BSRRL; /*!< GPIO port bit set/reset low register, Address offset: 0x18 */
- __IO uint16_t BSRRH; /*!< GPIO port bit set/reset high register, Address offset: 0x1A */
- __IO uint32_t LCKR; /*!< GPIO port configuration lock register, Address offset: 0x1C */
- __IO uint32_t AFR[2]; /*!< GPIO alternate function registers, Address offset: 0x20-0x24 */
- } GPIO_TypeDef;
复制代码 GPIO基地址- /*!< AHB1 peripherals */
- #define GPIOA_BASE (AHB1PERIPH_BASE + 0x0000)
- #define GPIOB_BASE (AHB1PERIPH_BASE + 0x0400)
- #define GPIOC_BASE (AHB1PERIPH_BASE + 0x0800)
- #define GPIOD_BASE (AHB1PERIPH_BASE + 0x0C00)
- #define GPIOE_BASE (AHB1PERIPH_BASE + 0x1000)
- #define GPIOF_BASE (AHB1PERIPH_BASE + 0x1400)
- #define GPIOG_BASE (AHB1PERIPH_BASE + 0x1800)
- #define GPIOH_BASE (AHB1PERIPH_BASE + 0x1C00)
- #define GPIOI_BASE (AHB1PERIPH_BASE + 0x2000)
- #define GPIOJ_BASE (AHB1PERIPH_BASE + 0x2400)
- #define GPIOK_BASE (AHB1PERIPH_BASE + 0x2800)
复制代码 GPIO起始地址- #define GPIOA ((GPIO_TypeDef *) GPIOA_BASE)
- #define GPIOB ((GPIO_TypeDef *) GPIOB_BASE)
- #define GPIOC ((GPIO_TypeDef *) GPIOC_BASE)
- #define GPIOD ((GPIO_TypeDef *) GPIOD_BASE)
- #define GPIOE ((GPIO_TypeDef *) GPIOE_BASE)
- #define GPIOF ((GPIO_TypeDef *) GPIOF_BASE)
- #define GPIOG ((GPIO_TypeDef *) GPIOG_BASE)
- #define GPIOH ((GPIO_TypeDef *) GPIOH_BASE)
- #define GPIOI ((GPIO_TypeDef *) GPIOI_BASE)
- #define GPIOJ ((GPIO_TypeDef *) GPIOJ_BASE)
- #define GPIOK ((GPIO_TypeDef *) GPIOK_BASE)
复制代码 GPIO寄存器相关位GPIO全部挂载AHB1总线上- /******************** Bit definition for RCC_AHB1ENR register ***************/
- #define RCC_AHB1ENR_GPIOAEN ((uint32_t)0x00000001)
- #define RCC_AHB1ENR_GPIOBEN ((uint32_t)0x00000002)
- #define RCC_AHB1ENR_GPIOCEN ((uint32_t)0x00000004)
- #define RCC_AHB1ENR_GPIODEN ((uint32_t)0x00000008)
- #define RCC_AHB1ENR_GPIOEEN ((uint32_t)0x00000010)
- #define RCC_AHB1ENR_GPIOFEN ((uint32_t)0x00000020)
- #define RCC_AHB1ENR_GPIOGEN ((uint32_t)0x00000040)
- #define RCC_AHB1ENR_GPIOHEN ((uint32_t)0x00000080)
- #define RCC_AHB1ENR_GPIOIEN ((uint32_t)0x00000100)
- #define RCC_AHB1ENR_GPIOJEN ((uint32_t)0x00000200)
- #define RCC_AHB1ENR_GPIOKEN ((uint32_t)0x00000400)
复制代码 |