一、预备知识
上拉/下拉输入:如果你希望你的引脚平时处于高电平用于检测低电平,你就使用 Pull-up。如果你希望你的引脚平时处于低电平用于检测高电平,你就使用 Pull-down。
推挽输出:P-MOS和N-MOS均导通,1为高电平,0为低电平,为强驱动输出模式
开漏输出,P-MOS关闭,N-MOS导通,1为高阻态(相当于断开),0为低电平,只有低电平有驱动能力,可以作为通信协议的驱动方式,也可配合上拉模式输出电平。开漏可以用来连接不同电平的器件,匹配电平(VDD)用的,因为开漏引脚不连接外部的上拉电阻时,只能输出低电平。用在电平不匹配的场合,如需要输出5V 的高电平,就需要在外部一个上拉电阻,电源为 5V,GPIO 设置为开漏模式,当输出高阻态时,由上拉电阻和电源向外输出 5V 电平
注:相对于开漏,推挽更加常用。
复用输出直接由片上外设控制输出而不由寄存器控制,如PWM输出
二、CubeMX参数配置
GPIO output level(输出模式时初始化后的电平)
只有当引脚设置为“GPIO output”时才需要设置
High:GPIO输出初始化为高电平 Low:GPIO输出初始化为低电平
GPIO MODE
Output Push Pull:推挽输出,能输出高低电平,且高低电平都有驱动能力。
Output Open Drain:开漏输出,只能输出低电平,需要借助外部上拉电阻才能输出高电平。
Open Drain模式下逻辑0输出低电平(GND),逻辑1输出为悬空或所外接的电源电压值。
Alternate Function Push Pull:复用推挽输出。
Analog mode:模拟输入,ADC采样信号输入引脚的配置模式。
Input mode:输入模式,配合No pull-up/pull-down可形成GPIO_Mpde_IN_FLOATING、GPIO_Mode_IPD、GPIO_Mode_IPU等不同工作模式
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”
三、关于GPIO的函数
1、HAL_GPIO_Init
void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init)
这个函数主要用来初始化我们需要用到的引脚的工作模式,包括具体引脚的工作速度、是否复用模式、上下拉等等参数。
2、HAL_GPIO_DeInit
void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin)
这个函数的主要功能是将我们在HAL_GPIO_Init函数初始化之后的引脚恢复成默认的状态,即各个寄存器复位时的值。
3、HAL_GPIO_ReadPin
GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
这个函数主要功能是读取我们想要知道的引脚的电平状态、函数返回值为0或1。
4、HAL_GPIO_WritePin
void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)
这个函数主要功能是给某个GPIO写0或1。
5、HAL_GPIO_TogglePin
void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
这个函数用来翻转某个引脚的电平状态。
6、HAL_GPIO_LockPin
HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
这个函数的功能是锁住用户设置的引脚所对应的寄存器某些位,一旦锁住后,就不能再修改,只有复位后才可以重新配置。
7、HAL_GPIO_EXTI_IRQHandler
void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin)
这个函数是中断处理函数,可以理解为中断函数具体要响应的动作。
参数说明:GPIOx:GPIO端口号,例如 GPIOA、GPIOB、GPIOC 等
GPIO_Pin:GPIO引脚号,可以是单独的引脚号,例如 GPIO_PIN_0,也可以是多个引脚的按位或组合,例如 GPIO_PIN_0 | GPIO_PIN_1
PinState:引脚状态,如GPIO_PIN_RESET、GPIO_PIN_SET。GPIO_PIN_RESET:引脚为低电平,GPIO_PIN_SET:引脚为高电平。