关于STM32的GPIO输入、输出模式与配置方法

文章目录

  • 前言
  • 一、GPIO的功能描述
  • 二、GPIO的四种输入模式
    • 1.GPIO浮空输入_IN_FLOATING
    • 2.GPIO上拉输入_IPU
    • 3.GPIO下拉输入_IPD
    • 4.GPIO模拟输入_AIN
  • 三、GPIO的四种输出模式
    • 1.GPIO开漏输出_OUT_OD
    • 2.GPIO推挽输出_OUT_PP
    • 3.GPIO开漏复用输出_AF_OD
    • 4.GPIO推挽复用输出_AF_PP
  • 四、GPIO的配置方法
    • 1.定义GPIO引脚的结构体变量
    • 2.配置引脚的速度
    • 3.初始化结构体的变量
    • 4.初始化对应的端口

前言

我们在学习STM32的过程中,有时候会遇到原理不清楚的问题,所以本篇文章将对GPIO的输入输出模式与配置方法进行简单的介绍,方便各位同学理解与使用。
注:本文部分图片来自于*STM32F10xxx参考手册。

一、GPIO的功能描述

每个GPIO端口有两个32位配置寄存器(GPIOx_CRL,GPIOx_CRH),两个32位数据寄存器(GPIOx_ IDR和GPIOx_ ODR),一个32位置位/复位寄存器(GPIOx_ BSRR),一个16位复位寄存器(GPIOx_ BRR)和一个32位锁定寄存器(GPIOx_ LCKR)。
根据数据手册中列出的每个I/O端口的特定硬件特征,GPIO端口的每个位可以由软件分别配置成多种模式。

-输入浮空
-输入上拉
-输入下拉
-模拟输入
-开漏输出
-推挽式输出
-推挽式复用功能
-开漏复用功能

二、GPIO的四种输入模式

当IO口配置为输入时:

  • 输出缓冲器被禁止
  • 施密特触发输入被激活
  • 根据输入配置(上拉,下拉或浮动)的不同,弱上拉和下拉电阻被连接
  • 出现在I/O脚上的数据在每个APB2时钟被采样到输入数据寄存器
  • 对输入数据寄存器的读访问可得到I/O状态

关于STM32的GPIO输入、输出模式与配置方法
输入信号经过施密特触发器接入输入数据存储器。当无信号输入时,电压不确定。
可以认为输入端口阻抗无穷大,这样可以方便检测到微弱的信号。此时输入高电平即高电平,输入低电平即低电平。但是外界没有输入时输入电平却容易受到外界电磁干扰的影响。

如:按键采用浮空输入,则在按键按下时输入电平为低,但是当松开按键时输入端口悬空,外界有微弱的干扰都会被端口检测到。此时端口可能高,也可能低。

2.GPIO上拉输入_IPU

与上一部分的浮空输入模式相比,仅仅是在数据通道上面,接入了一个上拉电阻。

关于STM32的GPIO输入、输出模式与配置方法

根据STM32的数据手册,这个下拉电阻阻值也是介于30K~50K 欧姆。

浮空输入在外界没有输入时状态不确定,可能对电路造成干扰。为了使得电路更加稳定,不出现没有输入时端口的输入数据被干扰 (比如手碰一下电压就发生变化)。
这时就需要下拉(上拉)电阻。此电阻与端口输入阻抗相比仍然较小。有输入信号时端口读取输入信号,无输入信号时端口电平被拉到低(高)电平。
当单片机的IO口作输出时,如果不接上拉电阻只能提供灌电流。无法输出电流驱动外接设备。这时也需要考虑上拉电阻。这样才可以使IO输出高电平。

4.GPIO模拟输入_AIN

如果把STM32配置为模拟输入模式时,工作原理就十分简单了,信号从左边编号为1 的端口进从右边编号为2的一端直接进入STM32单片机的AD模块。

关于STM32的GPIO输入、输出模式与配置方法

当I/O口被配置为复用时:

  • 在开漏或推挽式配置中,输出缓冲器被打开
  • 内置外设的信号驱动输出缓冲器(复用功能输出)
  • 施密特触发输入被激活
  • 弱上拉和下拉电阻被禁止
  • 在每个APB2时钟周期,出现在I/O脚上的数据被采样到输入数据寄存器
  • 开漏模式时,读输入数据寄存器时可得到I/O口状态
  • 在推挽模式时,读输出数据寄存器时可得到最后一次写的值

关于STM32的GPIO输入、输出模式与配置方法

开漏输出高电平时是由外接电源输出的,因此可以实现高于输出端口电压的输出。可以实现电平的转换。开漏输出可以实现线与功能,方法是多个输出共接一个上拉电阻。但是漏极开路输出上升沿慢,因为上升沿是外接电源对上拉电阻以及外接负载充电。

2.GPIO推挽输出_OUT_PP

关于STM32的GPIO输入、输出模式与配置方法

不同的是编号为2的输入源不同,它是和复用功能的输出端相连

此时的“输出数据寄存器”被输出通道给断开了。

同样,CPU也可以从“输入数据寄存器”读取到外部IO端口变化的电平信号。

4.GPIO推挽复用输出_AF_PP

关于STM32的GPIO输入、输出模式与配置方法

编号2 “输出控制电路” 输入与复用功能的输出端相连

此时“输出数据寄存器”被从输出通道断开了,片上外设的输出信号直接与“输出控制电路”的输入端想连接。

在将GPIO配置成复用输出功能后,假如相应的外设模块没有被激活,那么此时IO端口的输出将不确定。

四、GPIO的配置方法

1.定义GPIO引脚的结构体变量

2.配置引脚的速度

3.初始化结构体的变量

(1)引脚

(2)速度

(3)模式

模式的配置介绍:

一个IO口需要4个bit来控制:
CNF MODE CNF MODE
00 00 ~ 11 11
也就是十六进制的 0x 0 ~ 0x F

其中MODE是设置输入输出模式::

  • 00:输入(复位后的状态)
  • 01:输出,最大速度10MHz
  • 10:输出,最大速度2MHz
  • 11:输出,最大速度50MHz

而CNF是在MODE的基础上选择更细分的模式:

(1)当MODE为00,即输入模式下:

  • 00:模拟输入
  • 01:浮空输入
  • 10:上拉/下拉输入
  • 11:保留

(2)当MODE为01,10,11,即输出模式时:

  • 00:推挽输出
  • 01:开漏输出
  • 10:复用推挽输出
  • 11:复用开漏输出

4.初始化对应的端口

(1) 作为普通GPIO输入:
根据需要配置该引脚为浮空输入、带弱上拉输入或带弱下拉输入,同时不要使能该引脚对应的所有复用功能模块。
(2) 作为普通GPIO输出:
根据需要配置该引脚为推挽输出或开漏输出,同时不要使能该引脚对应的所有复用功能模块。
(3) 作为普通模拟输入:
配置该引脚为模拟输入模式,同时不要使能该引脚对应的所有复用功能模块。(A/D模拟输入)
(4) 作为内置外设的输入:
根据需要配置该引脚为浮空输入、带弱上拉输入或带弱下拉输入,同时使能该引脚对应的某个复用功能模块。
(5)作为内置外设的输出:
根据需要配置该引脚为复用推挽输出或复用开漏输出,同时使能该引脚对应的所有复用功能模块。

来源:#偏执I765

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年4月7日
下一篇 2022年4月7日

相关推荐