STM32 GPIO详解

GPIO详解

  • MOS管

MOS管是一种半导体器件,它与三极管十分相像。

图 1三极管

图 2 MOS管

MOS管和三极管都有一个控制端,三极管就是基极和MOS管的栅极(Gate)。剩下管脚分别叫漏极(Drain)和源极(Source)。

我们知道,三极管是一种电压控制电流的器件,因为基极和发射极间电压在一定范围内,集电极电流遵循:

                                                                Ic=βIbe

      而Ibe是由基极电压和及其限流电阻决定的。

      但是,MOS管不一样,MOS管是电压控制电压器件,MOS管栅极达到指定栅源电压(VGS)后,源漏之间就会导通。敏锐的同学就会发现,这就是一种的电子开关,只要漏源间的耐压足够,那就可以替代线圈继电器,让单片机输出同样的逻辑,产生同样的开关结果。而且,线圈继电器逻辑输入需要极大电流驱动线圈。而MOS管栅极电流一般只有5-15mA。

      但是MOS管有一个不容忽视的特点,那就是寄生二极管。

      寄生二极管是MOS管结构特性,以NMOS管为例,当NMOS源极(S极)接电气系统的高电位端,漏极接入电气系统的低电位端,就会使得两端直接直接导通,此时在电气系统中,等价于在这一支路上接入一个二极管,此时称NMOS漏源反接,其导致了MOS的控制端栅极失去对漏源的控制作用。而当漏源正接时,二极管处于反接状态,此时,除非击穿或者控制端控制,漏源之间几乎处于断开状态。但实际依旧会有漏电流产生(不要把寄生二极管当作一个真正的二极管来看待,它的许多特性与真正二极管相去甚远)。漏电流产生原因非常多,比如PN结反向偏置、载流子扩散等等。一般漏电流会有几μA左右。对无特殊要求的控制装置来说并无大碍。

  • STM32的引脚结构

STM32的引脚结构图大致如下:

图 3 STM32F1引脚结构图

左半边大都为CPU或者外设对GPIO的分配和控制。

主要看右半边。

在右半边中,输入模式通道驱动器在上方,输出模式通道驱动器在下方。我们先从输入模式讲起。

我们知道,STM32的GPIO逻辑输入模式分为浮空、上拉和下拉三种模式。浮空输入下,上拉通道(接VDD部分)与下拉通道(接VSS部分)都是断开的,因此,输入引脚的电压就会完全跟随输入的电压;但是一旦产生机械或电磁扰动,都有可能造成电压浮动,对于数字电路来说,这将可能导致误读信号。为了能够确保低电平或者高电平被准确读出,就分别需要上拉和下拉两种模式来辅助。当低电平为触发信号,高电平作为常态输入,那么,就需要上拉电阻来保证没有明显低电平信号时,引脚读入不会因为外部输入的扰动而误读,只有明显低电平信号输入时,才会将输入端的电位拉低至可读出的水平,这和高电平作为触发信号的原理是一样的。所以在按键学习中,就会特别强调依据原理图来判断触发信号,从而确定上下拉的关系,当按键按下,引脚输入为高电平时,那么触发信号就是高电平,就需要与之相反的下拉来保证引脚不会误读。

GPIO还有一种输入模式就是模拟输入,这是为模数转换器外设提供的一种模式,此时,上下拉没有意义,引脚输入的电压会直接进入ADC外设,由ADC读出引脚上的电压。

GPIO的输出模式是4种,即推挽、开漏、复用推挽和复用开漏。那么要怎么理解呢?我们先来看推挽和开漏两种模式。

推挽(Push Pull)是两个动作,推是推出去(Push),挽就是挽回来,也可以理解为拉回来(Pull),在标准库中,会有GPIO_Mode_OUT_PP这个赋值量,用于结构体GPIO_TypeDef 的成员GPIO_Mode,其中,PP就是推挽的意思(Push Pull的缩写)。那么为什么要这么说呢?

当引脚在输出模式要出高电平时,就需要将PMOS管导通,关断NMOS管。此时,PMOS的源极和NMOS的漏极间(就是两个器件间的节点)电压就会被拉高到VDD的水平(PMOS自身的漏源电压忽略不计)此时,电流就会由内部VDD被推出到引脚外侧,因此称为推(Push)。

当NMOS导通,PMOS关断时,此时,节点电压被拉低至VSS的水平(一般就是GND),外部电流就会从引脚外侧流过NMOS到VSS,这一过程就是将电流挽回来,因此成为挽(Pull)。

那么开漏是什么意思呢。开漏(Open Drain,简写OD)在标准库的GPIO_Mode中,赋值为GPIO_Mode_OUT_OD,OD即是开漏的意思。开漏的开是指开路,断路的意思,漏是指NMOS管的漏极,所以就是指NMOS的漏极开路了。

NMOS不可能与通向引脚的通道开路,否则引脚就失去了控制作用。所以开漏是指漏极与PMOS的源极之间开路(或者说断路)了。

那么怎么做到呢?就是使PMOS在OD模式下永不打开,PMOS不会导通,引脚就输出不了高电平(PMOS的漏源不导通,VDD无法拉高节点电压),只能在NMOS导通时被拉至低电平,其余时间,电压都处于被外部控制的状态。

而且,在OD模式下,输入驱动器可以使用,你可以直接读取OD模式下的引脚的数字电平。

如果要让OD模式的引脚能够输出高电平,只能在STM32对应引脚外接一个上拉电阻。上拉电阻一端接MCU电气系统中的VCC,一端接到引脚处,当NMOS处于关断状态时,引脚电位就会被拉高至VCC,当NMOS导通,引脚电位就会被拉低至VSS。

需要注意的是,不论任何输出模式,都不能将输出端直接接高或者接地,因为在PMOS或者NMOS到引脚外侧之间没有任何限流电阻。比如,如果引脚接地,此时PMOS导通,将会导致VDD(一般接的是VCC)与GND直连,直接导致电源短路,轻则烧毁引脚,重则烧毁电源乃至整个电气系统。开漏模式更是要注意,禁止VCC等任何高电位的端口直接接入到开漏模式引脚,否则NMOS一旦打开,就会直接使得高电位端子与VSS(一般接GND)直连短路。

复用开漏和复用推挽在电气结构上与开漏和推挽没有区别,但是,复用状态下,外设有权力控制GPIO外设,此时,同一个GPIO外设,即被CPU控制,又可以被外设控制,所以称之为复用,即重复使用。即是外设可以控制GPIO,你也可以通过CPU指令干扰GPIO,让引脚处于某一电平下。

编写于2024/6/7

CSDN:https://blog.csdn.net/m0_45463698?spm=1000.2115.3001.5343

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值