一、GPIO 概述
- GPIO(General Purpose Input/Output,通用输入 / 输出)是嵌入式系统中用于与外部设备进行数字信号交互的通用接口
二、STM32 中的 GPIO
-
每个引脚的电平是 0V ~ 3.3V,部分引脚最高可以兼容到 5V
-
标准型号(例如,STM32F103 系列)通常有 7 组 GPIO(GPIOA ~ GPIOG),每组 16 个引脚,最多支持 112 个 GPIO
三、GPIO 的特点
-
不同的型号,IO 口数量可能不一样
-
快速翻转,每次翻转最快只需要两个时钟周期
-
每个 IO 口都可以做中断
-
支持 8 种工作模式
四、GPIO 翻转
- GPIO 翻转是指将 GPIO 引脚的电平状态从当前值改变为相反值的过程
-
如果当前是高电平(1,
GPIO_PIN_SET
),翻转后变为低电平(0,GPIO_PIN_RESET
) -
如果当前是低电平(0,
GPIO_PIN_RESET
),翻转后变为高电平(1,GPIO_PIN_SET
)
五、GPIO 中断
- GPIO 中断是指当 GPIO 引脚的电平状态发生特定变化时,处理器暂停当前执行的程序,转去执行预先设定的中断服务程序,处理完后再返回原程序继续执行的过程
# 举例说明
1. 就像正在写作业时,手机突然响了(中断发生了)
2. 暂停作业去接电话(执行中断程序)
3. 接完继续写作业(返回原程序)
六、GPIO的 8 种工作模式
工作模式 | 说明 |
---|---|
开漏输出 | 仅能输出低电平,高电平需外接上拉电阻 |
推挽输出 | 可输出高低电平 |
复用开漏输出 | 开漏输出结合外设功能 |
复用推挽输出 | 推挽输出结合外设功能 |
浮空输入 | 引脚无内部上拉 / 下拉电阻,电平完全由外部电路决定 |
上拉输入 | 内部上拉电阻默认拉高引脚,无外部输入时为高电平 |
下拉输入 | 内部下拉电阻默认拉低引脚,无外部输入时为低电平 |
模拟输入 | 禁用数字功能,直接连接 ADC 采集模拟信号 |
-
输出模式下可以控制端口输出高电平低电平,用于驱动 LED,蜂鸣器等,如果是大功率器件(例如,电机),还需要加上驱动器(小电流控制大电流)
-
输入模式下可以读取端口的高低电平,用于读取外接按键,外接模拟信号的输入,ADC 电压采集,模拟通信协议接受数据等
-
复用功能是指 GPIO 引脚被配置为芯片外设的信号接口,相当于引脚借给外设使用