1. GPIO简述
GPIO(General-purpose input/output),通用型输入输出。简单理解就是我们可以控制输入输出的STM32引脚,统称为GPIO。
GPIO存在的意义就是用程序控制或读取它们的输出或输入。
2. 功能描述
- 每个IO口(就是引脚)都有两个配置寄存器分别负责高16位和低16为就是H和L的区别:
- GPIOx_CRL(x就是什么引脚 例如GPIOA) CRL 就是 LOW 控制低16位
- GPIOx_CRH CRH 就是HIGH 控制高16为
- 每个IO口(还是引脚)都有两个数据寄存器分别负责端口的输入输出
- GPIOx_ODR ODR的意思就是(Output Data Register) O就是Output 的意思负责输输出 当然 这里所谓的输出是引脚的输出 不是给引脚的输出
- GPIOx_IDR IDR的意思就是(Input Data Register) I就是input 的意思负责输输入 这里所谓的输入给是引脚的输入 不是引脚给的输出
- GPIOx_ODR ODR的意思就是(Output Data Register) O就是Output 的意思负责输输出 当然 这里所谓的输出是引脚的输出 不是给引脚的输出
3. GPIO的8种工作模式
-
3.1 输入浮空(Input floating)
当一个GPIO配置为输入浮空时,它既没有内部上拉电阻也没有内部下拉电阻连接到该引脚。这意味着在没有外部信号驱动的情况下,该引脚的状态是不确定的,可能会受到噪声的影响。
-
3.2 输入上拉(Input pull-up)
在这种配置中,当GPIO设置为输入时,内部会有一个上拉电阻将引脚电压拉高至电源电压(Vcc)。如果没有外部信号将其拉低,则该引脚将保持高电平状态。
-
3.3 输入下拉(Input pull-down)
与输入上拉相反,输入下拉会在GPIO配置为输入时使用内部下拉电阻将引脚电压拉低至地(GND)。如果没有外部信号将其拉高,则该引脚将保持低电平状态。
-
3.4 模拟输入(Analog)
模拟输入模式允许GPIO引脚用作模数转换器(ADC)的输入端口,用于读取模拟电压信号。这种模式通常禁用了数字输入功能。
-
3.5 通用开漏输出(Output open-drain)
在开漏输出模式下,当输出为低电平时,内部晶体管导通,将引脚拉低至地;而当输出为高电平时,内部晶体管关闭,引脚呈现高阻态。通常需要外加上拉电阻来实现高电平输出。
-
3.6 通用推挽式输出(Output push-pull)
推挽式输出模式下,GPIO可以驱动高电平或低电平。内部电路包含两个晶体管,一个用来拉高输出电压(推),另一个用来拉低输出电压(拉)。这种方式可以直接驱动负载而不需要额外的上拉或下拉电阻。
-
3.7 推挽式复用功能(Alternate function push-pull)
这是将GPIO配置为支持特定外围设备功能(如SPI、I²C等通信协议)的一种模式,并且采用推挽式的输出方式。这意味着引脚可以用于特殊的外设功能而不是普通的GPIO操作。
-
3.8 开漏复用功能(Alternate function open-drain)
与推挽式复用功能类似,但使用的是开漏输出方式。这意味着在执行特殊功能时,如I²C通信,需要外加上拉电阻以确保正确的逻辑电平。