STM32 GPIO功能详解及使用方法介绍
在 STM32 微控制器中,GPIO(General Purpose Input Output,通用输入输出端口)是非常重要且常用的模块,它允许与外部设备进行数据的输入和输出交互。
一、GPIO 的基本概念
GPIO 全称通用输入输出端口,其主要功能是采集外部器件的信息或者控制外部器件工作,也就是实现输入和输出操作。不同型号的 STM32 芯片,其 IO 口数量可能有所不同,具体可通过选型手册快速查询。STM32 的 GPIO 具有一些显著特点,比如能够快速翻转,每次翻转最快只需要两个时钟周期(F1 最高速度可以到 50MHz),并且每个 IO 口都可以配置为中断功能,此外还支持 8 种不同的工作模式1。
二、GPIO 的电气特性
STM32 的工作电压一般为 2V ≤ VDD ≤ 3.6V。对于 GPIO 的识别范围,以 CMOS 端口为例,输入低电平电压范围为 -0.3V ≤ VIL ≤ 1.164V,输入高电平电压范围为 1.833V ≤ VIH ≤ 3.6V。在输出电流方面,单个 GPIO 最大可达 25mA1。
三、STM32F4 端口结构
以 STM32F4 系列为例,其端口结构主要包含以下部分1:
四、GPIO 的 8 种工作模式
- 输入浮空:
- 电路状态:上拉 / 下拉电阻断开,施密特触发器打开,输出被禁止,P-MOS 和 N-MOS 管不导通。
- 适用场景:IO 口的电平完全由外部电路决定。如果 IO 引脚没有连接其他设备,那么检测其输入电平是不确定的。此模式可用于检测外部引脚电平的情况,比如按键检测,但更常用的方法是设置为输入下拉或者上拉模式。
- 输入上拉:
- 电路状态:上拉电阻接通,下拉电阻断开,施密特触发器打开,输出被禁止,P-MOS 和 N-MOS 管不导通。
- 适用场景:IO 口的电平默认状态为高电平,但外部有低电平输入的时候仍可以被读取到。
- 输入下拉:
- 电路状态:上拉电阻断开,下拉电阻接通,施密特触发器打开,输出被禁止,P-MOS 和 N-MOS 管不导通。
- 适用场景:IO 口的电平默认状态为低电平,当外部有高电平输入的时候可以被读取到。
- 模拟功能:
- 电路状态:上拉 / 下拉电阻断开,施密特触发器关闭,输出被禁止,P-MOS 和 N-MOS 管不导通。
- 适用场景:该模式用于 ADC 采集或者 DAC 输出,或者在低功耗情况下省电。
- 开漏输出:
- 电路状态:上拉 / 下拉电阻根据寄存器的值决定是否导通,施密特触发器打开,可以通过数据寄存器访问 IO 状态,P-MOS 管始终不激活,输出寄存器中输入 0 会激活 N-MOS 管。
- 特点和适用场景:开漏输出只能输出低电平(VSS)或者高阻态。常用于软件 IIC 的 SDA、SCL 等。在开漏输出模式下,具有 “线与” 特性,即如果有多个开漏模式的引脚连在一起,只有当所有引脚都输出高阻态时,电平才为 1,只要有其中一个为低电平,总线就为低电平 0。并且,在该模式下,施密特触发器是打开的,所以可以读取 IO 口的电平状态。若要使 IO 引脚输出高电平,必须接上拉电阻,可选择内部上拉电阻(阻值较大,为 “弱上拉”)或外接一个外部上拉电阻(用于需要大电流驱动的情况)。
- 推挽输出:
- 电路状态:上拉 / 下拉电阻根据寄存器的值决定是否导通,施密特触发器打开,可以通过数据寄存器访问 IO 状态,P-MOS 管和 N-MOS 管通过输出寄存器的值来决定是否导通。
- 特点和适用场景:可以输出高电平和低电平,最大输出电流可达 25mA,常用于驱动一些外设,如 LED 灯等。推挽输出模式下,P-MOS 管和 N-MOS 管同一时间只能有一个导通,当引脚高低电平切换时,两个管子轮流导通,一个负责灌电流,一个负责拉电流,使其负载能力和开关速度都有很大提高。
- 开漏式复用功能:
- 电路状态:上拉 / 下拉电阻根据寄存器的值决定是否导通,施密特触发器打开,可以通过数据寄存器访问 IO 状态,P-MOS 管始终不激活,引脚的状态由外设决定,输出寄存器中输入 0 会激活 N-MOS 管。
- 适用场景:用于片上外设功能,如硬件 IIC 的 SDA、SCL 引脚等。
- 推挽式复用功能:
- 电路状态:上拉 / 下拉电阻根据寄存器的值决定是否导通,施密特触发器打开,可以通过数据寄存器访问 IO 状态,P-MOS 管和 N-MOS 管通过外设来决定是否导通。
- 适用场景:用于片上外设功能,如 SPI 的 SCK、MISO、MOSI 引脚等。
五、GPIO 的寄存器配置
每个 GPIO 口都有多个寄存器来控制其功能和状态,常见的寄存器包括23:
通过合理配置这些寄存器,就可以实现对 GPIO 口的各种功能和工作模式的设置,以满足不同的应用需求。
总之,STM32 的 GPIO 功能丰富且灵活,通过对其深入了解和正确配置,可以实现与各种外部设备的高效通信和控制,是 STM32 开发中不可或缺的重要部分。在实际应用中,需要根据具体的项目需求和硬件连接情况,选择合适的 GPIO 工作模式和配置相应的寄存器,以确保系统的正常运行和稳定性能。
作者:jee10