Gpio

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设置为推挽输出或者上拉/下拉