GPIO简介
stm32f1xx_hal_gpio_ex.h的拓展API包含AFIO相关的操作
cubeMX配置
- PIN配置
- GPIO_Input:输入(上拉/下拉/浮空)
- GPIO_Output:输出(推挽/开漏)
- GPIO_Analog:模拟输入
- GPIO_EXTIx:外部中断
- Reset_State:复位
- EVENTOUT:事件输出(通过AFIO重映射将输出一个脉冲)
- GPIO模式
-
GPIO output level
High:GPIO输出初始化为高电平
Low:GPIO输出初始化为低电平
-
GPIO mode
Output Push Pull:推挽输出,能输出高低电平,且高低电平都有驱动能力。
Output Open Drain:开漏输出,只能输出低电平。
Analog mode:模拟输入,ADC采样信号输入引脚的配置模式。
Alternate Function Push Pull:复用推挽输出。
Input mode:输入模式,配合No pull-up/pull-down。
-
GPIO Pull-up/Pul-down
No pull-up/pull-down:无内部上拉或下拉
Pull-up:内部上拉
Pull-down:内部下拉
-
Maximum output speed
Low:低速,GPIO_Speed_2MHz
Medium:中速,GPIO_Speed_10MHz
High:高速,GPIO_Speed_50MHz
-
User Label:用户标签,可以按照需要给引脚命名
user Label会在main.h中进行宏定义,将GPIO宏定义为 user label
HAL库
GPIO类型定义
- 引脚状态
typedef enum
{
GPIO_PIN_RESET = 0u,
GPIO_PIN_SET
} GPIO_PinState;
-
引脚选择
GPIO_PIN_x/ALL
:选择PIN
GPIO_TypeDef
:选择GPIOx -
引脚选择
GPIO_MODE_INPUT
:浮空输入
GPIO_MODE_OUTPUT_PP
:推挽输出
GPIO_MODE_OUTPUT_OD
:开漏输出
GPIO_MODE_AF_PP
:复用推挽输出
GPIO_MODE_AF_OD
:复用开漏输出
GPIO_MODE_ANALOG
:模拟输入
GPIO_MODE_IT_RISING
:外部中断(上升沿触发)
GPIO_MODE_IT_FALLING
:外部中断(下降沿触发)
GPIO_MODE_IT_RISING_FALLING
:外部中断(双边沿触发)
GPIO_MODE_EVT_RISING
:外部事件(上升沿触发)
GPIO_MODE_EVT_FALLING
:外部事件(下降沿触发)
GPIO_MODE_EVT_RISING_FALLING
:外部事件(双边沿触发)
外部事件模式不会产生中断,只置中断标志位,用于检测
GPIO函数
初始化函数
// 初始化
void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init);
// 复位
void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin);
GPIO控制
// 读取引脚电平
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);
GPIO外部中断
// 外部中断
void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin);
// 中断处理回调函数(可自定义)
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin);
自锁操作
// GPIO的锁定机制
HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);
------ BY Flier
2023.10.2