一、词汇表
1.介绍常用词的定义:
缩略词 | 包含定义 |
---|---|
AMR | 绝对最大额定值(ABSOLUTE MAXIMUM RATINGS 更多地人称为: ABS) |
GPIO | 通用输入/输出 |
GP | 通用 |
P | 推挽 |
PU | PU上拉 |
OD | 开漏 |
AF | 复用功能 |
VIH | 由数字量输入解析为逻辑1的最小电平电压 |
VIL | 由数字量输入解析为逻辑0的最小电平电压 |
VOH | 由数字量输出设置为逻辑1值所提供的最小保证电压电平 |
VOL | 由数字量输出设置为逻辑0值所提供的最大保证电压电平 |
VDD | 为 I/Os 稳压器供电的外部电源 |
VDDIO2 | I/O的外部电源,独立于VDD电压 |
VDDA | 模拟量的外部电源 |
VSS | 接地 |
IIH | 输入为1时的输入电流 |
IIL | 输入为0时的输入电流 |
IOH | 输入为1时的输出电流 |
IOL | 输入为0时的输出电流 |
IIkg | 漏电流 |
IINJ | 注入电流 |
二、寄存器缩写
注:x= A~H
寄存器缩略词 | 包含定义 |
---|---|
GPIOx_MODER | GPIO端口模式寄存器 |
GPIOx_ OTYPER | GPIO输出类型寄存器 |
GPIOx_OSPEEDR | GPIO输出速度寄存器 |
GPIOx_PUPDR | GPIO端口上拉/下拉寄存器 |
GPIOx_IDR | GPIO端口输入数据寄存器 |
GPIOx_ODR | GPIO端口输出数据寄存器 |
GPIOx_BSRR | GPIO端口置位/复位寄存器 |
GPIOx_LCKR | GPIO端口配置锁定寄存器 |
GPIOx_AFRL | GPIO复用功能低位寄存器 |
GPIOx_AFRH | GPIO复用功能高位寄存器 |
GPIOx_ASCR | GPIO端口模拟量开关控制寄存器 |
三、GPIO主要特性
STM32 GPIO所具有的以下特性:
1.输出状态: 推挽、开漏、上拉和下拉
取决于:GPIOx_MODER、GPIOx_ OTYPER、GPIOx_PUPDR
2.选择I/O口速度: 从输出数据寄存器GPIOx_ODR或外设(复用功能输出)输出数据
可为每个I/O(GPIOx_OSPEEDR)选择不同的速度。
3.输入状态: 浮动、模拟量、上拉和下拉。
取决于:GPIOx_MODER、GPIOx_ PUPDR、GPIOx_ASCR
• 将数据输入到输入数据寄存器(GPIOx_IDR)或外设(复用功能输入)
• 置位和复位寄存器(GPIOx_ BSRR),对 GPIOx_ODR 具有按位写权限。
• 锁定机制(GPIOx_LCKR),可冻结 I/O 端口配置。
• 模拟功能选择寄存器(GPIOx_MODER 和GPIOx_ASCR)
• 复用功能选择寄存器(GPIOx_MODER,GPIOx_AFRL ,和GPIOx_AFRH)
• 快速翻转,每次翻转最快只需要两个时钟周期。
• 引脚复用非常灵活,允许将 I/O 引脚用作 GPIO 或多种外设功能中的一种。
四、GPIO功能说明
STM32 GPIO可用于各种配置。每个GPIO引脚都可以通过软件在以下任何模式下单独配置:
• 输入浮空
• 输入上拉
• 输入下拉
• 模拟
• 具有上拉或下拉功能的开漏输出
• 具有上拉或下拉功能的推挽输出
• 具有上拉或下拉功能的复用功能推挽
• 具有上拉或下拉功能的复用功能开漏
五、GPIO缩写
名称 | 缩写 | 定义 |
---|---|---|
S | 电源引脚 | |
引脚类型 | I | 电源引脚 |
I/O | 输入/输出引脚 | |
引脚功能 | 复用功能 | 通过GPIOx_AFR寄存器选择的功能 |
其他功能 | 通过外设寄存器直接选择和启用的功能 | |
FT | 5V 容限 | |
TT | 3V容限 | |
I/O结构 | TC | 标准3.3V I/O |
B | 专用BOOT引脚 | |
RST | 配有内置弱上拉电阻的双向复位引脚 |
注: FT和TT 取决于具体器件,用户需参考数据表中的定义。
六、GPIO等效原理图
STM32产品集成了三个主要的GPIO基本结构:
• 三伏兼容(缩写为TC)。
图1给出了等效的GPIO图结构。
• 三伏容限(缩写为TT)。
• 五伏容限(缩写为FT)。
图2给出了TT或FT等效的GPIO图结构
注:在图 1 和图 2 中,虚线框中的模拟开关是可选的。它的存在取决于要选用的 STM32 产品。有
关详细信息,请参见产品数据手册。
七、GPIO模式描述
本节介绍STM32器件中可用的GPIO引脚配置。
1.输入模式配置
当STM32器件I/O引脚配置为输入时,必须选择以下三个选项之一:
1.带内部上拉的输出。STM32器件中使用上拉电阻,以确保在浮动输入信号的情况下具有良好定义的逻辑电平。根据应用要求,可以使用外部上拉电阻。
2.带内部下拉的输入。在STM32器件中使用下拉电阻,确保在浮动输入信号的情况下具有良好定义的逻辑电平。根据应用要求,可以使用外部下拉。
3.悬空输入。信号电平跟随外部信号。当没有外部信号时,施密特触发器在由外部噪声引起的逻辑电平之间随机切换。这增加了总体消耗。
编程为输入时,I/O端口具有以下特征:
1.输出缓冲器被关闭。
2.施密特触发器输入被打开。
3.根据GPIOx_PUPDR寄存器中的值决定是否激活上拉或下拉电阻。
4.输入数据寄存器每隔 1 个 AHB 时钟周期对 I/O 引脚上的数据进行一次采样。
5.通过读取GPIOx_IDR输入数据寄存器可获取I/O状态。
2.输出模式配置
当STM32器件I/O引脚配置为输出时,必须选择以下两个选项之一:
1.推挽输出模式:
推挽输出实际上使用两个晶体管:一个PMOS和一个NMOS。每个晶体管接通才能将输出驱动到适当的电平:
– 当输出必须驱动为高电平状态时,顶部晶体管(PMOS)导通。
– 当输出必须驱动为低电平状态时,底部晶体管(NMOS)导通。
两个晶体管的控制通过GPIO端口输出类型寄存器(GPIOx_OTYPER)完成。
将输出寄存器(GPIOx_ODR)的相关位写0可激活NMOS晶体管,强制I/O引脚接地。
将输出寄存器(GPIOx_ODR)的相关位写1可激活PMOS晶体管,强制I/O引脚接通VDD。
2.开漏输出模式:
开漏输出模式不使用PMOS晶体管,而是需要一个上拉电阻。
当输出必须变为高电平时,必须关闭NMOS晶体管,仅通过上拉电阻将电平拉高。该上拉电阻可以是内部的,典型值为40 kOhm,并通过GPIO端口上拉/下拉寄存器(GPIOx_PUPDR)激活。
注:
需注意的是,不可能在同一个 I/O 引脚上同时激活上拉和下拉。用户也可以使用外部上拉或下拉电阻代替内部电阻。在这种情况下,必须调整该值以符合GPIO输出电压和电流特性。
编程为输出时,I/O端口具有以下特征:
• 可将输出缓冲器配置为开漏或推挽模式。
• 施密特触发器输入被打开。
• 根据GPIOx_PUPDR寄存器中的值决定是否激活上拉或下拉电阻。
• 写入输出数据寄存器GPIOx_ODR的值将I/O引脚状态置位。
• GPIOx_ODR中的写入数据可从GPIOx_IDR中读取,该寄存器每个AHB时钟周期更新一次。
• 开漏输出通常用于控制供电电压与STM32不同的器件。需要特定上拉电阻时,开漏模式也用于驱动一个或多个I2C器件。
3.复用功能
在一些STM32 GPIO引脚上,用户可以选择复用功能输入/输出。每个引脚可与多达16个外设功能复用,例如通信接口(SPI,UART,I2C,USB,CAN,LCD等)、定时器、调试接口等。
所选引脚的复用功能通过两个寄存器配置:
• GPIOx_AFRL(引脚0到7)
• GPIOx_AFRH(引脚8到15)
要了解在每个 GPIO 引脚上复用了哪些功能,请参见器件数据手册。
。
对 I/O 端口进行编程作为复用功能时:
• 可将输出缓冲器配置为开漏或推挽模式。
• 输出缓冲器由来自外设的信号驱动(发送器使能和数据)。
• 施密特触发器输入被打开。
• 根据GPIOx_PUPDR寄存器中的值决定是否激活上拉或下拉电阻。
输入数据寄存器每隔 1 个 AHB 时钟周期对 I/O 引脚上的数据进行一次采样。对输入数据寄存器的读访问可获取 I/O 状态。产品的数据表和参考手册中提供了复用功能的详细信息。
4.模拟配置
有一些STM32 GPIO引脚可以配置为模拟模式,允许使用ADC、DAC、OPAMP和COMP内部外设。要在模拟模式下使用GPIO引脚,请考虑以下寄存器:
•GPIOx_MODER,选择模式(输入,输出,复用,模拟)。
•GPIOx_ASCR,选择所需的功能,ADC,DAC,OPAMP或COMP。
对 I/O 端口进行编程作为模拟配置时:
• 输出缓冲器被关闭。
• 施密特触发器输入被禁用,因此I/O引脚的每个模拟值零消耗。施密特触发器的输出被强制为恒定值(0)。
• 上拉和下拉电阻被硬件关闭。
• 对输入数据寄存器的读访问值为“0”。
有关ADC,DAC,OPAMP和COMP功能及编程的详细信息,请参阅产品的数据表和参考手册。
八、GPIO电气特性与定义
1.AMR(绝对最大额定值)
绝对最大额定值代表电压、电流、温度、功耗等值的上限值。超过这些值可能导致IC恶化或受损。
工作条件代表IC在适当条件下工作时可保证的值范围。
**注:**这里的IC可能是指集成电路。
2.焊盘泄漏电流(Ilkg)
焊盘泄漏电流是在输入模式下配置时,I/O引脚从输入信号中获得的电流。漏电流的值取决于I/O结构和V IN信号施加到I/O引脚的电压范围。
注:泄漏电流取决于产品。有关实际值,请参见数据手册。
3.注入电流(IINJ)
注入电流是指输入电压(VIN)高于正电源电压 (VDD+ ∆V)或低于接地(VSS)时强制进入引脚的电流。
高于给定规格的注入电流会导致器件内部的电流流动,影响其可靠性。即使是超过规定限值的极小电流也是不允许的。
STM32数据表指定了注入电流和VIN。
负注入电流是在VIN< VSS时引入的电流。GPIO上的最大负注入电流为- 5mA,可接受的最小VIN电压电平为TT和FT GPIO的电压-0.3 V。
正注入电流是当VIN>VDD时引入的电流。对于STM32器件,TT和FT GPIO上的最大正注入电流定义为N/A或0 mA。
N/A意味着只要输入电压在AMR范围内,并且由于GPIO的内部设计,就不会发生电流注入。因此,在这种情况下不会发生GPIO和STM32器件操作的损坏。
0 mA意味着电流注入会损坏GPIO并导致STM32故障。
注: 对于定义为0 mA 的TT 或FT GPIO,禁止正电流注入。
TT GPIO的最大VIN电压等于VDD+0.3 V。FT GPIO的最大V IN 电压是VDD、VDDA、VDDIO2、VDDUSB和VLCD中的最小值加上3.6 V,其中最大VIN值限制为5.5 V。
注: 当 -0.3 V < VIN< VINmax时,没有注入电流。
总注入电流被限制,通常每个器件为 25 mA 。有关确切的限值,请参见器件的数据手册。这限制了可以注入电流的引脚数量。
3.GPIO电流消耗
STM32器件中有两种类型的I/O引脚电流消耗:
1. 静态电流消耗来源主要是,I/O引脚用作输入时保持低电平的上拉电阻,或者I/O引脚
用作输出时支持外部下拉或外部负载的上拉电阻。
2. 动态电流消耗,即I/O引脚切换时,I/O引脚电路和容性负载使用的I/O电源电压的电
流消耗。
动态电流消耗由 公式1给出。
公式1: ISW= CLx VDDx FSW
– ISW 为切换I/O对容性负载充电/放电的灌电流
– CL为I/O引脚看到的总负载电容,CL是内部、外部、PCB和封装电容的总和
– VDD是I/O供电电压
–FSW为I/O切换频率
注: GPIO 速度对动态电流消耗没有影响。
4.电压输出和电流驱动
所有STM32 GPIO均符合CMOS和TTL标准,能够从外部引脚提供或吸收电流。
图3 根据所选的输出电平显示当前电流量。
IOH是当GPIO输出处于高电平状态时的拉电流。
IOL是当GPIO输出处于低电平状态时的灌电流。
可以通过一个GPIO或电源来吸收或提供的最大输出电流仅限于保留GPIO,以及所有GPIO所提供或吸收的电流总和,并且不能超过产品数据表上的内部固定AMR值。
根据电流驱动器限制,必须限制可以驱动电流的GPIO的数量。
在通信交换的情况下,STM32输出信号必须与接收器设备的VIL/VIH兼容,STM32输入必须与发射器设备的VOL/VOH兼容,如图4所示。
对于CMOS技术,输入阈值电压相对于VDD,如下所示:
VIHmin ~ 2/3 VDD和VILmax ~ 1/3 VDD。
对于TTL技术,电平是固定的,等于VIHmin= 2V和VILmax= 0.8 V。
VOH、VOL、VIH、VIL电平和输出驱动电流的值是STM32数据表中给定的一般输入/输出特性的一部分。
九、3V容限和5V容限
电气特性将GPIO定义为三伏容限、五伏容限,以及三伏容量。容差表示GPIO可以接受的电压值。电压容量表示可由GPIO输出的电压值。
1.3V容限GPIO(TT)
对于某些STM32,电气规范将GPIO定义为三伏容限或三伏兼容。从用户角度上来看,上述两种GPIO并没有什么差别
需要注意的是,三伏容限的输入电压不能超过VDD+0.3v
2.5V容限GPIO(TT)
STM32器件嵌入了5V容限GPIO。这些GPIO实际上能够容限VDD+3.6V。这意味着I/O引脚可以接受这样的电压,同时不会对GPIO赵成泄漏电流和损坏。
无论电源电压如何,VIN都不能超过5.5V。
当VDD=0V时,GPIO上的输入电压不能超过3.6V.
在多电源和多路复用的GPIO的情况下(VDD、VDDUSB、VLCD、VDDA),GPIO能够容限VDD、VDDUSB、VLCD、VDDA中最小电源电压加上3.6V;
但是,GPIO仅在输入模式下有5V容限。使能输出模式时,GPIO不再具有5V容限。有关I/O输入电压的更多详细信息,请参阅数据表的一般操作条件表中的VIN参数。
2. 5V容限应用示例
(1)白色LED驱动器
在典型的3.5V的电源下(最大4V),白色LED需要典型的20mA电流。
由于STM32器件的最大吸收电流为25mA,因此没有足够的余量直接驱动LED。图6提供了两种选择,使用外部MOPSFET(或BJT)或通过两个GPIO驱动。
对于GPIO并行驱动器选项,必须使用开漏模式,并且禁用内部上拉。由于接地电流与MCU消耗相比要大很多,因此需要谨慎设计接地布局。
(2)三端双向可控硅驱动器
图7中显示了-5V电源系统的三端双向可控硅驱动器示例。
在此设置中,STM32电流取决于输出电压电平。STM32 GPIO必须被设置为开漏模式。如果I/O驱动电流不足,可以并联使用的耦合GPIO.
(3)I2C应用程序
由1.8V或3.3V供电的STM32器件可以直接与5V I2C总线通信,如图8所示。
如果出现VDD=0V而VDDX=5V(甚至瞬态),建议在VDD个VDDX之间放置一个齐纳二极管(例如3.3V).
图9显示的示例中,VDD是由VDDX供电的LDO输出。
(4)UART应用程序
如果要与之通信的UART收发器由TTL兼容的5V电源供电,STM32器件可以直接通信,如图10所示
如果5V UART接口输入兼容TTL,则VOL<0.8V切VOH>2.0V。这意味着3.3VCMOS输出可以无故障驱动。当VDD=3.3V时,STM32 Ft焊盘可以接受0V至5V CMOS电平输入。
(5)USB VBUS示例
STM32器件的VBUS焊盘具有5V容限,但是,它需要符合VDD最大额定值。如果STM32由独立电源供电,只要不提供STM32,就不允许连接VBUS。另一种解决方案是放置一个齐纳二极管(例如3.3V)在VBUS和VDD之间,如图11所示。
如果STM32电源有VBUS提供的LDO供电,建议使用齐纳二极管(例如3.3V),如图12所示。
(6)5V ADC转换的I/O使用情况
STM32器件具有连接到ADC输入的FT焊盘。当ADC未连接时(I/O中的模拟开关未闭合)I/O可以接受VDD加上3.6V,在这种情况下,可以向FT焊盘施加5V电压。
但是,一旦I/O输入连接到ADC,并且在采样阶段,连接到VDDA和VREF+的寄生二极管就会正向偏压如图13所示。
建议使用外部钳位(例如一系列电阻和肖特基二极管连接到VREF+)来钳制输入电压。
寄生二极管不具备可靠性特性。STMicroelectronics(意法半导体公司)不保证这些二极管可以接受的电流水平。
解决方案:
如果STM32器件上有未使用的FT焊盘,请将其连接到具有并行配置的ADC输入焊盘,如图14所示。
1.ADC可实现其他FT_PAD下拉功能进行转换。
2.如果第一次ADC转换结果小于2V(这表示直流电源在ADC输入范围内),则ADC会在下拉电阻禁用的情况下重新进行转换。
上述方法避免了寄生二极管的正向偏压。
十、GPIO硬件指南
本章总结了使用STM32 GPIO开发应用程序时要检查的部分最重要的规则。
1.避免悬空未使用的引脚
不要将未使用的引脚悬空。将其接地过连接到PCB上供电,或者使用PU/PD。当输入缓冲器随机切换时,非连接输入引脚上的噪声会消耗额外的功耗。
如果应用对ESD(静电防护装置)敏感,可将引脚接地,获奖引脚定义为PP输出后将其驱动为低电平。
2.交叉电压域泄露
在具有多种不同电压(例如3.3V和1.8V或5V和3.3V)的应用中,检查所有带有PU的GPIO没有暴露于超过VDD的输入电压。当连接可选外部电路(调试器探针和系统或其他)时,这一点尤其有效。
图15提供的示例表示,当STM32和驱动缓冲器没有提供相同的VDD电源时内部上拉电阻引起的漏电流。粉红色箭头标记漏电流路径。
3.没有VDD供电时的电压保护
仅在提供STM32时才能保证电压保护(例如输入的5V容差)。
只有在VDD高于操作所需的最低电压时,才能实现5V容差。
如果VDD不存在,例如接地,则最大电压不得超过3.6V(确切限值在STM32数据表中提供)。
需要注意的是,如果外部电压超过最大电压值,可能会损坏STM32器件。
图16提供的实例表示没有VDD时供应引起的漏电流,粉红色箭头标记漏电流路径。
4.无负载漏极开路输出
当GPOP配置为漏极开路输出且没有外部上拉负载或内部上拉时,必须将其强制为低电平驱动,以便定义引脚上的输入信号。这避免了悬空输入。此配置如图17所示。
5.使用MCO时钟输出
时钟信号可能是高电流消耗的主要因素,必须特别注意与MCU相关的所有输入和输出时钟或电路板上的其他组件。设计人员必须考虑使用MCU时钟通过输出引脚(例如MCO)为电路板上的其他组件提供时钟时,由于I/O开关频率二增加了电流消耗。
因此,硬件设计人员可以选择通过PCB布线将MCO引脚连接到其他时钟输入组件,或根据电路板上的全部时钟要求(时钟输入数量和时钟频率)使用外部振荡器。
注:MCO:微控制器时钟输出复用功能。
6.调试引脚默认具有PU或PD
默认情况下,某些引脚被编程为具有PU或PD的输入(详细请参阅数据表),如果这些引脚用于其他目的,则必须避免在PU时强制为0或在PD时强制为1,因为这会导致额外消耗。
7.NRST 因胶片不能用作使能
NRST引脚不能用作使能引脚,以便实现最低功耗。永久接地可使设备保持在启动阶段。如果可能,最好释放NRST引脚并进入一种低功耗模式(待机或关机)。
注:NRST引脚已经继承了一盒弱PU(约40KOhm…40K的上拉电阻)。
8.VBAT GPIO 的电流强度有限
VBAT GPIO引脚允许从外部电压源(电池或电容)为STM32备用域供电。当STM32微控制器处于VBAT模式下。大多数GPIO都会关闭。当VDD不存在时,只有属于备用域的GPIO才能通过VBAT供电。佩芬GPIO通过集成交换机提供,该胶管及的求佛那个强度有限(不能超过3mA)。这些I/O不得用于驱动高电流,并且它们的速度也是有限的,计时VDD有效,过度驱动此功能可能会导致未指定的电平,从而可能在系统中产生额外的功耗。
9.BOOT0引脚
永久应用VDD电压到BOOT0时会产生额外的电量消耗。
十一、实现功耗优化的GPIO软件指南
1.将未使用的GPIO输入配置为模拟输入
GPIO始终有一个输入通道,可以是数字或模拟通道。
如果不需要读取GPIO数据,可以优先配置为模拟输入,这节省了输入施密特触发器的消耗。
2.调节GPIO速度
上升时间,下降时间和最大频率可使用GPIOx_OSPEEDR配置寄存器进行配置。这种调整对EMI(电磁干扰)和SSO(同时开关输出)有影响,因为开关电流峰值较高。因此必须平衡GPIO性能与噪声。每个GPIO信号的上升时间和下降时间必须适应与相关信号频率和电路板容性负载兼容的最小值。
3.不使用时禁用GPIO寄存器时钟
如果某个GPIO组不需要长时间使用,请用HAL_RCC_GPIOx_CLK_DISABLE()函数禁用其时钟。
4.进入低功耗模式时配置GPIO
进入低功耗模式时,所有引脚信号必须连接到VDD或接地。
如果GPIO连接到外部接收器(外部元件输入),则必须使用PP过PU/PD强制GPIO信号值。
当GPIO连接到驱动器(外部元件输出或总线)时,驱动器必须提供有效电平(VDD或接地)。如果未定义驱动器电平,则必须使用PU/PD强制GPIO上的信号。
出于实际原因,当GPIO是运行模式下的输入(模拟或数字)时,在低功耗模式下使用输入PU/PD可能更容易;当GPIO是运行模式下的输出时,则使用输出PP。这可以避免在进入或退出停止模式时管理更改。
十二、GPIO选型指南