文章目录
- 一、GPIO输入模式
- 二.GPIO输出模式
- 三.GPIO配置步骤
一、GPIO输入模式
1. 浮空输入(Floating Input)
原理:引脚电平完全由外部电路决定,无内部上拉或下拉电阻。
特点:
悬空时电平不确定(易受干扰)。
需外部电路确保稳定电平。
适用场景:外部信号源已有明确电平驱动(如SPI通信、ADC采样)。
2. 上拉输入(Pull-up Input)
原理:内部上拉电阻将引脚默认拉至高电平(VCC)。
特点:
悬空时引脚为高电平。
外部接地时变为低电平。
适用场景:按键检测(按键未按下时为高电平,按下时接地为低电平)。
3. 下拉输入(Pull-down Input)
原理:内部下拉电阻将引脚默认拉至低电平(GND)。
特点:
悬空时引脚为低电平。
外部接高电平时变为高电平。
适用场景:传感器触发信号(如高电平有效的中断信号)。
二.GPIO输出模式
1. 推挽输出(Push-Pull Output)
原理:
输出高电平时:MOS管导通,引脚连接VCC。
输出低电平时:MOS管导通,引脚连接GND。
特点:
高低电平驱动能力强,可直接驱动LED、继电器等。
电平稳定,抗干扰能力强。
适用场景:普通数字信号输出(如控制LED、蜂鸣器)。
2. 开漏输出(Open-Drain Output)
原理:
输出低电平时:MOS管导通,引脚连接GND。
输出高电平时:MOS管关闭,引脚为高阻态(需外接上拉电阻)。
特点:
高电平依赖外部上拉电阻。
支持“线与”逻辑(多设备共享总线)。
适用场景:
I²C、SMBus等通信总线。
电平转换(如5V与3.3V设备兼容)。
3. 复用功能输出(Alternate Function Output)
原理:GPIO引脚配置为特定外设功能(如UART、SPI、PWM等)。
特点:信号由外设模块自动控制。
适用场景:外设专用通信或控制(如定时器输出PWM波)。
特殊模式
1. 模拟输入(Analog Input)
原理:引脚直接连接ADC(模数转换器),读取模拟电压。
适用场景:传感器模拟信号采集(如温度、光照强度)。
2. 高阻态(High-Z)
原理:引脚既非输入也非输出,呈现高阻抗状态。
适用场景:总线冲突避免或信号隔离。
三.GPIO配置步骤
时钟使能:开启对应GPIO端口的时钟。
引脚模式设置:选择输入/输出/复用/模拟模式。
输出类型设置:推挽或开漏输出。
上拉/下拉配置:选择是否启用内部电阻。
速度配置:设置输出驱动速度(低速/中速/高速)。
// STM32 HAL库配置示例(推挽输出)
GPIO_InitTypeDef GPIO_InitStruct = {0};
GPIO_InitStruct.Pin = GPIO_PIN_5; // 选择引脚
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // 推挽输出
GPIO_InitStruct.Pull = GPIO_NOPULL; // 不启用上拉/下拉
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; // 高速驱动
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); // 初始化GPIOA