浅谈STM32GPIO模块

前言, 本文基于STM32F407ZET6(多图警告)。

一、初识GPIO

1.什么是GPIO

   GPIO即General-purpose input/output, 通用型之输入输出的简称,主要用于需要用到数字量输入/输出的场合。
   每个通用 I/O 端口包括 :

  • 4 个 32 位配置寄存器(GPIOx_MODER、 GPIOx_OTYPER、GPIOx_OSPEEDR 和GPIOx_PUPDR)
  • 2 个 32 位数据寄存器(GPIOx_IDR 和GPIOx_ODR)
  • 1 个 32 位置位/复位寄存器 (GPIOx_BSRR)
  • 1 个 32 位锁定寄存器(GPIOx_LCKR)
  • 2 个 32 位复用功能选择寄存器(GPIOx_AFRH 和 GPIOx_AFRL)。

2.GPIO特点

2.1 基本特点

  • STM32F4xx系列最多有7个16位并行I/O口:
    PA、 PB、 PC、 PD、 PE、 PF、 PG

  • GPIO引脚可复用和重映射

  • 工作模式:
    4种输入模式(浮空、 上拉、 下拉、 模拟输入)
    4种输出模式(开漏、 复用开漏、 推挽、 复用推挽)

  • 输出速度: (2MHZ、 25MHZ、 50MHZ、 100MHZ)

  • I/O 引脚电压5V兼容: IO口输出是3.3V, 可以容忍输入5V

  • 正常拉出灌入电流为25mA

2.2 管脚说明

   STM32F407ZET6共有112个IO引脚,都挂在AHB1总线上,分为7组, 即7个端口,分别是PA~ PG,每组有16个引脚,分别是PA[15:0]~PG[15:0]。
   5V容忍问题, 即可最大承受5V电压,不是所有的I/O口都能承受超过3.3V电压,如果引脚具有5V容忍功能,在芯片手册上会给出。
端口和引脚的区别:
端口(PORT): 独立的外设子模块,包含多个引脚, 通过多个硬件寄存器控制引脚, 这里的PA~PG就是端口。
引脚:对应微控制器的一个管脚,归属于端口,由端口寄存器的对应位控制,这里的PA1~ PA15…PG1~ PG15就是引脚。

浅谈STM32GPIO模块

2.3 复用

   微控制器 I/O 引脚通过一个复用器连接到板载外设/模块,允许内置外设与I/O口共用引出管脚(不同的功能对应同一管脚),但每次只能使能其中之一。
  复用就是一个引脚具有多种功能,具体功能根据开发者要求选择,但是一次只能选择一种功能,复用的前提是引脚具有需要复用的功能。 如下图所示,每个引脚都用自己的功能,根据实际要求配置。
浅谈STM32GPIO模块

2.4 重映射

  复用功能的引出脚可以通过重映射从不同的I/O管脚引出,即复用功能的引出脚位是可通过程序改变到其他的引脚上。
   重映射即是根据实际需要,不选用缺省口子,换做其他口子实现功能。有了重映射功能,设计PCB电路板时,不必把某些信号在板上绕一大圈完成联接,方便PCB设计,同时减少信号的交叉干扰。
浅谈STM32GPIO模块
浅谈STM32GPIO模块

二、GPIO结构

1. 基本结构

CPIO硬件结构按上下可分为两部分, 输入驱动电路和输出驱动电路。
浅谈STM32GPIO模块
按左右可分为三个部分, 端口控制寄存器组、输入输出驱动器和引脚电路。
浅谈STM32GPIO模块

2. 工作模式

GPIO端口可配置为四种模式, 分别是输入模式、输出模式、复用模式和模拟模式,其中输入模式又分为上拉输入、浮空输入和下拉输入。输出模式也可以分为推挽输出、复用推挽输出、开漏输出和复用开漏输出。
浅谈STM32GPIO模块

2.1 浮空输入

浮空输入内部电路断开上拉电阻和下拉电阻, I/O端口直接从输入数据寄存器读取数据,主要的应用场合是外部电路已经有上拉或者下拉电阻或者是I/O端口作为通讯口时使用。
浅谈STM32GPIO模块

2.2 上拉输入

上拉输入内部电路连接上拉电阻, 断开下拉电阻,通过电阻钳位在高电平,电阻同时起限流作用, 此时引脚的默认状态是高电平。
浅谈STM32GPIO模块

2.3下拉输入

下拉输入和上拉输入相反,内部电路连接下拉电阻, 断开上拉电阻,通过下拉电阻电阻钳位在低电平电平, 此时引脚的默认状态是高电平。
浅谈STM32GPIO模块

2.4 推挽输出

推挽输出P-MOS和N-MOS都工作,当输出低电平时,N-MOS导通,P-MOS关闭,通过输出控制电路将输出控制数据寄存器内容输出,I/O口输出低电平;当输出高电平时,P-MOS导通,N-MOS关闭,I/O口输出高电平。
推挽输出能减小损耗,多用于驱动LED灯,蜂鸣器等。
浅谈STM32GPIO模块

2.5 推挽复用输出

推挽复用基本和推挽输出相同, 唯一不同的是, 推挽复用是将复用外设的数据输出,而不是从输出寄存器输出。
浅谈STM32GPIO模块

2.6 开漏输出

开漏输出和推挽输出不同 , 开漏输出0时,I/O口输出低电平,输出1是时, I/O口输为高阻态。使用任何一种开漏模式,都需要接上上拉电阻。浅谈STM32GPIO模块

2.7 开漏复用输出

开漏复用基本也与开漏输出相同,只是是从复用外设读取数据。浅谈STM32GPIO模块