【江科协-STM32】1. GPIO

GPIO简介

GPIO(General Purpose Input/Output)通用输入输出口

可配置为8种输入输出模式。引脚电平0-3.3V,部分引脚可容忍5V,输出模式下可控制端口输出高低电平,用来驱动LED、控制蜂鸣器、模拟通信协议输出时序等。

输入模式下可读取端口的高低电平或电压,用于读取按键输入、外接模块电平信号输入、ADC电压采集、模拟通信协议接收数据。

如果需要接入功率比较大的设备,需要接入驱动电路。

GPIO基本结构

APB2是外设总线。在STM32中,所有的GPIO都挂载在APB2外设总线上。

每个GPIO外设有16个引脚,顺序是第0-15号引脚。每个GPIO模块内,主要包含了寄存器和驱动器,寄存器是一段特殊的存储器,内核可以通过APB2总线对寄存器进行读写。

输入寄存器读取为1,证明目前端口是高电平,为0则是低电平。

STM32是32位的单片机,所以STM32内部的寄存器都是32位的。驱动器增加信号的驱动能力,寄存器只负责存储数据。

如果需要点灯,还是需要驱动器增大信号的驱动能力。

GPIO位结构

由图可见,左边三个寄存器,右边则是驱动器,最右边则是引脚。上半部分是输入部分,下半部分是输出部分。

输入

输入部分由IO引脚和两个保护二极管组成,上面的二极管接VDD(3.3V),下面的二极管接VSS(0V),输入电压如果比3.3V高,那么上方二极管将导通,输入电压产生的电流将不会流入主电路;如果输入电压低于VSS(负电压),那么下方二极管将导通。

来到左边,上拉电阻至VDD,下拉电阻至VSS,开关通过程序进行配置。上面导通,下面断开,就是上拉输入模式 ;下面导通,上面断开,就是下拉输入模式。两个都断开,就是浮空。输入引脚如果什么都不接,输入就是浮空,它的位置不确定,极易受到外界影响,所以要避免引脚悬空,就要加上上拉或者下拉电阻。

:::tip

上拉输入可以称作默认为高电平的输入模式,下拉则相反,是低电平的输入模式。

:::

由于翻译问题,TTL肖特基触发器应为施密特触发器。它负责为输入电压进行整形。如果输入电压大于某一个阈值,就会升为高电平。如果小于某值就会降为低电平(参考数电)。

最左边的模拟输入线,连接到ADC(需要接收模拟量)。另一个是复用功能输入(接收数字量),连接到其他需要读取端口的外设上,比如串口的输入引脚等。

输出

数字部分可以由输出数据寄存器或片上外设控制,通过数据选择器接到了输出控制部分。

选择输出数据寄存器进行控制,就是普通IO口输出,写该寄存器的某一位即可操作对应端口;位设置/清除寄存器可以用来单独操作输出数据寄存器的某一位,不影响其他位,如果想单独控制其中某个端口,需要几种方式:

  1. 读出寄存器,按位与(&=)和按位或(|=)的方式更改某一位,再将更改后的数据写回。(效率不高)
  2. 设置位设置/清除寄存器,对某一位进行置1,在位设置寄存器的对应位写1,不需操作的写0。清除则在位清除寄存器对应位写1。(主要使用)
  3. 读写STM32的位带区域(映射了RAM和外设寄存器的所有的位)。读写这段地址中的数据,相当于读写所映射位置的某一位。

右边的MOS管控制开关的导通和关闭,开关负责将IO口接到VDD或者VSS,可以选择推挽、开漏或关闭三种输出方式。

在推挽输出模式下,P-MOS和N-MOS均有效。数据寄存器为1时,上管导通,下管断开,输出直接接到VDD,即输出高电平。这样高低电平均有较强的驱动能力,因此也称为强推输出模式。这种模式下,STM32对IO口的控制权极大。

在开漏输出模式下,P-MOS是无效的,只有N-MOS在工作。数据寄存器为1时,下管断开,输出相当于断开,即高阻模式。数据寄存器为0时,下管导通,输出直接接到VSS,即输出低电平。该模式下,仅有低电平有驱动能力,高电平则没有。乍一看没有什么用,但它可以作为通信协议的驱动方式(I2C),可以在多机输入的情况下减小干扰。此外,还可以用于输出5V的电平信号。

在关闭输出模式下,两个MOS管都无效,即输出关闭,端口的电平由外部信号来控制。

GPIO输入模式

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

前三个模式的电路结构基本一样(刚刚也讲过),都属于数字输入口,都可以读取端口的高低电平。使用浮空输入时,端口一定要接一个连续的驱动源。

模拟输入:基本上是ADC模数转换器的专属,使用ADC的时候,将引脚配置为模拟输入。其他时候基本用不到。

开漏和推挽:结构也基本一样。区别刚刚讲过。

Reference

1. 江协科技.STM32入门教程-2023版 细致讲解 中文字幕M/OL(2021-07-29)2024-10-25. https://www.bilibili.com/video/BV1th411z7sn/?p=5\&share_source=copy_web\&vd_source=8b2bc57e71349607b55c9fde6b078ebd

相关推荐
茯苓gao5 小时前
嵌入式开发笔记:CANopen相关移位运算与通信协议术语详解
网络·嵌入式硬件·学习·信息与通信
梁朝辉8 小时前
STM32H750VBT6中ADCINP与INN什么区别
stm32·单片机·嵌入式硬件
省四收割者9 小时前
一文详解信号完整性(1)
python·嵌入式硬件·数学建模·信息与通信·信号处理·智能硬件
崇山峻岭之间10 小时前
单片机无感FOC驱动之ADC
单片机·嵌入式硬件
Ligocious10 小时前
1.点亮一颗小小的LED
单片机·嵌入式硬件
KaifuZeng14 小时前
通信与接口协议面试八、CAN通信
单片机·嵌入式硬件·面试·通信与接口协议
智源单片机设计15 小时前
基于单片机的直流电机双闭环调速系统设计
单片机·嵌入式硬件
kebidaixu16 小时前
两轮车换电 BMS 的模拟前端中颖 SH367306 AFE 芯片详解
stm32
kebidaixu16 小时前
两轮车换电 BMS 的模拟前端中颖 SH367306 AFE 芯片调试实录:四个关键问题与解决方案
stm32