101.1关于GPIO知识汇总

零.前言

  有时候,不想搞懂的东西,也许,这一辈子都不会懂了。

  本文参(搬)考()来源:http://forum.armfly.com/forum.php 安富莱电子论坛

 

一.Tips

1)对于不使用的引脚,推荐设置为模拟模式,悬空即可

2)GPIO 还涉及到一个注入电流的问题

3)GPIO 的速度等级高的时候,最好使能IO 补偿单元。

 

二.GPIO功能简介(基于STM32H7 )

输出状态:开漏/推挽+ 上拉/下拉电阻。
通过输出数据寄存器(GPIOx_ODR)或者外设(GPIO 设置为复用模式时)输出数据。
GPIO 速度等级设置。


输入状态:浮空,上拉/下拉,模拟。
通过输入数据寄存器(GPIOx_IDR)或者外设(GPIO 设置为复用模式)输入数据。
通过寄存器GPIOx_BSRR 实现对寄存器GPIOx_ODR 的位操作。
通过配置寄存器GPIOx_LCKR 的锁机制,实现冻结IO 口配置。

每两个时钟周期就可以翻转一次IO。
高度灵活的引脚复用功能,允许IO 引脚既可以做GPIO 也可以做功能复用。

 

三.GPIO 功能模式分析

输入浮空
输入上拉
输入下拉
模拟功能
具有上拉或下拉功能的开漏输出
具有上拉或下拉功能的推挽输出
具有上拉或下拉功能的复用功能推挽
具有上拉或下拉功能的复用功能开漏


由于上拉和下拉是可选配置,对应的HAL 库配置使用下面6 种就可以表示:
GPIO_MODE_INPUT 输入模式
GPIO_MODE_OUTPUT_PP 推挽输出
GPIO_MODE_OUTPUT_OD 开漏输出
GPIO_MODE_AF_PP 复用推挽
GPIO_MODE_AF_OD 复用开漏
GPIO_MODE_ANALOG 模拟模式

3.1 推挽输出

推挽电路是两个参数相同三极管或MOSFET,以推挽方式(push-pull)存在于电路中。

推挽方式:https://www.zhihu.com/question/28512432

电路工作时,两只对称的开关管每次只有一个导通,导通损耗小、效率高。输出既可以向负载灌电流,也可以从负载抽取电流。

推拉式输出级提高电路的负载能力。相对于开漏输出模式,推挽输出最大优势是输出高电平时,上升时间快,电压驱动能力强

 

3.2 开漏输出

开漏端相当于MOS 管的漏极(三极管的集电极),要得到高电平状态必须外接上拉电阻才行,因此输出高电平的驱动能力完全由外接上拉电阻决定,但是其输出低电平的驱动能力很强。

开漏形式的电路有以下几个特点

 

1. 输出高电平时利用外部电路的驱动能力,减少 IC内部的驱动。

 

2. 开漏是用来连接不同电平的器件,匹配电平用的,因为开漏引脚不连接外部的上拉电阻时,只能输出低电平。

如果需要同时具备输出高电平的功能,则需要接上拉电阻,很好的一个优点是通过改变上拉电源的电压,便可以改变传输电平

上拉电阻的阻值决定了逻辑电平转换的速度。阻值越大,速度越低,功耗越小。

 

3. 开漏输出提供了灵活的输出方式,但是也有其弱点,就是带来上升沿的延时

因为上升沿是通过外接上拉无源电阻对负载充电,所以当电阻选择小时延时就小,但功耗大;反之延时大功耗小。

所以如果对延时有要求,则建议用下降沿输出。

 

4. 可以将多个开漏输出连接到一条线上。通过一只上拉电阻,在不增加任何器件的情况下,形成“与逻辑”关系,即“线与”。

可以简单的理解为:

在所有引脚连在一起时,外接一上拉电阻,如果有一个引脚输出为逻辑0,相当于接地,与之并联的回路“相当于被一根导线短路”,

所以外电路逻辑电平便为0,只有都为高电平时,与的结果才为逻辑1。

 

3.3  复用推挽和开漏

复用指的是GPIO 切换到CPU 内部设备(比如SPI,I2C,UART 等电路),也就是GPIO 不是作为普通IO 使用,是由内部设备直接驱动。

推挽和开漏的特征同上。

 

3.4 四种输入模式

 浮空输入:CPU 内部的上拉电阻、下拉电阻均断开的输入模式。
下拉输入:CPU 内部的下拉电阻使能、上拉电阻断开的输入模式。
上拉输入:CPU 内部的上拉电阻使能、下拉电阻断开的输入模式。

 

3.5 模拟输入

模拟输入模式是GPIO 引脚连接内部ADC。

 

四. 拉电流和灌电流

拉电流负载:一种负载电流从驱动门流向外电路,称为拉电流负载。
(自己出力)

 

灌电流负载:负载电流从外电路流入驱动门,称为灌电流负载。

(灌酒,灌水)

 

五.不使用的引脚推荐设置为模拟模式

主要从功耗和防干扰考虑。

1.所有用作带上拉电阻输入的I/O 都会在引脚外部保持为低时产生电流消耗。此电流消耗的值可通过使用的静态特性中给出的上拉/ 下拉电阻值简单算出。

2.对于输出引脚,还必须考虑任何外部下拉电阻或外部负载以估计电流消耗。

3.若外部施加了中间电平,则额外的I/O 电流消耗是因为配置为输入的I/O。此电流消耗是由用于区分输入值的输入施密特触发器电路导致。

   除非应用需要此特定配置,否则可通过将这些I/O 配置为模拟模式以避免此供电电流消耗。ADC 输入引脚应配置为模拟输入就是这种情况。

4.任何浮空的输入引脚都可能由于外部电磁噪声,成为中间电平或意外切换。为防止浮空引脚相关的电流消耗,它们必须配置为模拟模式,或内部强制为确定的数字值。

   这可通过使用上拉/ 下拉电阻或将引脚配置为输出模式做到。

故,不使用的引脚设置为模拟模式,悬空即可。

posted @ 2019-03-30 16:38  Peong  阅读(863)  评论(0)    收藏  举报