对于许多刚入门stm32的同学们来说,GPIO是我们的第一课,初出茅庐的我们会对GPIO的配置感到疑惑不解,也是劝退我们的第一课,今天我们就来一起学习一下stm32的GPIO,提振一下信心。好的,发车了小卷卷们!!!
Step 1.GPIO简介
1.认识GPIO
首先,什么是GPIO呢?我们学过51单片机的小伙伴们,肯定会知道一个概念,叫做IO口,这里的“I”其实就是input,“O”其实就是output,就是输入输出嘛。然后什么是GPIO呢?GPIO的全称是General Purpose Input Output,就是通用输入输出端口的意思。它们有什么区别呢,其实对于我们来说,二者就是一样的,就是GPIO相比于IO,听起来牛逼一点而已都是输入输出端口。
2.GPIO的作用
GPIO的作用:负责采集外部器件的信息或者控制外部器件工作,就是输入输出。这里我们分别举两个例子来理解:
a.输入
这里我们的IO口和VCC相连,如果按键不按下,IO口的输入就是VCC高电平,如果按键按下,IO口就变成了GND低电平,这是一个GPIO输入的例子
b.输出
这里如果IO口输出高电平,就是1,LED灯就亮,如果输出低电平,就是0,LED灯就不亮
3.GPIO特点
【1】不同型号的芯片IO口的数量是不一样的
【2】快速翻转,每次翻转最快只需要两个时钟周期
【3】每个IO口都可以做中断(这点相比于传统的51单片机要好很多,传统的51单片机只有INT0,INT1可以做外部中断)
【4】有8中工作模式(这也是最令人头疼的)
4.GPIO电气特性
stm32的工作电压范围是2v ≤ VDD ≤ 3.6v
GPIO的电压识别范围:
-0.3v ≤ V低 ≤ 1.164v
1.833v ≤ V高 ≤ 3.6v
一般要避免电压在1.164和1.833之间,这里电压到底是0还是1是不确定的
手册里标注FT的是TTL端口的,没有标注的就是CMOS端口的
5.GPIO的输出电流
F103系列的芯片最大输出电流是150毫安,单个IO口的电流输出最大是25毫安,而且不能保证每个IO口能同时输出这个电流
6.GPIO的引脚分布
不多说了,就是看图吧,图上很明确了
电源引脚:V字母开头的都是电源引脚
复位引脚:NRST就是复位引脚
下载引脚;
晶振引脚
ROOT引脚;
GPIO引脚:P字母开头的,基本都是GPIO引脚,一般来说是16个端口,从0到15
Step 2.GPIO结构
我们先看一幅图
我们一步一步来分析这个图
1.保护二极管
首先我们要知道1处这两个二极管的作用,这两个二极管是保护二极管,这两个二极管的作用是什么呢?当外界输入较高的电平时VDD导通,我们都知道二极管有钳制电位的作用,所以高电平就被限制了,同理,当外界输入低电平时(这个东西可以是负的)Vss导通,同样将电平限制在了安全范围里。
2.施密特触发器
其次,我们去看这个施密特触发器,其实应该是肖特基触发器的,这里手册上的图翻译错了,它的特点就是当电压低于某一个值,表现为逻辑0,高于某一个值时,表现为高电平。处于中间位置时候,电平信号不变,我们可以通过一个图去理解它:
3.几个图像
好的下边我们来分析整个图,这个图可以分为两部分,输入部分和输出部分,那么输入和输出到底应该怎么去理解呢?其实stm32的参考手册也给出了输入和输出时候的图,我们可以研究一下 。
a.输入图像
当我们的IO口配置为输入时,有:
● 输出缓冲器被禁止
● 施密特触发输入被激活
● 根据输入配置(上拉,下拉或浮动)的不同,弱上拉和下拉电阻被连接
● 出现在I/O脚上的数据在每个APB2时钟被采样到输入数据寄存器
● 对输入数据寄存器的读访问可得到I/O状态
b.输出图像
当我们的IO口配置为输出时,有:
● 输出缓冲器被激活 ─ 开漏模式:输出寄存器上的’0’激活N-MOS,而输出寄存器上的’1’将端口置于高阻状态(PMOS从不被激活)。 ─ 推挽模式:输出寄存器上的’0’激活N-MOS,而输出寄存器上的’1’将激活P-MOS。
● 施密特触发输入被激活
● 弱上拉和下拉电阻被禁止
● 出现在I/O脚上的数据在每个APB2时钟被采样到输入数据寄存器
● 在开漏模式时,对输入数据寄存器的读访问可得到I/O状态
● 在推挽式模式时,对输出数据寄存器的读访问得到最后一次写的值
c.复用图像
此时,有:
● 在开漏或推挽式配置中,输出缓冲器被打开
● 内置外设的信号驱动输出缓冲器(复用功能输出)
● 施密特触发输入被激活
● 弱上拉和下拉电阻被禁止
● 在每个APB2时钟周期,出现在I/O脚上的数据被采样到输入数据寄存器
● 开漏模式时,读输入数据寄存器时可得到I/O口状态
● 在推挽模式时,读输出数据寄存器时可得到最后一次写的值 下图示出了I/O端口位的复用功能配置。详见stm32f103系列参考手册8.4节-AFIO寄存器描述。 一组复用功能I/O寄存器允许用户把一些复用功能重新映象到不同的引脚。
d.模拟输入
此时,有:
● 输出缓冲器被禁止;
● 禁止施密特触发输入,实现了每个模拟I/O引脚上的零消耗。施密特触发输出值被强置 为’0’;
● 弱上拉和下拉电阻被禁止;
● 读取输入数据寄存器时数值为’0
相信大家看到这里会有点懵逼,你给我一堆这,我也不知道该怎么用啊!那么下面我们就来具体看看IO口的8种输入输出模式
4.GPIO口的八种模式
首先要知道都有哪几种工作模式吧,大概就是四输入,四输出;
输入:输入浮空 ─ 输入上拉 ─ 输入下拉 ─ 模拟输入
输出:开漏输出 ─ 推挽式输出 ─ 推挽式复用功能 ─ 开漏复用功能
下面允许我先啰嗦一下,因为很多人就算知道这些东西,也会一头雾水,到底什么时候要用什么呢?因为我是暖男,我安排好了:
GPIO引脚可以根据需要配置成多种模式,以适应不同的硬件接口需求。下面详细解释您提到的各种输入和输出模式,以及它们的用途。
功能分析
a.输入模式
输入浮空 (Floating Input)
• 描述:在此模式下,GPIO引脚既没有连接到高电平(VCC)也没有连接到低电平(GND),其状态由外部电路的输入决定,但在没有外部输入时状态不确定。
• 用途:通常用于高阻抗传感器的接口,或者在外部电路确保将输入引脚拉高或拉低的情况下使用。但浮空输入容易受到噪声的影响,可能导致读值不稳定。
输入上拉 (Input Pull-up)
• 描述:在此模式下,GPIO引脚通过一个上拉电阻连接到高电平,确保在外部设备未接入或开关未关闭时,GPIO引脚为高电平状态。
• 用途:常用于按钮或开关,当按键未按下时默认读取为高电平,按下时连接到地(GND)读取为低电平。
输入下拉 (Input Pull-down)
• 描述:与上拉输入相对,引脚通过一个下拉电阻连接到低电平,确保在外部设备未接入或开关未闭合时,GPIO引脚为低电平状态。
• 用途:常用于按钮或开关,当按键未按下时默认读取为低电平,按下时连接到高电平(VCC)读取为高电平。
模拟输入 (Analog Input)
• 描述:GPIO引脚配置为读取模拟信号,这通常需要芯片内部集成的模拟到数字转换器(ADC)。
• 用途:用于读取各种类型的模拟传感器输出,如温度传感器、光照传感器、湿度传感器等的模拟信号。
b.输出模式
开漏输出 (Open Drain Output)
• 描述:在此模式下,GPIO引脚在输出低电平时直接连接到地(GND),在输出高电平时不驱动,输出端实际上是“开放”的,需要外部上拉电阻以确保能够读取到高电平。
• 用途:常用于I2C通讯协议的数据线和时钟线,多个设备可以共用同一条线,通过外部上拉电阻来控制线路状态。
推挽式输出 (Push-Pull Output)
• 描述:GPIO引脚可以输出高电平和低电平,高电平时连接到电源(VCC),低电平时连接到地(GND)。
• 用途:适合于大多数控制应用,如LED指示灯、继电器控制等,因为它可以提供足够的电流来驱动外部负载。
推挽式复用功能 (Push-Pull Alternate Function)
• 描述:此模式与推挽式输出类似,但允许GPIO引脚用于特定的复用功能,例如USART(通用同步/异步接收/发送)的TX/RX、SPI的MOSI/MISO等。
• 用途:用于需要GPIO引脚执行特定硬件功能的应用,使得引脚除了基本的输入输出功能外,还能承担如串行通信等特定任务。
开漏复用功能 (Open Drain Alternate Function)
• 描述:与开漏输出相似,GPIO引脚在复用功能时也不主动驱动高电平,依赖外部上拉电阻来确定高电平状态。
• 用途:用于那些在复用功能下需要多个设备共用单一物理连接的应用,如I2C总线的SCL和SDA线,允许多个设备连接至同一总线而不会造成信号冲突。
结构分析
好的,下边我们就这些模式进行结构分析:
a.输入
输入浮空:
[1]上拉电阻关闭
[2]下拉电阻关闭
[3]施密特触发器打开
[4]双MOS管都不导通
输入浮空时,空闲时是高阻态,由外部的环境决定
输入上拉:
[1]上拉电阻开启
[2]下拉电阻关闭
[3]施密特触发器打开
[4]双MOS管都不导通
输入上拉时,空闲时是高电平,外部也是高电平,这里由于上拉电阻和下拉电阻都很大,所以是弱上拉
输入下拉:
[1]上拉电阻关闭
[2]下拉电阻开启
[3]施密特触发器打开
[4]双MOS管都不导通
输入下拉,空闲时IO口是低电平
模拟输入:
[1]上拉电阻关闭
[2]下拉电阻关闭
[3]施密特触发器关闭
[4]双MOS管都不导通
专门用于模拟信号的输入或输出
b.输出
开漏输出:
[1]上拉电阻关闭
[2]下拉电阻关闭
[3]施密特触发器打开
[4]P-MOS管始终不导通
[5]往ODR对应位写0,N-MOS导通,写1则不导通。
写0是外界低电平,写1时高阻态,开漏输出不能输出高电平,可以通过外部(内部F4,F7,H7型号)接上拉电阻来帮助输出高电平
开漏式复用功能:
[1]上拉电阻关闭
[2]下拉电阻关闭
[3]施密特触发器打开
[4]P-MOS管始终不导通
特点:
1.开漏式复用不能输出高电平,可以通过外部(内部F4,F7,H7型号)接上拉电阻来帮助输出高电平
2.由其他外设控制输出
推挽输出:
[1]上拉电阻关闭
[2]下拉电阻开启
[3]施密特触发器打开
[4]往ODR对应位写0,N-MOS导通,写1,P-MOS导通
特点:电源能直接驱动,驱动能力强
推挽式复用功能:
[1]上拉电阻关闭
[2]下拉电阻开启
[3]施密特触发器打开
特点:1.可以输出高,低电平,驱动能力强,
2.由其他外设控制输出
Step.3结语
现在是2024年4月23日凌晨3:13分,已经很累了,我不知道我坚持的意义在哪里。耳机里放着Eason的《陀飞轮》,可是一事无成怎敢听《陀飞轮》。
过去十八岁,没带表,不过有时间 ,连自己也都分清不了得到多与少。也许有一天会命中减少一秒多买一只表,我喜欢的会喜欢我,我执着的会回应我,晚安程明。