Lazy loaded image
🥳嵌入式Linux开发
Lazy loaded imageSTM32 GPIO基础(pp-od-pu-pd)
Words 2238Read Time 6 min
2024-9-18
2025-4-16
type
date
slug
category
icon
password
什么时候,需要选择上拉、下拉或不拉呢?
  1. 如果是output,那个一般选择no pull,这样,引脚才能根据你的output数据,进行正确输出
  1. 如果是input,那么需要看具体应用的默认输入值是0还是1。如果默认是输入0,则最好配置为pull down,反之则配置为pull up。这样做,主要是为了外部电路在没有上下拉的情况下,出现不确定情况。有许多硬件工程师设计电路时,会在GPIO口的外部设计上下拉电阻,这和内部配置pull up/down是一个目的,且效果相同。
  1. 举例说明:PULLUP&PULLDOWN针对输入模式,比如我们一个单片机的 I / O 脚接一个按键的左端,按键的右端接正电源,那么我们就要设置 I / O 脚为下拉模式,因为这样才能使得按键按下去的时候,能把 I / O 脚拉高,不然设置上拉模式的话,即按键的功能等于摆设。同理,如果按键另一端接地,我们就要设置为上拉模式了。
  1. 总结
    1. 上拉电阻的目的是为了保证在无信号输入时输入端的电平为高电平。而在信号输入为低电平时输入端的电平应该也为低电平。如果没有上拉电阻,在没有外界输入的情况下输入端是悬空的,它的电平是未知的无法保证的,
    2. 上拉电阻就是为了保证无信号输入时输入端的电平为高电平。
    3. 下拉电阻它是为了保证无信号输入时输入端的电平为低电平。
    4. 一般来说,需要区分这个GPIO口用于输入还是输出。

推挽和开漏模式

notion image

推挽电路

两个参数相同的三极管或MOSFET,以推挽方式存在于电路中。在推挽输出中,输出信号可以处于两个状态之一:高电平(logic high)或低电平(logic low)。当输入信号为高电平时,输出端产生一个高电平;当输入信号为低电平时,输出端产生一个低电平。这种输出方式可以实现输出的电平变化,使其能够高效地驱动负载。
  • 同相变化
  • 两个状态
  • 开关器件互补
  • 相对于开漏输出模式,推挽输出最大优势是输出高电平时,上升时间快,电压驱动能力强。
  • 推挽输出模式一般应用在输出电平为0和3.3V而且需要高速切换开关状态的场合
notion image

开漏输出

  • 当输出为逻辑高电平时,开漏输出器件处于断开状态,不提供电流输出。开漏输出模式下引脚既不输出高电平,也不输出低电平,为高阻态。
    • 要得到高电平状态必须外接上拉电阻才行,因此输出高电平的驱动能力完全由外接上拉电阻决定,但是其输出低电平的驱动能力很强。
  • 开漏输出的一个重要应用是用于构建总线通信,如I2C和SPI等。
  • 弱点,就是带来上升沿的延时。因为上升沿是通过外接上拉无源电阻对负载充电,所以当电阻选择小时延时就小,但功耗大;反之延时大功耗小。
  • 多个开漏输出连接到一条线上。通过一只上拉电阻,在不增加任何器件的情况下,形成“与逻辑”关系,即“线与”。
  • 开漏输出模式一般应用在I2C、SMBUS通信等需要 线与功能的总线电路中
notion image

开漏输出和推挽输出的区别

开漏输出和推挽输出模式的区别主要是开漏输出只可以输出强低电平,高电平得靠外部电阻拉高。输出端相当于三极管的集电极,适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内);推挽输出可以输出强高、低电平,连接数字器件。
notion image

三、输入输出模式

GPIO共有8中输入输出模式,分别是:上拉输入、下拉输入、浮空输入、模拟输入、开漏输出、推挽输出、开漏复用输出、推挽复用输出 ,下面我们详细介绍以下上面的八种输入输出模式。
  • 上拉输入: GPIO_Mode_IPU
  • 下拉输入: GPIO_Mode_IPD
  • 浮空输入: GPIO_Mode_IN_FLOATING
  • 模拟输入: GPIO_Mode_AIN
  • 开漏输出: GPIO_Mode_Out_OD
  • 推挽输出: GPIO_Mode_Out_PP
  • 开漏复用: GPIO_Mode_AF_OD
  • 推挽复用: GPIO_Mode_AF_PP
 

浮空输入

浮空输入模式下,I/O端口的电平信号直接进入输入数据寄存器。也就是说,I/O的电平状态是不确定的,完全由外部输入决定;如果在该引脚悬空(在无信号输入)的情况下,读取该端口的电平是不确定的,通常用于IICUSART等总线设备上。
notion image
 

上拉输入模式

上拉输入模式下,I/O端口的电平信号直接进入输入数据寄存器。但是在I/O端口悬空(在无信号输入)的情况下,输入端的电平保持在高电平(并且在I/O端口输入为低电平的时候,输入端的电平也是低电平)
notion image

下拉输入模式

下拉输入模式下,I/O端口的电平信号直接进入输入数据寄存器。但是在I/O端口悬空(在无信号输入)的情况下,输入端的电平保持在低电平;并且在I/O端口输入为高电平的时候,输入端的电平也是高电平。
notion image
 

模拟输入模式

模拟输入模式下,I/O端口的模拟信号(电压信号,而非电平信号)直接模拟输入到片上外设模块,比如ADC模块等。
notion image
 

开漏输出

见上一节

开漏复用输出模式

开漏复用输出模式,与开漏输出模式很是类似。只是输出的高低电平的来源,不是让CPU直接写输出数据寄存器,取而代之利用片上外设模块的复用功能输出来决定的,一般用于片内外设功能:TX1,MOSI,MISO,SCK,SS

推挽输出模式

见上一节
 

推挽复用输出模式

推挽复用输出模式,与推挽输出模式很是类似。只是输出的高低电平的来源,不是让CPU直接写输出数据寄存器,而是利用片上外设模块的复用功能输出来决定的,常见采用推挽输出模式的一般为片内外设功能IICSCLSDL
notion image
 

GPIO 的拉电流和负载和灌电流负载能力

什么是拉电流负载,什么是灌电流负载。
  • 拉电流负载:一种负载电流从驱动门流向外电路,称为拉电流负载。比如使用STM32F4的GPIO直接驱动LED就是拉电流形式。
    • notion image
从功耗和防干扰考虑。不使用的引脚推荐设置为模拟模式
  • 若处于输入模式
    • 上拉输入:I/O 引脚为低电平时,会产生电流消耗
    • 上下拉输入:外部中间电平,为了区分输入值,施密特出发电路产生电流消耗
    • 浮空输入:外部电磁噪声
  • 输出引脚:考虑下拉电阻和外部负载电流消耗
综上考虑,不使用的引脚设置为模拟模式,悬空即可。
 
 
上一篇
模板设计模式:让你的代码结构更清晰
下一篇
Guide to Linux System

Comments
Loading...