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:

  • 保护二极管:用于保护接入电路的电压不会超过可承受的范围,防止过高或过低的电压对芯片造成损坏。
  • 上下拉电阻:通常阻值在 30 – 50kΩ,属于弱上下拉(电流很小,不具备驱动能力)。上拉电阻可使 IO 口默认状态为高电平,下拉电阻可使 IO 口默认状态为低电平。例如,在输入模式下,若设置为上拉输入,当外部没有输入信号时,IO 口呈现高电平;若设置为下拉输入,在无外部输入时,IO 口为低电平。
  • 施密特触发器:这是一种整形电路,能够将非标准方波整形成方波。它具有以下特性:当输入电压高于正向阈值电压时,输出为高;当输入电压低于负向阈值电压时,输出为低;当输入在正负向阈值电压之间时,输出不改变。施密特触发器的存在使得输入信号更加稳定,能有效减少噪声和干扰对信号的影响。
  • P-MOS 和 N-MOS 管:MOS 管是压控型元件,通过控制栅源电压(Vgs)来实现导通或关闭。对于 P-MOS,当 Vgs <0 时导通;对于 N-MOS,当 Vgs> 0 时导通。在输出模式中,根据不同的工作模式,P-MOS 和 N-MOS 管会相应地导通或截止,以实现不同的输出逻辑。
  • 四、GPIO 的 8 种工作模式

    1. 输入浮空
    2. 电路状态:上拉 / 下拉电阻断开,施密特触发器打开,输出被禁止,P-MOS 和 N-MOS 管不导通。
    3. 适用场景:IO 口的电平完全由外部电路决定。如果 IO 引脚没有连接其他设备,那么检测其输入电平是不确定的。此模式可用于检测外部引脚电平的情况,比如按键检测,但更常用的方法是设置为输入下拉或者上拉模式。
    4. 输入上拉
    5. 电路状态:上拉电阻接通,下拉电阻断开,施密特触发器打开,输出被禁止,P-MOS 和 N-MOS 管不导通。
    6. 适用场景:IO 口的电平默认状态为高电平,但外部有低电平输入的时候仍可以被读取到。
    7. 输入下拉
    8. 电路状态:上拉电阻断开,下拉电阻接通,施密特触发器打开,输出被禁止,P-MOS 和 N-MOS 管不导通。
    9. 适用场景:IO 口的电平默认状态为低电平,当外部有高电平输入的时候可以被读取到。
    10. 模拟功能
    11. 电路状态:上拉 / 下拉电阻断开,施密特触发器关闭,输出被禁止,P-MOS 和 N-MOS 管不导通。
    12. 适用场景:该模式用于 ADC 采集或者 DAC 输出,或者在低功耗情况下省电。
    13. 开漏输出
    14. 电路状态:上拉 / 下拉电阻根据寄存器的值决定是否导通,施密特触发器打开,可以通过数据寄存器访问 IO 状态,P-MOS 管始终不激活,输出寄存器中输入 0 会激活 N-MOS 管。
    15. 特点和适用场景:开漏输出只能输出低电平(VSS)或者高阻态。常用于软件 IIC 的 SDA、SCL 等。在开漏输出模式下,具有 “线与” 特性,即如果有多个开漏模式的引脚连在一起,只有当所有引脚都输出高阻态时,电平才为 1,只要有其中一个为低电平,总线就为低电平 0。并且,在该模式下,施密特触发器是打开的,所以可以读取 IO 口的电平状态。若要使 IO 引脚输出高电平,必须接上拉电阻,可选择内部上拉电阻(阻值较大,为 “弱上拉”)或外接一个外部上拉电阻(用于需要大电流驱动的情况)。
    16. 推挽输出
    17. 电路状态:上拉 / 下拉电阻根据寄存器的值决定是否导通,施密特触发器打开,可以通过数据寄存器访问 IO 状态,P-MOS 管和 N-MOS 管通过输出寄存器的值来决定是否导通。
    18. 特点和适用场景:可以输出高电平和低电平,最大输出电流可达 25mA,常用于驱动一些外设,如 LED 灯等。推挽输出模式下,P-MOS 管和 N-MOS 管同一时间只能有一个导通,当引脚高低电平切换时,两个管子轮流导通,一个负责灌电流,一个负责拉电流,使其负载能力和开关速度都有很大提高。
    19. 开漏式复用功能
    20. 电路状态:上拉 / 下拉电阻根据寄存器的值决定是否导通,施密特触发器打开,可以通过数据寄存器访问 IO 状态,P-MOS 管始终不激活,引脚的状态由外设决定,输出寄存器中输入 0 会激活 N-MOS 管。
    21. 适用场景:用于片上外设功能,如硬件 IIC 的 SDA、SCL 引脚等。
    22. 推挽式复用功能
    23. 电路状态:上拉 / 下拉电阻根据寄存器的值决定是否导通,施密特触发器打开,可以通过数据寄存器访问 IO 状态,P-MOS 管和 N-MOS 管通过外设来决定是否导通。
    24. 适用场景:用于片上外设功能,如 SPI 的 SCK、MISO、MOSI 引脚等。

    五、GPIO 的寄存器配置

            每个 GPIO 口都有多个寄存器来控制其功能和状态,常见的寄存器包括23:

  • 配置模式的端口配置寄存器(如 CRL 和 CRH):用于配置 GPIO 口的工作模式(输入、输出、复用等)以及输出速度等参数。例如,通过设置 CRL 和 CRH 寄存器的相应位,可以将 GPIO 口配置为输入浮空模式、输入上拉模式、输出推挽模式等。
  • 数据寄存器(如 IDR 和 ODR):IDR 用于读取 GPIO 口的输入电平状态,ODR 用于设置 GPIO 口的输出电平状态。例如,要读取某个 GPIO 口的输入电平,可读取 IDR 寄存器中对应的位;要设置某个 GPIO 口输出高电平或低电平,可通过设置 ODR 寄存器中对应的位来实现。
  • 置位 / 复位寄存器(如 BSRR):可以通过该寄存器对 GPIO 口的某些位进行置位(设置为 1)或复位(设置为 0)操作,而不影响其他位的状态。这在需要快速改变某些 GPIO 口的输出状态时非常有用。
  • 复位寄存器(如 BRR):专门用于对 GPIO 口的某些位进行复位操作,即设置为 0。
  • 锁存寄存器(如 LCKR):用于锁定 GPIO 口的配置,防止意外修改。
  •         通过合理配置这些寄存器,就可以实现对 GPIO 口的各种功能和工作模式的设置,以满足不同的应用需求。

            总之,STM32 的 GPIO 功能丰富且灵活,通过对其深入了解和正确配置,可以实现与各种外部设备的高效通信和控制,是 STM32 开发中不可或缺的重要部分。在实际应用中,需要根据具体的项目需求和硬件连接情况,选择合适的 GPIO 工作模式和配置相应的寄存器,以确保系统的正常运行和稳定性能。

    作者:jee10

    物联沃分享整理
    物联沃-IOTWORD物联网 » STM32 GPIO功能详解及使用方法介绍

    发表回复