GPIO
GPIO模式
通过配置GPIO的端口配置寄存器,端口可以配置成以下8种模式:

GPIO模式分类:
通常可以分为四大类:输入模式(4种)、输出模式(2种)、复用功能模式(2种)。
1. 输入模式 (Input Modes)
a. 模拟输入 (Analog Input - GPIO_Mode_AIN)
介绍: 在这种模式下,GPIO引脚的数字输入缓冲器(施密特触发器)被禁用,引脚的信号直接连接到片上外设(如ADC模数转换器)的模拟输入端。引脚处于高阻态,不消耗静态电流(理论上,忽略漏电流)。
应用场景:
ADC采样: 连接模拟传感器(如温度传感器、光敏电阻、电位器分压等)以读取模拟电压值。
比较器输入: 作为模拟比较器的输入端。
运算放大器输入: 连接到内部运算放大器的输入端(如果MCU型号支持)。
DAC输出引脚(某些型号): 虽然DAC是输出,但其引脚在不使用时有时也被配置为模拟模式,或者其反馈路径可能涉及模拟输入。
b. 浮空输入 (Floating Input - GPIO_Mode_IN_FLOATING)
介绍: 引脚配置为数字输入,施密特触发器使能,用于整形输入信号,提高抗干扰能力。引脚内部既没有连接上拉电阻,也没有连接下拉电阻,其电平状态完全由外部电路决定。如果外部没有连接任何信号,引脚电平是不确定的,容易受到干扰。
应用场景:
外部信号读取: 读取有明确高低电平输出的外部器件信号(如另一个IC的输出引脚)。
按键检测(配合外部上拉/下拉电阻): 虽然有内部上拉/下拉模式,但有时需要特定阻值或更强驱动的外部电阻时,会使用浮空输入+外部电阻的方式连接按键或开关。
外设输入: 用于接收某些外设的输入信号(如USART的RX),但通常这些会使用复用功能模式。在某些简单或特定场景下可能直接用浮空输入读取。
注意: 未使用的引脚不建议配置为浮空输入,容易受干扰导致不必要的功耗增加或逻辑错误,推荐配置为模拟输入或带上拉/下拉的输入/输出。
c. 上拉输入 (Input with Pull-up - GPIO_Mode_IPU)
介绍: 引脚配置为数字输入,施密特触发器使能。同时,内部一个弱上拉电阻(通常在30kΩ ~ 50kΩ范围)连接到VDD。当外部没有信号驱动或外部连接断开时,引脚被内部电阻拉高到高电平。
应用场景:
按键检测: 最常见的应用。按键一端接GPIO,另一端接GND。未按下时,引脚被拉高为高电平;按下时,引脚被拉低到低电平。这样可以节省一个外部上拉电阻。
开关状态检测: 检测门磁开关、限位开关等。
低速通信线默认状态: 如某些单线通信协议的空闲状态。
需要默认高电平的输入: 确保在无外部驱动时,输入为逻辑高。
d. 下拉输入 (Input with Pull-down - GPIO_Mode_IPD)
介绍: 引脚配置为数字输入,施密特触发器使能。同时,内部一个弱下拉电阻(通常在30kΩ ~ 50kΩ范围)连接到VSS (GND)。当外部没有信号驱动或外部连接断开时,引脚被内部电阻拉低到低电平。
应用场景:
按键检测: 按键一端接GPIO,另一端接VDD。未按下时,引脚被拉低为低电平;按下时,引脚被拉高到高电平。
需要默认低电平的输入: 确保在无外部驱动时,输入为逻辑低。
某些总线应用: 根据协议要求,总线空闲时需要为低电平。
2. 输出模式 (Output Modes)
e. 开漏输出 (Open-Drain Output - GPIO_Mode_Out_OD)
介绍: 输出时,如果软件设置输出高电平(‘1’),N-MOS管关闭,P-MOS管也保持关闭状态,引脚呈高阻态(相当于断开)。如果软件设置输出低电平(‘0’),N-MOS管导通,将引脚拉到GND。它不能主动输出高电平,需要外部上拉电阻才能将高阻态时的电平拉高到VDD。
应用场景:
I²C总线: SCL和SDA线通常配置为开漏输出(或复用开漏),允许多个设备连接到同一总线("线与"逻辑),任何一个设备输出低电平都会将整条线拉低。
电平转换: 当需要与不同电压域的设备通信时,可以将引脚配置为开漏,外部上拉电阻连接到对方设备的VDD,实现简单的电平匹配。
共享信号线/中断线: 允许多个设备共享一条信号线,任何设备都可以将其拉低来发出信号。
控制需要开漏信号的设备: 如某些类型的LED驱动或特定外设接口。
f. 推挽输出 (Push-Pull Output - GPIO_Mode_Out_PP)
介绍: 输出时,如果软件设置输出高电平(‘1’),P-MOS管导通,N-MOS管关闭,引脚被强驱动到VDD。如果软件设置输出低电平(‘0’),N-MOS管导通,P-MOS管关闭,引脚被强驱动到GND。提供较强的驱动能力,输出高低电平速度快。
应用场景:
驱动LED: 直接驱动LED(通常需要串联限流电阻)。
通用数字信号输出: 控制继电器(通过驱动三极管或MOS管)、蜂鸣器、逻辑门等。
SPI通信: 作为主机时的MOSI(主出从入)、SCK(时钟)、NSS(片选)信号输出。
USART通信: 作为TX(发送)信号输出(虽然通常用复用推挽)。
需要快速切换和较强驱动能力的场合。
3. 复用功能模式 (Alternate Function Modes)
当GPIO引脚需要由STM32内部的某个外设(如USART, SPI, I2C, Timer, ADC的触发引脚等)控制时,需要配置为复用功能模式。这时GPIO端口的控制权就交给了对应的外设。
g. 复用推挽输出 (Alternate Function Push-Pull - GPIO_Mode_AF_PP)
介绍: 引脚的控制权交给片上外设,输出结构为推挽模式(P-MOS和N-MOS都参与驱动)。外设可以强驱动引脚到高电平或低电平。
应用场景:
USART TX: 串口发送引脚。
SPI MOSI, SCK, NSS: SPI总线的主模式输出引脚。
Timer PWM输出: 定时器的PWM波形输出引脚。
CAN TX: CAN总线发送引脚。
其他外设的推挽输出信号: 如时钟输出(MCO)、某些同步通信接口等。
h. 复用开漏输出 (Alternate Function Open-Drain - GPIO_Mode_AF_OD)
介绍: 引脚的控制权交给片上外设,输出结构为开漏模式。外设只能将引脚拉到低电平,输出高电平时引脚呈高阻态。同样需要外部上拉电阻。
应用场景:
I²C SCL, SDA: 当使用硬件I²C外设时,这两个引脚通常配置为此模式。
某些特殊外设接口: 需要开漏输出并且由硬件外设控制的场合。
总结:
选择哪种GPIO模式取决于具体应用需求:
需要读取模拟量 -> 模拟输入
需要读取外部确定的数字信号,或使用外部上下拉 -> 浮空输入
需要读取按键/开关,希望默认高电平 -> 上拉输入
需要读取按键/开关,希望默认低电平 -> 下拉输入
需要输出信号,且可能需要与其他设备"线与"连接或进行电平转换 -> 开漏输出
需要输出强驱动的数字信号,驱动LED或通用逻辑 -> 推挽输出
需要让片上外设(如USART, SPI, Timer)控制引脚输出,且需要强驱动 -> 复用推挽输出
需要让片上外设(主要是I²C)控制引脚输出,且需要开漏特性 -> 复用开漏输出
1892

被折叠的 条评论
为什么被折叠?



