GPIO(General-Purpose IO ports,通用输入/输出接口)模块是STM32的外设接口的核心部分,用于感知外界信号(输入模式)和控制外部设备(输出模式),支持多种工作模式和配置选项。
1、GPIO 基本结构
STM32F407 的每个 GPIO 引脚均可独立配置,主要特性包括:
- 9 组 GPIO 端口(GPIOA ~ GPIOI),每组最多 16 个引脚(PIN0 ~ PIN15)。
- 每个引脚可配置为输入、输出、复用功能或模拟模式。
- 支持多种驱动模式(推挽、开漏)、速度等级和上下拉电阻。
- 支持外部中断 / 事件触发。
I/O 端口的基本结构 :
2、GPIO 工作模式
每个引脚可通过 GPIOx_MODER 寄存器配置为以下模式:
/** * @brief GPIO Configuration Mode enumeration */
typedef enum
{ GPIO_Mode_IN = 0x00, /*!< GPIO Input Mode */GPIO_Mode_OUT = 0x01, /*!< GPIO Output Mode */GPIO_Mode_AF = 0x02, /*!< GPIO Alternate function Mode */GPIO_Mode_AN = 0x03 /*!< GPIO Analog Mode */
}GPIOMode_TypeDef;
#define IS_GPIO_MODE(MODE) (((MODE) == GPIO_Mode_IN) || ((MODE) == GPIO_Mode_OUT) || \((MODE) == GPIO_Mode_AF)|| ((MODE) == GPIO_Mode_AN))
2.1、输入模式
2.1.1、浮空输入(Input Floating)
引脚电平由外部电路决定,无内部上拉 / 下拉。上拉 / 下拉电阻为断开状态,施密特触发器打开,输出被禁止。输入浮空模式下,IO 口的电平完全是由外部电路决定的。如果 IO 引脚没有连接其他的设备,那么检测其输入电平是不确定的。
浮空输入的特点:
- 高阻态:引脚内部无上拉/下拉电阻,电平完全由外部电路决定。
- 灵敏度高:易受外部信号或噪声影响,需确保外部电路有明确的驱动源。
- 低功耗:无内部电阻电流路径,适合低功耗场景(需外部电路稳定)。
该模式典型应用场景:
1、外部中断(EXIT)
- 场景:连接按键、传感器等需要触发中断的设备。
- 原因:若外部电路已包含明确的上拉/下拉电阻(如按键电路),使用浮空输入可避免内部电阻的干扰。
2、 通信接口(如 IIC、UART)
- 场景:IIC 的 SDA / SCL 线、UART 的 RX 引脚。
- 原因:IIC 总线需外接上拉电阻,浮空输入避免内部电阻冲突;UART 接收端有外部设备驱动电平。
3、多设备总线(如 CAN、SPI)
- 场景:总线型通信(如 CAN 总线、SPI 从设备 MISO)
- 原因:总线电平由外部收发器或多主机设备控制,浮空输入确保无内部干扰。
4、高速数字信号采样
- 场景:高频脉冲计数(如编码器信号、PWM 输入捕获)。
- 原因:浮空输入响应速度快,适合高速信号采集(需外部信号驱动能力强)。
5、模拟信号预处理
- 场景:连接比较器、运放等模拟电路的输出端。
- 原因:避免内部电阻影响模拟电路输出的高精度电平。
2.1.2、上拉输入(Input Pull-up)
内部上拉电阻(约40kΩ)连接到 VDD。 上拉电阻导通,施密特触发器打开,输出被禁止。在需要外部上拉电阻的时候,可以使用内部上拉电阻,这样就可以节省一个外部电阻,但是内部上拉电阻的阻值较大,不适合做电流型驱动。
上拉输入的特点:
- 默认高电平:当引脚无外部驱动时,内部上拉电阻将电平拉至 VDD(3.3V)。
- 抗干扰能力强:避免引脚悬空导致的电平漂移,较少噪声影响。
- 简化外部电路:省去外部上拉电阻,节省 PCB 空间和成本。
该模式典型应用场景:
1、按键/开关检测
- 场景:按键一端接地(低电平有效),按下时拉低引脚电平。
- 原理:未按下时,内部上拉电阻使引脚保持高电平;按下时接地,电平变为低。
2、数字信号输入(无主动驱动高电平)
- 场景:连接开漏输出的传感器(如某些红外模块)。
- 原理:传感器只能拉低电平,需上拉电阻提供默认高电平。
3、总线空闲状态维持
- 场景:单线通信协议(如 1-Wire)或自定义串行总线。
- 原理:总线空闲时由上拉电阻维持高电平,设备通过拉低电平发送数据。
4、电平转换接口
- 场景:连接 5V 设备(通过电平转换芯片)。
- 原理:若转换芯片输出为开漏模式,需上拉电阻提供 3.3V 高电平。
5、防止未初始化引脚悬空
- 场景:未使用的 GPIO 引脚。
- 原理:配置为上拉输入,避免悬空引入噪声或意外电流。
2.1.3、下拉输入(Input Pull-down)
内部下拉电阻(约40kΩ)连接到 GND。 下拉电阻导通,施密特触发器打开,输出被禁止。在需要外部下拉电阻的时候,可以使用内部下拉电阻,这样也就可以节省一个外部电阻,但是内部下拉电阻的阻值较大,所以不适合做电流型驱动。
下拉输入的特点:
- 默认低电平:当引脚无外部驱动时,内部下拉电阻将电平拉至 GND(0 V)。
- 抗干扰能力强:避免引脚悬空导致的高电平误触发。
- 简化外部电路:省去外部下拉电阻,节省 PCB 空间和成本。
该模式典型应用场景:
1、高电平有效信号检测
- 场景:检测传感器或模块的高电平输出(如红外避障传感器、PIR 人体感应模块)。
- 原理:未触发时引脚电平被下拉至低电平;触发时外部设备输出高电平。
2、总线型通信的从设备选择
- 场景:SPI 从设备的片选(CS)信号。
- 原理:主设备未选中从设备时,片选线保持低电平(下拉);选中时主设备拉高电平。
3、数字信号防抖动
- 场景:连接机械开关或继电器触点。
- 原理:下拉电阻确保开关断开时引脚为低电平,减少触点抖动引入的噪声。
4、电平转换接口
- 场景:连接 5V 设备的开漏输出(如某些老式传感器)。
- 原理:外部设备拉高电平时,通过电平转换芯片输出 3.3V 高电平;未激活时下拉至低电平。
5、未使用引脚的稳定处理
- 场景:未连接的 GPIO 引脚。
- 原理:配置为下拉输入,避免悬空引脚引入噪声或意外功耗。
2.1.4、模拟输入(Analog Mode)
上下拉电阻断开,施密特触发器关闭,双 MOS 管也关闭。该模式用于 ADC 采集或 DAC 输出,或者低功耗下省电。
模拟输入的特点:
- 禁用数字功能:引脚的数字输入/输出电路被断开,仅保留模拟信号路径。
- 高精度低噪声:避免数字电路干扰,提高 ADC/DAC 的采样精度。
- 无上拉/下拉:内部电阻断开,信号完全由外部模拟源驱动。
该模式典型应用场景:
1、传感器信号采集
- 场景:连接模拟输出传感器(如温度、压力、光照、湿度传感器)。
- 示例:
(1)温度传感器(如 LM35、NTC 热敏电阻):输出电压随温度变化。
(2)光敏电阻:电阻值随光照强度变化&#x