嵌入式开发之STM32学习笔记day07

发布于:2025-03-19 ⋅ 阅读:(16) ⋅ 点赞:(0)

STM32 GPIO(通用输入输出口)深入解析

        在嵌入式开发中,GPIO(General Purpose Input/Output)是与外部硬件交互的一个非常基础和重要的接口。几乎所有的嵌入式系统都需要通过GPIO来进行信号输入和输出操作。STM32作为一款非常流行的微控制器,其GPIO的功能非常强大,不仅支持基本的输入输出功能,还可以配置为多种特殊功能。

        本文将全面讲解STM32的GPIO配置及应用,并且通过具体的示例代码展示如何使用STM32标准库操作GPIO口。希望通过这篇文章能让你更好地理解和使用STM32的GPIO。

1 STM32 GPIO基础知识

1.1 GPIO的基本概念

        STM32的GPIO引脚是一个通用接口,可以通过软件配置为输入、输出、复用或模拟功能。每个GPIO口的电平可以是高电平(3.3V或5V,视具体型号而定)或者低电平(0V)。常见的GPIO引脚应用包括:

  • 控制LED灯(输出——可控制端口输出高低电平)
  • 模拟通信协议输出时序(输出——可控制端口输出高低电平)
  • 按键输入(输入——读取端口的高低电平或电压)
  • 连接传感器(输入——读取端口的高低电平或电压)
  • 串口通讯(复用功能)

1.2 GPIO的基本结构

注意:见STM32F10xxx参考手册(中文).pdf文件第105页

1.3 STM32 GPIO工作模式

STM32的GPIO支持以下几种工作模式:

  • 输入模式

    • 浮空输入:不连接任何上拉或下拉电阻,外部信号直接影响引脚电平。
    • 上拉输入:通过内置的上拉电阻将引脚电平保持在高电平。
    • 下拉输入:通过内置的下拉电阻将引脚电平保持在低电平。
  • 输出模式

    • 推挽输出:能够驱动较大电流,适用于驱动LED、继电器等设备。
    • 开漏输出:适合用于I2C通信等需要开放式集线的场景。
    • 高阻态输出:类似于输入模式时的状态,允许其他设备控制GPIO。
  • 复用模式:将GPIO配置为与外设(如USART、SPI、I2C等)共用的功能。

  • 模拟模式:用于模拟信号的输入输出,例如ADC或DAC。

模式名称 性质 特征
浮空输入 数字输入 可读取引脚电平,若引脚悬空,则电平不确定
上拉输入 数字输入 可读取引脚电平,内部连接上拉电阻,悬空时默认高电平
下拉输入 数字输入 可读取引脚电平,内部连接下拉电阻,悬空时默认低电平
模拟输入 模拟输入 GPIO无效,引脚直接接入内部ADC
开漏输出 数字输出 可输出引脚电平,高电平为高阻态,低电平接VSS
推挽输出 数字输出 可输出引脚电平,高电平接VDD,低电平接VSS
复用开漏输出 数字输出 由片上外设控制,高电平为高阻态,低电平接VSS
复用推挽输出 数字输出 由片上外设控制,高电平接VDD,低电平接VSS

2 浮空输入/上拉输入/下拉输入

注意:见STM32F10xxx参考手册(中文).pdf文件第108页

2.1 浮空输入

  1. 浮空输入指的是输入端未连接到任何电压源或电流源,这样的输入端既不驱动也不接地。这种配置使得输入端“悬空”,即处于高阻抗状态。
  2. 浮空输入的缺点:浮空输入可能导致输入信号不稳定,容易受到电磁干扰或者噪声的影响。因此,通常不会直接使用浮空输入,而是采用上拉或下拉电阻来稳定信号。
  3. 一般来说,浮空输入,电平信号算是“野电平”,不清楚是高电平还是低电平。

2.2 上拉输入

  • 上拉电阻指的是将输入端通过一个电阻连接到电源电压(通常是VDD)。这样,当输入端未连接时,它会通过上拉电阻拉到高电平(VDD)。
  • 上拉配置通常用于开关量输入,如按键或开关。当按键未按下时,输入端被上拉到VDD;当按键按下时,输入端被拉低到VSS。
  • 应用:这种配置常见于数字电路中的输入信号稳定,防止信号处于浮空状态。

2.3 下拉输入

  • 下拉电阻指的是将输入端通过一个电阻连接到地(VSS)。当输入端未连接时,它会通过下拉电阻拉到低电平(VSS)。
  • 下拉配置通常用于开关量输入,例如当按钮未按下时,输入端通过下拉电阻保持低电平;当按钮按下时,输入端被拉高到VDD。
  • 应用:这种配置常见于需要保证输入端低电平稳定的情况。

2.4 注意

  • 图中还显示了一个TTL肖特基触发器,它是基于TTL逻辑的输入模块,具有高输入阻抗(Hi-Z)状态,适合快速切换和高频信号处理。
  • 保护二极管:输入端连接了保护二极管,防止输入端电压超过电源电压或低于接地电压,保护电路免受损害。
  • VDD_FT是针对5V供电I/O引脚的特殊配置,它与常规的VDD电压有所不同。它可能用于配置具有特殊要求的输入引脚,确保其能够与其他电压等级兼容。

3 高阻抗模拟输入

        这张图展示了高阻抗模拟输入的工作原理,通过TTL肖特基触发器接收输入信号,输入信号经过驱动器传递到I/O引脚,同时通过保护二极管防止输入端电压过高或过低,确保电路的稳定性和安全性。高阻抗状态使得输入信号可以与其他设备共享总线或信号线,从而实现有效的信号处理和保护。

4 开漏输出/推挽输出/复用开漏输出/复用推挽输出

注意:见STM32F10xxx参考手册(中文).pdf文件第109页

4.1 开漏输出/推挽输出

当I/O端口被配置为输出时:

  • 开漏模式:输出寄存器上的’0’激活N-MOS,而输出寄存器上的’1’将端口置于高阻状态(P-MOS从不被激活)。
  • 推挽模式:输出寄存器上的’0’激活N-MOS,而输出寄存器上的’1’将激活P-MOS。
  • 施密特触发输入被激活
  • 弱上拉和下拉电阻被禁止
  • 出现在I/O脚上的数据在每个APB2时钟被采样到输入数据寄存器
  • 在开漏模式时,对输入数据寄存器的读访问可得到I/O状态
  • 在推挽式模式时,对输出数据寄存器的读访问得到最后一次写的值
4.1.1 开漏输出(Open-Drain Output)

        描述:开漏输出是一种常见的数字输出方式,特别是在与逻辑电路或外部设备(如传感器、外部控制电路)交互时。它的基本工作原理是:输出端只有一个漏极(Drain),而没有源极(Source),通常是与一个外部上拉电阻连接。

  • 输出端只能输出低电平或“开路”,而不能主动输出高电平。
  • 高电平通常通过外部的上拉电阻拉高,输入端在没有驱动时处于高阻抗状态。
  • 适用于多设备之间共享总线的场景,比如I2C总线。

        优点:可以方便地实现多个设备共用同一总线,适合需要通信的系统,比如I2C总线和一些简单的开关控制。

        缺点:需要外部上拉电阻,且输出高电平的速度较慢,电流驱动能力较弱。

4.1.2 推挽输出(Push-Pull Output)

        描述:推挽输出是一种可以主动输出高电平和低电平的输出方式。其基本原理是:使用两个晶体管(一个NPN型和一个PNP型)来同时驱动信号至高电平和低电平,从而提供更强的驱动能力。

  • 输出端能够主动驱动高电平低电平
  • 比开漏输出具有更强的驱动能力,能提供更大的电流。
  • 无需外部上拉电阻,能够提供较快的响应时间。

        优点:适合要求较强输出驱动能力的应用,比如驱动LED或其他外设。

        缺点:无法直接与多个设备共享总线,除非使用额外的电路,如三态缓冲区。

4.2 复用开漏输出/复用推挽输出

4.2.1 复用开漏输出(Multiplexed Open-Drain Output)

        描述:复用开漏输出是一种在同一引脚上实现多种输出功能的配置。它结合了开漏输出和多路复用技术,使得一个引脚能够在不同时间点提供不同的输出状态。

  • 同一引脚可以根据控制信号实现不同的功能切换,如开漏输出与其他功能之间的切换
  • 输出端为开漏状态时,需要外部上拉电阻
  • 常用于I/O端口多功能共享的场景

        优点:节省引脚数量,可以实现功能复用,适合有限的引脚资源应用

        缺点:控制较为复杂,需要额外的控制逻辑来切换不同的功能

4.2.2 复用推挽输出(Multiplexed Push-Pull Output)

        描述:复用推挽输出是一种结合推挽输出和多路复用技术的输出方式,使得一个引脚能够在多个输出模式之间切换。它结合了推挽输出的强驱动能力与复用的灵活性。

  • 同一引脚可以根据不同的控制信号输出推挽模式下的高电平和低电平。
  • 输出强度较大,可以驱动更大的负载。
  • 不需要外部上拉电阻,适合高速度、高电流的应用。

        优点:与复用开漏输出类似,能够节省引脚,同时提供较强的输出驱动能力,适合高频和高电流负载。

        缺点:需要较为复杂的控制逻辑,且不能共享总线,除非特别设计。

5 总结

  • 浮空输入不稳定,容易受干扰,不推荐直接使用;
  • 上拉输入确保输入端在未连接时拉到高电平,适用于防止信号悬空的情况;
  • 下拉输入确保输入端在未连接时拉到低电平,用于需要稳定低电平的场景;
  • 开漏输出适用于共享总线的场合,但驱动能力较弱,且需要外部上拉电阻;
  • 推挽输出能够提供更强的驱动能力和较快的响应,适合直接驱动负载,但不能共享总线;
  • 复用开漏输出复用推挽输出提供了引脚功能的灵活性,适合多功能系统,能够节省引脚数量,但控制较为复杂。

6 引脚定义(来自江协科技)

温馨提醒:
        在使用GPIO引脚时,一定要特别注意每个引脚的定义和功能。不同的引脚可能具有不同的输入/输出模式、驱动能力以及电压范围。错误的配置可能导致电路不稳定甚至损坏设备!务必仔细阅读芯片的数据手册,确保每个GPIO引脚的功能和连接方式符合项目需求。如果你在连接外部设备时有任何疑问,不妨提前查阅相关文档或求助于经验丰富的开发者,确保电路设计的安全与高效。

        接下来每次的文章最后,我都会附上这张GPIO引脚定义图,便于大家学习,我们和你一同进步!!!加油哦!!