第二节:GPIO

1.简介GPIO

        GPIO即是通用输入输出口,可以配置八种输入输出模式,引脚电平是0V-3.3V,数据0就是低电平,也即0V,数据1为高电平,也即3.3V,部分可以容忍5V,意思是可以在该端口输入5V,也认为是高电平。而输出最大就只能是3.3V。具体可以容忍5V的需要参考手册,带FT标识的就表示可以容忍5V。

 

         GPIO在输出模式下可以控制端口输出高低电平,用以驱动LED,控制蜂鸣器,模拟通信协议输出时序等。只要是可以用高低电平进行控制的,都可以用GPIO。如果是控制功率比较大的设备,加入驱动电路即可。

        GPIO在输入模式下可读取端口的高低电平或者电压,用于读取按键输入,外界模块电平输入(光敏电阻模块,热敏电阻模块等),ADC电压采集(可以设置成模拟输入模式配合ADC外设直接读取端口模拟电压),模拟通信协议接收数据等。

2.GPIO系统结构

        在32中,所有GPIO都是搭载在APB2外设总线上的,包括GPIOA,GPIOB...每个GPIO有16个引脚,编号为PX0-PX15(比如GPIOA就是PA0-PA15)。寄存器就是一段特殊的存储器,内核可以通过APB2总线对寄存器进行读写(APB是Advanced Peripheral Bus,即先进外设接口,该总线主要用于和低速以及低功耗的外设进行通信),完成输出电平和读取电平的功能。寄存器每一位对应一个引脚:输出寄存器写1,对应引脚输出高电平,写0就输出低电平。相同输入读取为1,证明对应端口目前是高电平。stm32单片机是32位单片机,所以内部寄存器都是32位的,但是端口只有16位,所以对应寄存器只有低16位有端口,高16位用不到。驱动器是增加信号的驱动能力的,寄存器只负责存储数据,点灯等操作还是需要驱动器的。

 GPIO的整体构造

        如下图,左边是三个寄存器,中间是驱动器,右边是具体引脚。上半部分为输入部分,下半部分为输出部分。引脚处的保护二极管是对输入电压限幅的,Vdd接3.3V,输入电压大于该值就不会进入电路,Vss接0V,限制不会从内部电路汲取电流,起到保护电路作用。

 GPIO位结构

        截取图中此处连接了一个上拉电阻和一个下拉电阻,两个开关通过程序配置,上导通下断开就是上拉输入模式,反之为下拉输入模式,都断开就是浮空输入模式。其作用是给输入提供一个默认的输入电平。如果引脚不接处于浮空状态,引脚电平极易收到外界干扰而改变。如果接入上拉电阻,当引脚悬空时还有上拉电阻保证引脚的高电平,所以上拉输入又可以称为默认为高电平的输入模式,下拉输入同理。

        施密特触发器(图中肖特基触发器)作用是对输入电压进行整形,它的执行逻辑是。如果输入电压大于某一阈值,输出就会瞬间开为高电平,低于某阈值会瞬间降为低电平(主要原因是输入信号虽然是数字信号,但也会有波动,输入的高低电平很可能因为波动干扰导致误判,可以有效地避免因信号波动造成的输出抖动现象)。另外可以看到上面接的还有两根线,一根是接受模拟输入的,所以它要接在施密特触发器前面,另一个复用功能输入,是接到其他外设的,如串口输入引脚等。

         再看输出部分:输出数据寄存器同时控制16个端口,并且这个寄存器只能整体读写,如果想单独控制某个单裤不影响别的:可以先读出这个寄存器,然后按位与按位或更改某一位,再将改过的写回去;或者使用旁边位设置/清除寄存器,如果想对某位设1,在设置寄存器对应位写1,不需要操作的为写0,就可以将写1的置1,写0的不变,如果对某位清0,就在清除寄存器对应位写1,别的写0。库函数使用的是读写位设置和位清除寄存器的方法。

        输出接到了两个MOS管,即电子开关,通过信号控制开关的导通和关闭,负责将IO口接到Vdd或者Vss,可以选择推挽,开漏或者关闭三种输出方式。在推挽输出模式下。P-MOS和N-MOS均有效,数据寄存器为1时,上管导通。下管断开。输出直接接到VDD,就是输出高电平。数据寄存器为0时,上管断开。下管导通,输出直接接到VSS就是输出低电平。这种模式下,高低电平均有较强的驱动能力,所以推挽输出模式也可以叫强推输出模式。在推挽输出模式下,32对IO口具有绝对的控制权,高低电平都由STM32说的算。在开漏输出模武下。这个P-MOS是无效的。只有N-MOS在工作,数据寄存器为1时,下管断开。这时输出相当于断开,也就是高阻模式。数据寄存器为0时,下管导通。输出直接接到VSS,也就是输出低电平。这种模式下。只有低电平有驱动能力,高电平是没有驱动能力的。这个开漏模式可以作为通信协议的驱动方式,比如I2C通信的引脚就是开漏模式。在多机通信的情况下。这个模式可避免各个设备的相互干扰。另外开漏模式还可以用于输出5V的电平信号:比如在IO口外接一个上拉电阻到5V的电源,当输出低电平时。由内部的N-MOS直接接VSS,当输出高电平时。由外部的上拉电阻拉高至5V,这样输出5V的电平信号。在引脚配置为输入模式时候,这两个MOS管都无效,也就是输出关闭,端口的电平由外部信号来控制。


GPIO模式表

        如图,在使用浮空输入时,端口一定要接上一个连续的驱动源,不能出现悬空的状态。模拟输入基本是ADC的专属配置了。在输出模式下,输入模式也是有效的,但在输入模式下,输出都是无效的,是因为一个端口只能有一个输出,但是可以有多个输入。对于复用开漏和复用推挽和上面差不多,只不过是复用的输出引脚电平是由片上外设控制的。在GPIO的这8种模式中,除了模拟输入这个模式会关闭数字的输入功能,在其他七个模式中,所有输入都是有效的(因为模拟输入关闭了施密特触发器)。不同GPIO外设输入输出的配置需要参考手册对比。(参考手册P105)

3.GPIO的寄存器

        端口配置寄存器:每个端口由4位进行配置,16个端口需要64位,所以配置寄存器有两个:一个是端口配置低寄存器,一个是端口配置高寄存器,GPIO速度参数要求不高的时候设为50MHz。

        端口输入寄存器:低16位对应16个引脚,高16位没有使用。

        端口输出数据寄存器:低16位对应16个引脚,高16位没有使用。

        端口位设置/清除寄存器:高16位时进行清除的,低16位时进行位设置的。

        端口位清除寄存器:该寄存器低16位与上面寄存器高16位功能是一样的,方便操作:单一进行位清除或者设置,位设置用端口位设置/清除寄存器,位清除用端口位清除寄存器,使用的都是低16位。

        端口配置锁定寄存器:对端口配置进行锁定,防止意外更改。 

4.GPIO外设

         

        LED长脚是正极,短脚是负极。

        左上位低电平驱动的LED,LED灯左边的为限流电阻,作用是保护电路,调节亮度。

        蜂鸣器电路使用三极管开关驱动,对于功率稍微大一点的,直接用IO口驱动会导致STM32负担过重,利用三极管完成驱动的任务。右上左边基极给低电平三极管导通。
        





 

 

 

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值