今天仔细研究了GPIO HAL模块,看看他的定义是什么意思,发出来给大家看一看,希望对大家有一定的帮助。
- /*GPIO初始化结构定义*/
- typedef struct
- {
- uint32_t Pin;/*指定要配置的GPIO引脚。此参数可以是GPIO_pins的任何值*/
- uint32_t Mode;/*指定所选引脚的操作模式。此参数可以是GPIO_mode的值*/
- uint32_t Pull;/*指定所选引脚的上拉或下拉激活。此参数可以是GPIO_pull的值*/
- uint32_t Speed;/*指定选定引脚的速度。此参数可以是GPIO_speed的值*/
- uint32_t Alternate;/*要连接到选定引脚的外围设备此参数可以是GPIOEx_Alternate_function_selection的值*/
- }GPIO_InitTypeDef;
- /*GPIO位设置和位RESET枚举*/
- typedef enum
- {
- GPIO_PIN_RESET = 0U,
- GPIO_PIN_SET
- } GPIO_PinState;
- /*GPIO引脚*/
- #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) /* 选择所有引脚 */
- #define GPIO_PIN_MASK (0x0000FFFFU)/*用于断言测试的PIN掩码*/
- /*
- *GPIO配置模式
- * 元素值约定:0xX0yz00YZ
- * -X:GPIO模式或EXTI模式
- * -y:外部IT或事件触发检测
- * -z:外部IT或事件上的IO配置
- * -Y:输出类型(推挽或漏极开路)
- * -Z:IO方向模式(输入,输出,备用或模拟)
- */
- #define GPIO_MODE_INPUT (0x00000000U) /*输入浮动模式*/
- #define GPIO_MODE_OUTPUT_PP (0x00000001U) /*输出推挽模式*/
- #define GPIO_MODE_OUTPUT_OD (0x00000011U) /*输出漏极开路模式*/
- #define GPIO_MODE_AF_PP (0x00000002U) /*备用功能推拉模式*/
- #define GPIO_MODE_AF_OD (0x00000012U) /*替代功能开漏模式*/
- #define GPIO_MODE_ANALOG (0x00000003U) /*模拟模式*/
- #define GPIO_MODE_IT_RISING (0x10110000U) /*具有上升沿触发检测的外部中断模式*/
- #define GPIO_MODE_IT_FALLING (0x10210000U) /*具有下降沿触发检测的外部中断模式*/
- #define GPIO_MODE_IT_RISING_FALLING (0x10310000U) /*具有上升沿/下降沿触发检测的外部中断模式*/
- #define GPIO_MODE_EVT_RISING (0x10120000U) /*具有上升沿触发检测的外部事件模式*/
- #define GPIO_MODE_EVT_FALLING (0x10220000U) /*具有下降沿触发检测的外部事件模式*/
- #define GPIO_MODE_EVT_RISING_FALLING (0x10320000U) /*具有上升沿/下降沿触发检测的外部事件模式*/
- /*
- *GPIO输出最大频率
- */
- #define GPIO_SPEED_FREQ_LOW (0x00000000U) /*范围最高5MHz*/
- #define GPIO_SPEED_FREQ_MEDIUM (0x00000001U) /*范围5MHz至25MHz*/
- #define GPIO_SPEED_FREQ_HIGH (0x00000002U) /*范围25MHz至50MHz*/
- #define GPIO_SPEED_FREQ_VERY_HIGH (0x00000003U) /*范围50MHz至80MHz*/
- /*
- *GPIO上拉或下拉激活
- */
- #define GPIO_NOPULL (0x00000000U) /*无上拉或下拉激活*/
- #define GPIO_PULLUP (0x00000001U) /*上拉激活*/
- #define GPIO_PULLDOWN (0x00000002U) /*下拉激活*/
- /*
- GPIO引脚安全或非安全属性
- */
- #define GPIO_PIN_SEC (0x00000001U) /*安全引脚属性*/
- #define GPIO_PIN_NSEC (0x00000000U) /*非安全引脚属性*/
- /**
- *检查指定的EXTI行是否声明了上升沿。
- */
- #define __HAL_GPIO_EXTI_GET_RISING_IT(__EXTI_LINE__) (EXTI->RPR1 & (__EXTI_LINE__))
- /**
- *清除EXTI行上升的挂起位。
- */
- #define __HAL_GPIO_EXTI_CLEAR_RISING_IT(__EXTI_LINE__) (EXTI->RPR1 = (__EXTI_LINE__))
- /**
- *检查指定的EXTI行是否已声明下降沿。
- */
- #define __HAL_GPIO_EXTI_GET_FALLING_IT(__EXTI_LINE__) (EXTI->FPR1 & (__EXTI_LINE__))
- /**
- *清除EXTI行下降的挂起位。
- */
- #define __HAL_GPIO_EXTI_CLEAR_FALLING_IT(__EXTI_LINE__) (EXTI->FPR1 = (__EXTI_LINE__))
- /**
- *检查指定的EXTI行是否有效。
- */
- #define __HAL_GPIO_EXTI_GET_IT(__EXTI_LINE__) (__HAL_GPIO_EXTI_GET_RISING_IT(__EXTI_LINE__) || \
- __HAL_GPIO_EXTI_GET_FALLING_IT(__EXTI_LINE__))
- /**
- *清除EXTI行暂挂位。
- */
- #define __HAL_GPIO_EXTI_CLEAR_IT(__EXTI_LINE__) \
- do { \
- __HAL_GPIO_EXTI_CLEAR_RISING_IT(__EXTI_LINE__); \
- __HAL_GPIO_EXTI_CLEAR_FALLING_IT(__EXTI_LINE__); \
- } while(0)
- /**
- *在选定的EXTI行上生成软件中断。
- */
- #define __HAL_GPIO_EXTI_GENERATE_SWIT(__EXTI_LINE__) (EXTI->SWIER1 = (__EXTI_LINE__))
- /**
- *检查是否设置了指定的EXTI行标志。
- */
- #define __HAL_GPIO_EXTI_GET_FLAG(__EXTI_LINE__) __HAL_GPIO_EXTI_GET_IT(__EXTI_LINE__)
- /**
- *清除EXTI行挂起标志。
- */
- #define __HAL_GPIO_EXTI_CLEAR_FLAG(__EXTI_LINE__) __HAL_GPIO_EXTI_CLEAR_IT(__EXTI_LINE__)
- /*私有宏------------------------------------------------------------*/
- #define IS_GPIO_PIN_ACTION(ACTION) (((ACTION) == GPIO_PIN_RESET) || ((ACTION) == GPIO_PIN_SET))
- #define IS_GPIO_PIN(__PIN__) ((((uint32_t)(__PIN__) & GPIO_PIN_MASK) != 0x00U) &&\
- (((uint32_t)(__PIN__) & ~GPIO_PIN_MASK) == 0x00U))
- #define IS_GPIO_MODE(__MODE__) (((__MODE__) == GPIO_MODE_INPUT) ||\
- ((__MODE__) == GPIO_MODE_OUTPUT_PP) ||\
- ((__MODE__) == GPIO_MODE_OUTPUT_OD) ||\
- ((__MODE__) == GPIO_MODE_AF_PP) ||\
- ((__MODE__) == GPIO_MODE_AF_OD) ||\
- ((__MODE__) == GPIO_MODE_IT_RISING) ||\
- ((__MODE__) == GPIO_MODE_IT_FALLING) ||\
- ((__MODE__) == GPIO_MODE_IT_RISING_FALLING) ||\
- ((__MODE__) == GPIO_MODE_EVT_RISING) ||\
- ((__MODE__) == GPIO_MODE_EVT_FALLING) ||\
- ((__MODE__) == GPIO_MODE_EVT_RISING_FALLING) ||\
- ((__MODE__) == GPIO_MODE_ANALOG))
- #define IS_GPIO_SPEED(__SPEED__) (((__SPEED__) == GPIO_SPEED_FREQ_LOW) ||\
- ((__SPEED__) == GPIO_SPEED_FREQ_MEDIUM) ||\
- ((__SPEED__) == GPIO_SPEED_FREQ_HIGH) ||\
- ((__SPEED__) == GPIO_SPEED_FREQ_VERY_HIGH))
- #define IS_GPIO_PULL(__PULL__) (((__PULL__) == GPIO_NOPULL) ||\
- ((__PULL__) == GPIO_PULLUP) || \
- ((__PULL__) == GPIO_PULLDOWN))
- #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
- #define IS_GPIO_PIN_ATTRIBUTES(__ATTRIBUTES__) (((__ATTRIBUTES__) == GPIO_PIN_SEC) ||\
- ((__ATTRIBUTES__) == GPIO_PIN_NSEC))
- #endif /* __ARM_FEATURE_CMSE */
- /*初始化和取消初始化功能*****************************/
- void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init);
- void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin);
- /*IO操作功能*****************************************************/
- GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);
- void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);
- void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);
- HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);
- void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin);
- void HAL_GPIO_EXTI_Rising_Callback(uint16_t GPIO_Pin);
- void HAL_GPIO_EXTI_Falling_Callback(uint16_t GPIO_Pin);
- /*IO属性管理功能*********************************************/
- void HAL_GPIO_ConfigPinAttributes(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, uint32_t PinAttributes);
- HAL_StatusTypeDef HAL_GPIO_GetConfigPinAttributes(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, uint32_t *pPinAttributes);
复制代码
|