GPIO简介:

· GPIO(General Purpose Input Output) 通用输入输出口

· 可配置为8种输入输出模式

· 引脚电平: 0V-3.3V,部分引脚可容忍5V(参考STM32的引脚定义,带FT可容忍5V)

· 输出模式下可控制端口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等

· 输入模式下可读取端口的高低电平或电压,用于读取按键输入、外接模块电平信号输入、ADC电压采集、模拟通信协议接收数据等

GPIO基本结构

                                        (图片源自江协科技)

STM32是32位的单片机,所以STM32内部的寄存器都是32位的,但端口只有16位(PA0-PA15),所以寄存器只有低16位对应的有端口,高16位没有用到

图中寄存器用于存储数据,驱动器用于增加驱动能力(如果要进行点灯操作,需要驱动器增大驱动能力)

GPIO位结构

                                        (图片源自江协科技)

整体

整体可分为两部分,输入驱动器以上是输入部分,输出驱动器以下是输出部分

1.IO引脚左侧的两个二极管(保护二极管):   

作用: 对电压进行限幅

VDD接3.3V(如果输入电压高于3.3V,上方二极管导通,电流向上流而不进入内部电路), VSS接0V(如果输入电压低于0V(负电压),那么二极管导通,电流向上流出)   

输入部分:

2. 有两个电阻(上拉电阻,下拉电阻)—–开关可以通过程序进行配置

①上拉电阻——-上拉输入模式(开关上面导通,下面断开)

        作用: 上拉电阻使得电压达到VDD,保证引脚高电平

②下拉电阻——-下拉输入模式(开关上面断开,下面导通)

        作用: 下拉电阻使得电压达到VSS,保证引脚低电平

③两个开关均断开,那就是浮空输入

        引脚的输入电平及易受到外界干扰而改变,使得输入数据不确定(不知道是高电平还是低电平)

3.斯密特触发器(TTL肖特基触发器)

·使用原因: 输入的虽然是数字信号,实际情况下可能会产生各种失真

·作用: 对输入电压进行整形

·执行逻辑: 如果输入电压大于某一阈值,输出就会瞬间升为高电平;

                  如果输入电压小于某一阈值,输出就会瞬间降为低电平;

                  (阈值可以人为设置)

4.输入数据寄存器

·可以用程序读取数据寄存器对应某一位的数据,就可以知道端口的输入电平了

5.剩余

剩下最上方的两路就是连接片上外设了——-模拟输入/复用功能输入

·模拟输入: 连接ADC上,因为ADC需要接收模拟量(在斯密特触发器前接收)

·复用功能输入: 比如串口的输入引脚等,这根线接收的是数字量,所以在斯密特触发器后

输入部分:

·数字部分可由输出数据寄存器或片上外设控制,通过数据选择器接到了输出控制部分

1.数据寄存器:

如果通过输出数据寄存器进行控制,就是普通的IO口输出,写这个数据寄存器的某一位就可以操作对应的某个端口了,

2.位设置/清除寄存器:

        作用:用来单独操作输出数据寄存器的某一位,而不影响其它位

        由来:输出数据寄存器同时控制16个端口,并且这个寄存器只能整体读写—–特殊操作方式

        输出数据寄存器的特殊操作方式

        1.读出寄存器,如何用按位与和按位或的方式更改某一位,最后将更改的数据写回去

        (比较麻烦,效率不高,对于IO口的操作而言不太合适)

        2.设置位设置/清除寄存器: 直接在位设置寄存器的对应位写高或低—一步到位

        3.读写STM32中的"位带"区域: 位带的作用和51单片机的位寻址作用差不多,在STM32中专门分配有一段地址区域,这段地址映射了RAM和外设寄存器所有的位,读写这段地址中的数据,就相当于读写所映射位置的某一位,这就是位带的操作方式

3.两个MOS管

·输出控制通过两个MOS管,上面是P-MOS,下面是N-MOS—–电子开关

        通过信号来控制开关的导通和断开,开关负责将IO口接到VDD或者VSS,这里可以选择推挽、开漏或关闭三种输出方式

·推挽输出

·在推挽输出模式下,P-MOS和N-MOS均有效,

·数据寄存器为1时,上管导通,下管断开,输出直接接到VDD,就是输出高电平;

 数据寄存器为1时,上管断开,下管导通,输出直接接到VDD,就是输出低电平;

·在这种模式下,高低电平均有较强的驱动能力,故也称之为强推输出模式

·在推挽输出模式下,STM32对IO口有绝对的控制权,高低电平由STM32决定

·开漏输出

·在开漏模式下,P-MOS无效,只有N-MOS在工作

·数据寄存器为1时,下管断开,输出相当于断开,也就是高阻模式;

 数据寄存器为0时,下管导通,输出直接接到VSS,也就是输出低电平

·这种模式下,只有低电平有驱动能力,高电平是没有驱动能力的

·用途: 开漏模式可以作为通信协议的驱动方式; 比如I2C通信的引脚,就是使用的开漏模式,在多机通信的情况下,这个模式可以避免各个设备的相互干扰;

         还可以用于输出5V的电平信号: 比如在IO口外接一个上拉电阻到5V的电源,当输出低电平时,由于内部N-MOS直接接VSS,当输出高电平时,由外部的上拉电阻提高至5V

·关闭输出

·当引脚配置为输入模式的时候,两个MOS管均无效,端口的电平由外部信号来控制

GPIO模式

·通过配置GPIO的端口配置寄存器,端口可以配置成以下8种模式

①浮空输入

性质: 数字输入

特征: 可读取引脚电平,若引脚悬空,则电平不确定

②上拉输入

性质: 数字输入

特征: 可读取引脚电平,内部连接上拉电阻,悬空时默认高电平

③下拉输入

性质: 数字输入

特征: 可读取引脚电平,内部连接下拉电阻,悬空时默认低电平

                                                 (图片源自江协科技)

④模拟输入

性质: 模拟输入

特征: GPIO无效,引脚直接接入内部ADC

                                                 (图片源自江协科技)

⑤开漏输出

P-MOS无效,N-MOS有效

性质: 数字输出

特征: 可输出引脚电平,高电平为高阻态,低电平接VSS

⑥推挽输出

P-MOS和N-MOS都有效

性质: 数字输出

特征: 可输出引脚电平,高电平接VDD,低电平接VSS

                                                 (图片源自江协科技)

经过以上模式,我们可以发现再输出模式下,输入模式也是有效的,但在输入模式下,输出是无效的

原因: 一个端口只能由一个输出,但可以有多个输入

⑦复用开漏输出

性质: 数字输出

特征: 由片上外设控制,高电平为高阻态,低电平接VSS

⑧复用推挽输出

性质: 数字输出

特征: 由片上外设控制,高电平接VDD,低电平接VSS

作者:曦柠LLL

物联沃分享整理
物联沃-IOTWORD物联网 » STM32 GPIO 入门指南

发表回复