STM32 GPIO 配置与低功耗模式
主要描述STM32的gpio相关的介绍、低功耗模式下的Gpio设置等
参考AN4899
文档术语与介绍
Iikg: 漏电流
Iing:灌电流
STM32 GPIO的主要特性
- 输出状态:推挽输出(上拉、下拉)、开漏输出(上拉、下拉)
- 输入状态:浮空输入、上拉输入、下拉输入、模拟输入
STM32 GPIO模式介绍:

输入模式介绍
当作为输入模式的时候,有三种模式可以选择:
输入上拉:设置上拉输入,固定电平为高,防止输入信号浮空;
输入下拉:设置下拉输入,固定电平为低,防止输入信号浮空;
浮空输入:信号电平根据外部信号决定,当外部无信号的时候,内部施密特触发器会有外部噪声,增加功耗。
当作为输入时,IO的一些特性:
- 输出模式被禁用
- 施密特触发器被开启
- 上拉下拉电阻可控
- 每个AHB时钟周期,会把电平填充到输入数据寄存器(IDR)。
输出模式介绍
当作为输出模式的时候,有两种方式可以选择:
- 推挽输出:推挽输出实际是两个MOS管驱动,一个PMOS、一个NMos
- 当输出高电平的时候,打开Pmos,IO连接到Vdd
- 当输出低电平的时候,打开Nmos,IO连接到Gnd
- 开漏输出:开漏输出不需要Pmos,但是需要一个上拉电阻。当需要高电平的时候,必须关闭Nmos,靠上拉电阻拉高。可以是内部的上拉电阻,内部电阻阻值40k欧(具体请参考手册)
当作为输出时,IO的一些特性:
- 输入的施密特触发器是打开的,可以读取输出的电平
模拟模式介绍
当I/O被设置为模拟的时候:
- 输出Buffer被禁止;
- 施密特触发器被禁止,施密特触发器被强制设置一个电平(0);
- 上拉电阻与下拉电阻被禁用;
- 读取输入寄存器会为0;
GPIO的电流消耗:
有两种I/O电流消耗:
静态电流消耗:主要是外部上拉电阻或者负载造成,当内部为下拉输入、外部有上拉电阻;内部为输出,外部下拉电阻,都会有漏电流。
动态电流损耗:主要是IO内部损耗,此处不再介绍,请参考手册对应章节
GPIO软件电流优化:
- 配置GPIO为模拟输入:如果不用的I/O都设置为模拟输入,降低损耗。
- 合适的GPIO速度
- 不用的GPIO,禁用此GPIO的时钟。
- 当进入低功耗模式的时候,一定要吧IO固定一个电平。
- 如果IO外部连接了驱动,需要IO设置为推挽输出或者上拉/下拉