STM32 GPIO引脚配置及使用指南

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 一、GPIO简介
  • 二、基本结构
  • 三、GPIO工作模式
  • 一,浮空,上拉,下拉输入模式
  • 二,模拟输入模式
  • 三,开漏输出模式
  • 四,推挽输出模式
  • 五,复用开漏输出
  • 六,复用推挽输出
  • 开漏输出和推挽输出的区别:
  • GPIO模式总结

  • 一、GPIO简介

    GPIO(General Purpose Input Output)通用输入输出口,可配置为八种输入输出模式,引脚电平为0V~3.3V(部分引脚可容忍5V)。STM32芯片的GPIO被分成很多组,每组有16个引脚,所有的GPIO引脚都有基本的输入输出功能
    输出模式下可控制端口输出高低电平,以驱动LED ,控制蜂鸣器,模拟通信协议输出时序(I2C,SPI)等。
    输入模式下可读取端口的高低电平或电压,以读取按键输入,外接模块电平信号输入,ADC电压采集,模拟通信协议接收数据等。

    二、基本结构

    图一(系统结构图)
    图1
    如图所示,所有的GPIO都是挂载在APB2外设总线上的。(所以在使用GPIO时使用APB2相关的函数)
    void RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE );
    图二
    图二
    GPIO外设的名称按照GPIOA,GPIOB,GPIOC等命名。
    每个GPIO都有16个引脚
    寄存器是特殊的储存器,内核通过APB2总线对寄存器进行读写,完成输出读写电平的功能。
    (stm32是32位的单片机,每个寄存器都有32位,但端口只有16位,此寄存器只有低16位有对应端口)
    图三


    若输入电流大于3.3V,上二极管就会导通,防止过大电流对GPIO的伤害。电流小于0V时同理。

    因为引脚是外界输入,虽然为数字信号,但信号传输时可能失真,此时施密特触发器解决
    施密特触发器:当输入高于某一阈值时为高,低于某一于是时为低(并不是在上限上就是高电平,在上限下就是低电平,而是高于上限后处于高,直到再次低于下限时为低

    寄存器介绍
    想要单独控制某一端口而不影响其他端口,需要一些特殊的方式

    第一种方式:通过按位与和按位或的方式更改某一位,最后再将数据写回去,C语言中就是 &= 和 |= 的操作 (麻烦、效率低)

    第二种方式(主用):设置位设置和位清除寄存器,如果需要设置,那么就在位设置寄存器某一位写1。如果需要清除,那么就在位清除寄存器写0。这样内部电路就会帮我们处理(通过库函数实现)。

    第三种方式:通过寻址的方式配置寄存器,暂时不会用到(如51就是这种方法)。

    三、GPIO工作模式

    一,浮空,上拉,下拉输入模式

    上拉,下拉电阻提供默认输入。(电阻阻值大,为弱上拉,下拉模式,防止干扰正常输入)
    上拉模式为默认输入为高电平,下拉模式默认输入低电平。
    浮空输入模式下,I/O端口的电平信号直接进入输入数据寄存器。外部输入时0读出的就是0,外部输入时1读出的就是1。当引脚处于浮空状态时,极不稳定

    二,模拟输入模式

    当GPIO引脚用于ADC采集电压的输入通道时,用作"模拟输入"功能,此时信号不经过施密特触发器,直接直接进入ADC模块,并且输入数据寄存器为空 ,CPU不能在输入数据寄存器上读到引脚状态
    当GPIO用于模拟功能时,引脚的上、下拉电阻是不起作用的,这个时候即使配置了上拉或下拉模式,也不会影响到模拟信号的输入输出

    除了 ADC 和 DAC 要将 IO 配置为模拟通道之外其他外设功能一律 要配置为复用功能模式
    复用功能输入接收数字量,接在触发器后方。

    三,开漏输出模式

    在开漏输出模式时,只有N-MOS管工作,如果我们控制输出为0,低电平,则P-MOS管关闭,N-MOS管导通,使输出低电平,I/O端口的电平就是低电平,若控制输出为1时,高电平,则P-MOS管和N-MOS管都关闭,输出指令就不会起到作用,此时I/O端口的电平就不会由输出的高电平决定,而是由I/O端口外部的上拉或者下拉决定 如果没有上拉或者下拉 IO口就处于悬空状态。

    作用:(i)、可以作为通信协议的驱动方式(比如I2C通信的引脚就是使用开漏模式),在多机通信的情况下,这个模式可以避免各个设备的相互干扰

    (ii)、可以用于输出5V的电平信号,比如在IO口外接一个上拉电阻到5V的电源

        当输出低电平时,由内部的N-MOS直接接VSS
    
        当输出高电平时,由外部的上拉电阻拉高至5V
    

    这样就可以输出5V的电平信号,用于兼容一些5V电平的设备

    四,推挽输出模式

    在推挽输出模式时,N-MOS管和P-MOS管都工作,如果我们控制输出为0,低电平,则P-MOS管关闭,N-MOS管导通,使输出低电平,I/O端口的电平就是低电平,若控制输出为1 高电平,则P-MOS管导通N-MOS管关闭,使输出高电平,I/O端口的电平就是高电平, 外部上拉和下拉的作用是控制在没有输出时IO口电平。

    总结:这种模式高低电平都有较强驱动能力,STM32对IO口具有绝对的控制权,高低电平都由STM32说了算。

    五,复用开漏输出

    GPIO复用为其他外设,输出数据寄存器GPIOx_ODR无效; 输出的高低电平的来源于其它外设,施密特触发器打开,输入可用,通过输入数据寄存器可获取I/O实际状态 除了输出信号的来源改变 其他与开漏输出功能相同。

    六,复用推挽输出

    GPIO复用为其他外设(如 I2C),输出数据**寄存器GPIOx_ODR无效; 输出的高低电平的来源于其它外设,施密特触发器打开,**输入可用,通过输入数据寄存器可获取I/O实际状态 除了输出信号的来源改变 其他与开漏输出功能相同。

    开漏输出和推挽输出的区别:

    推挽输出:

    可以输出强高低电平,连接数字器件

    推挽结构一般是指两个三极管分别受两互补信号的控制,总是在一个三极管导通的时候另一个截止.

    开漏输出:

    可以输出强低电平,高电平得靠外部电阻拉高。输出端相当于三极管的集电极. 需要外接上拉电阻,才能实现输出高电平 合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内);

    在使用任何一种开漏模式时,都需要接上拉电阻,否则只能输出低电平。

    GPIO模式总结

    在 STM32 中选用 IO 模式
    (1) 浮空输入_IN_FLOATING ——浮空输入,可以做 KEY 识别, RX1
    (2)带上拉输入_IPU——IO 内部上拉电阻输入
    (3)带下拉输入_IPD—— IO 内部下拉电阻输入
    (4) 模拟输入_AIN ——应用 ADC 模拟输入,或者低功耗下省电
    (5)开漏输出_OUT_OD ——IO 输出 0 接 GND, IO 输出 1,悬空,需要外接上拉电阻,才能实现输出
    高电平。当输出为 1 时, IO 口的状态由上拉电阻拉高电平,但由于是开漏输出模式,这样 IO 口也就可以
    由外部电路改变为低电平或不变。可以读 IO 输入电平变化,实现 C51 的 IO 双向功能
    (6)推挽输出_OUT_PP ——IO 输出 0-接 GND, IO 输出 1 -接 VCC,读输入值是未知的
    (7)复用功能的推挽输出_AF_PP ——片内外设功能(I2C 的 SCL,SDA)
    (8)复用功能的开漏输出_AF_OD——片内外设功能(TX1,MOSI,MISO.SCK.SS)

    作者:啊?啊?啊?

    物联沃分享整理
    物联沃-IOTWORD物联网 » STM32 GPIO引脚配置及使用指南

    发表评论