我是靠谱客的博主 飘逸红牛,最近开发中收集的这篇文章主要介绍【STM32学习笔记】(3)—— GPIO模式详解GPIO模式详解GPIO介绍:GPIO基本结构简介:GPIO的八种模式详解GPIO的寄存器详解STM32的GPIO模式选择,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

GPIO模式详解

STM32F103ZET6的引脚与GPIO:

 

 

        STM32F103ZET6一共有144个引脚,112个IO口

        -  一共有7组IO口           (GPIOA--GPIOG)

        - 每组IO口有16个IO      (GPIO_Pin_0-- GPIO_Pin_15)

        - 一共16X7=112个IO

GPIO介绍:

        GPIO(General  Purpose  Intput  Output):通用输入输出端口的简称。

        可以通过软件来控制GPIO是输出还是输入。STM32芯片的GPIO引脚与外部设备连接起来,从而实现与外部通信,控制以及数据采集的功能。

       每个GPIO端口有两个32位配置寄存器(GPIOx_CRL,GPIOx_CRH)两个32位数据寄存器 (GPIOx_IDR和GPIOx_ODR)一个32位置位/复位寄存器(GPIOx_BSRR)一个16位复位寄存器(GPIOx_BRR)一个32位锁定寄存器(GPIOx_LCKR)

        根据数据手册中列出的每个I/O端口的特定硬件特征, GPIO端口的每个位可以由软件分别配置成多种模式(八种GPIO模式)。

        ●四种输入模式

          ─ 输入浮空

        ─ 输入上拉

        ─ 输入下拉

        ─ 模拟输入

        ●四种输出模式

        ─ 开漏输出 (带上拉或者下拉)

        ─ 推挽式输出 (带上拉或者下拉)

        ─ 推挽式复用功能 (带上拉或者下拉)

        ─ 开漏复用功能 (带上拉或者下拉)

        IO端口寄存器必须按32位字被访问(不允许半字或字节访问)。

 

GPIO基本结构简介:

        保护二极管

 

 

        GPIO的引脚外接了两个保护二级管,可以防止引脚外部过高或过低的电压输入。当引脚电压高于 VDD 时,上方的二极管导通;当引脚电压低于 VSS 时,下方的二极管导通,防止不正常电压引入芯片导致芯片烧毁。

        STM32的GPIO虽然外接了两个保护二极管,但是GPIO并不能直接的外接大功率器件,假如GPIO强制驱动要么电机不转,要么导致芯片烧坏,必须要加大功率及隔离电路驱动。

上下拉电路

 

 

        上拉电阻与VDD有一个开关,下拉电阻与VSS有一个开关。控制两个开关的闭合可以实现电路的上拉和下拉功能(即配置GPIO的默认状态是高电平还是低电平)。

        当上拉开关闭合,下拉开关打开时:配置GPIO的默认电平是高电平,高电平的电压与VDD相等。

        当上拉开关打开,下拉开关闭合时:配置GPIO的默认电平是低电平,低电平的电压与VSS相等。

        当上拉开关与下拉开关有且仅有一个闭合时,GPIO的电平时固定的,并不是可变的,这样就可以消除引脚不定状态的影响。

        当上拉开关和下拉开关都关断,这种状态我们称为浮空模式,一旦配置成这个模式,引脚的电压是不确定的,而且还不时改变,所以一般情况下我们都会给引脚设置成上拉或者下拉模式,使它有一个默认状态。

        上拉开关闭合时,虽然是上拉状态但是仅仅是一个弱上拉状态,,也就是说通过此上拉电阻输出的电流很小,驱动能力很弱,如果想要输出一个大电流,那么就需要外接上拉电阻了。

 

P-MOS 和N-MOS单元电路

 

 

        GPIO 引脚经过外接的两个保护二极管后就分成两路:上面一路是“输入模式”,下面一路是“输出模式”。

        输出模式:线路经过一个由 P-MOS 和 N-MOS管组成的单元电路,使得GPIO 引脚具有了推挽输出和开漏输出两种输出模式。推挽输出和开漏输出两种输出模式的名字时根据P-MOS 和 N-MOS 管的工作方式命名的。

        ─ 推挽输出模式:

        在该结构单元输入一个低电平时,P-MOS 管截止,N-MOS 管导通,对外输出低电平VSS。

        在该结构单元输入一个高电平时,P-MOS 管导通,N-MOS 管截止,对外输出高电平VDD。

        如果当切换输入高低电平时,两个 MOS 管将轮流导通,一个负责灌电流(电流输出到负载),一个负责拉电流(负载电流流向芯片),使其负载能力和开关速度都比普通的方式有很大的提高。

        ─ 开漏输出模式

        在开漏输出模式时,不论输入是高电平还是低电平,P-MOS 管总处于关闭状态。

        在该结构单元输入一个低电平时,N-MOS 管导通,对外输出低电平VSS。

        在该结构单元输入一个低电平时,N-MOS 管截至,引脚状态既不是高电平,也不是低电平,我们称之为高阻态。

        如果想让引脚输出高电平,那么引脚必须外接一个上拉电阻,由上拉电阻提供高电平。

        开漏输出模式的特点:

        当GPIO的引脚为开漏输出模式的情况下,引脚具有“线与”关系。即多个开漏输出模式的引脚接在一起,只要有一个引脚为低电平,其他所有管脚都为低电平,即把所有引脚连接在一起的这条总线拉低了。

        当所有引脚输出高阻态时,这条总线的电平由上拉电阻的 VDD 决定。如果 VDD 连接的是3.3V,那么引脚输出的就是 3.3V,如果 VDD 连接的是 5V,那么引脚输出的就是 5V。

        总结:

        推挽输出模式一般应用在输出电平为 0-3.3V 而且需要高速切换开关状态的场合。除了必须要用开漏输出模式的场合,我们一般选择推挽输出模式。

 

TTL肖特基触发器

 

 

        TTL肖特基触发器其实可以理解为用肖特基管构成的施密特触发器。

        施密特触发器(Schmitt Trigger)是包含正反馈的比较器电路。

        对于标准施密特触发器,当输入电压高于正向阈值电压,输出为高;当输入电压低于负向阈值电压,输出为低;当输入在正负向阈值电压之间,输出不改变,也就是说输出由高电准位翻转为低电准位,或是由低电准位翻转为高电准位时所对应的阈值电压是不同的。只有当输入电压发生足够的变化时,输出才会变化,因此将这种元件命名为触发器。这种双阈值动作被称为迟滞现象,表明施密特触发器有记忆性。从本质上来说,施密特触发器是一种双稳态多谐振荡器。

总结:

        TTL肖特基触发器:可将一些模拟信号最终转化为数字信号。

        施密特触发器可作为波形整形电路,能将模拟信号波形整形为数字电路能够处理的方波波形。

       在TTL肖特基触发器之前的电平信号为模拟信号,而经过TTL肖特基触发器之后的电平信号为数字信号。

GPIO的八种模式详解

     四种输入模式

       ——输入浮空模式:

 

        浮空输入模式就是上拉开关和下拉开关都不导通,GPIO引脚的电平不确定的状态,处于浮空的状态下的模式。

        由于逻辑器件的内部结构,当它输入引脚悬空时,相当于该引脚接了高电平。一般实际运用时,引脚不建议悬空,易受干扰。通俗讲就是浮空就是浮在空中,就相当于此端口在默认情况下什么都不接,呈高阻态,这种设置在数据传输时用的比较多。浮空最大的特点就是电压的不确定性,它可能是0V,页可能是VCC,还可能是介于两者之间的某个值(最有可能) 浮空一般用来做ADC输入用,这样可以减少上下拉电阻对结果的影响。

        ——输入上拉模式:

 

 

        输入上拉状态就是将GPIO的输出引脚与一个电阻串联与VDD相连的电路。即上拉开关闭合,下拉开关断开,那么就是配置GPIO的默认电平是高电平。输入上拉就是把GPIO的电平拉高,比如拉到VDD。输入上拉就是将不确定的信号通过一个电阻嵌位在高电平。电阻同时起到限流的作用。

        ——输入下拉模式:

 

 

        输入下拉状态就是将GPIO的输出引脚与一个电阻串联与VSS相连的电路。即上拉开关断开,下拉开关闭合,那么就是配置GPIO的默认电平是低电平。输入下拉就是把GPIO的电平拉低,比如拉到VDD。输入下拉就是将不确定的信号通过一个电阻嵌位在低电平。电阻同时起到限流的作用。

        ——模拟输入模式:

 

        模拟输入模式是指传统方式的输入,数字输入是输入PCM数字信号,即01的二进制数字信号,通过数模转换,转换成模拟信号,经前级放大进入功率放大器,功率放大器还是模拟的。

 

     四种输出模式

        ——开漏输出模式:

 

        只可以输出强低电平,高电平得靠外部电阻拉高。输出端相当于三极管的集电极. 要得到高电平状态需要上拉电阻才行。适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内)。

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

        1. 利用外部电路的驱动能力,减少IC内部的驱动。当IC内部MOSFET导通时,驱动电流是从外部的VCC流经R pull-up ,MOSFET到GND。IC内部仅需很下的栅极驱动电流。

        2. 一般来说,开漏是用来连接不同电平的器件,匹配电平用的,因为开漏引脚不连接外部的上拉电阻时,只能输出低电平,如果需要同时具备输出高电平的功能,则需要接上拉电阻,很好的一个优点是通过改变上拉电源的电压,便可以改变传输电平。比如加上上拉电阻就可以提供TTL/CMOS电平输出等。(上拉电阻的阻 决定了逻辑电平转换的沿的速度 。阻 越大,速度越低功耗越小,所以负载电阻的选择要兼顾功耗和速度)。

        3. OPEN-DRAIN提供了灵活的输出方式,但是也有其弱点,就是带来上升沿的延时。因为上升沿是通过外接上拉无源电阻对负载充电,所以当电阻选择小时延时就小,但功耗大;反之延时大功耗小。所以如果对延时有要求,则建议用下降沿输出。

        4. 可以将多个开漏输出的Pin,连接到一条线上。通过一只上拉电阻,在不增加任何器件的情况下,形成“与逻辑”关系。这也是I2C,SMBus等总线判断总线占用状态的原理。

        在一个结点(线)上, 连接一个上拉电阻到电源 VCC 或 VDD 和N个 NPN 或 N-MOS 晶体管的集电极 C 或漏极 D, 这些晶体管的发射极 E 或源极 S 都接到地线上, 只要有一个晶体管饱和, 这个结点(线)就被拉到地线电平上. 因为这些晶体管的基极注入电流(NPN)或栅极加上高电平(N-MOS),晶体管就会饱和, 所以这些基极或栅极对这个结点(线)的关系是或非 NOR 逻辑. 如果这个结点后面加一个反相器, 就是或 OR 逻辑。

        其实可以简单的理解为:在所有引脚连在一起时,外接一上拉电阻,如果有一个引脚输出为逻辑0,相当于接地,与之并联的回路“相当于被一根导线短路”,所以外电路逻辑电平便为0,只有都为高电平时,与的结果才为逻辑1。

 

        ——开漏复用输出模式:

 

        复用功能模式中,输出使能,输出速度可配置,但必须工作在开漏输出模式,但是输出信号源于其它外设,输出数据寄存器 GPIOx_ODR 无效;输入可用,通过输入数据寄存器可获取 I/O 实际状态,但一般直接用外设的寄存器来获取该数据信号。

 

        ——推挽输出模式:

 

        推挽式输出:可以输出高,低电平,连接数字器件;推挽结构一般是指两个三级管分别受到互补信号的控制,总是在一个三极管导通的时候另一个截止。高低电平由IC的电源决定。

        推挽电路是两个参数相同的三极管或MOSFET,以推挽方式存在于电路中,各负责正负半周的波形方法任务,电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小,效率高。输出即可以向负载灌电流。推拉式输出级即提高电路的负载能力,又提高开关速度。

 

        ——推挽复用输出模式:

 

        复用功能模式中,输出使能,输出速度可配置,但必须工作在推挽输出模式,但是输出信号源于其它外设,输出数据寄存器 GPIOx_ODR 无效;输入可用,通过输入数据寄存器可获取 I/O 实际状态,但一般直接用外设的寄存器来获取该数据信号。

 

GPIO的寄存器详解

        每组GPIO端口的寄存器包括是每组IO口含下面7个寄存器,也就是7个寄存器,

        一共可以控制一组GPIO的16个IO口:

            两个32位配置寄存器(GPIOx_CRL  ,  GPIOx_CRH)

            两个32位数据寄存器(GPIOx_IDR  和  GPIOx_ODR)

            一个32位置位/复位寄存器(GPIOx_BSRR)

            一个16位复位寄存器(GPIOx_BRR)

            一个32位锁定寄存器(GPIOx_LCKR)

  1. 如果配置一个IO口需要2个位,那么刚好32位寄存器配置一组IO口16个IO口
  2. 如果配置一个IO口只需要1个位,一般高16位保留
  3. BSRR寄存器32位分为低16位BSRRL和高16位BSRRH,BSRRL配置一组IO口的16个IO口的置位状态(1),BSRRH配置复位状态(0)。

 

        ——端口模式寄存器(GPIOx_CRL):

 

        GPIOx_CRL是配置GPIOx的0—7的低位寄存器,这个寄存器一个由32个位组成,每四个位配置一个GPIOx端口0—7的引脚。低二位是配置端口x的模式位,高二位是配置x的配置位。

      

        ——端口模式寄存器(GPIOx_CRH):

 

        GPIOx_CH是配置GPIOx的8—15的低位寄存器,这个寄存器一个由32个位组成,每四个位配置一个GPIOx端口8—15的引脚。低二位是配置端口x的模式位,高二位是配置x的配置位。

        ——端口模式寄存器(GPIOx_IDR):

 

        ——端口模式寄存器(GPIOx_ODR):

 

 

        ——端口模式寄存器(GPIOx_BSRR):

 

 

        ——端口模式寄存器(GPIOx_BRR):

 

         ——端口模式寄存器(GPIOx_LCKR):

 

 

STM32的GPIO模式选择

(1)GPIO_Mode_IN_FLOATING ——浮空输入,可以做KEY识别。

(2)GPIO_Mode_IPU——IO内部上拉电阻输入。

(3)GPIO_Mode_IPD—— IO内部下拉电阻输入。

(4)GPIO_Mode_AIN——应用ADC模拟输入,或者低功耗下省电。

(5)GPIO_Mode_Out_OD ——当GPIO输出低电平时接GND,当GPIO输出高电平时悬空,需要外接上拉电阻,才能实现输出高电平。当输出为高电平时,IO口的状态由上拉电阻拉高电平,但由于是开漏输出模式,这样IO口也就可以由外部电路改变为低电平或不变。

(6)GPIO_Mode_Out_PP ——当GPIO输出低电平时接GND,当GPIO输出高电平时接VCC,读输入值是未知的。

(7)GPIO_Mode_AF_PP ——片内外设功能(I2C的SCL,SDA)。

(8)GPIO_Mode_AF_OD ——片内外设功能(TX1,MOSI,MISO.SCK.SS)。

 

 

 

 

 

 

 

 

 

 

 

最后

以上就是飘逸红牛为你收集整理的【STM32学习笔记】(3)—— GPIO模式详解GPIO模式详解GPIO介绍:GPIO基本结构简介:GPIO的八种模式详解GPIO的寄存器详解STM32的GPIO模式选择的全部内容,希望文章能够帮你解决【STM32学习笔记】(3)—— GPIO模式详解GPIO模式详解GPIO介绍:GPIO基本结构简介:GPIO的八种模式详解GPIO的寄存器详解STM32的GPIO模式选择所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部