江科大stm32GPIO输出

本文详细介绍了STM32GPIO模块的结构、寄存器功能、输入保护机制、上拉下拉电阻、施密特触发器的作用以及不同输出模式,包括推挽、开漏和关闭,还讨论了模拟输入和驱动外部设备的方法,如LED限流、蜂鸣器驱动和三极管的选择。
摘要由CSDN通过智能技术生成

每个GPIO外设都有16个引脚,编号是从0到15,在每个GPIO模块内,主要包含了寄存器和驱动器这些东西,寄存器就是一段特殊的存储器,内核可以通过APB2总线对寄存器进行读写,这样就可以完成输出电平和读取电平的功能了,stm32内部的寄存器都是32位的,但端口只有16位,所以寄存器只有低16位是用到的,高16位是没有用到的,驱动器是用来增加信号的驱动能力的。

上面是输入部分,下面是输出部分。

先来看输入部分,首先IO引脚,这里接了两个保护二极管,这是对输入电压进行限幅,上面这个二极管接VDD3.3v,下面接VSS0v,如果输入电压比3.3v还要高,那上方这个二极管就会导通,输入电压产生的电流就会直接流入VDD而不会流入内部电路,这样可以避免过高的电压对内部这些电路产生伤害,如果输入电压比0v还要低,那这时下方二极管就会导通,电流会从VSS直接流出去,而不会从内部电路汲取电流,也是可以保护内部电路的,如果输入电压在0~3.3v之间,那两个二极管均不会导通,这时二极管对电路没有影响,这就是保护二极管的用途。

线连接了上拉电阻和下拉电阻,上拉电阻至VDD,下拉电阻至VSS,这个开关是可以通过程序进行配置的,如果上面导通下面断开,就是上拉输入模式,如果下面导通上面断开,就是下拉输入模式,如果两个都断开就是浮空输入模式。上拉和下拉的作用是为了给输入提供一个默认的输入电平的,因为对应一个数字的端口,输入不是高电平就是低电平,那如果输入引脚什么都不接,那到底是算高电平还是低电平呢,实际上,如果输入什么都不接,这时输入就会处于一种浮空的状态,引脚的输入电平极易受外界干扰而改变,为了避免引脚悬空导致的输入数据不确定,我们就需要在这里加上上拉或者下拉电阻。如果接入上拉电阻,当引脚悬空时,还有上拉电阻来保证引脚的高电平,所以上拉输入又可以称作是默认为高电平的输入模式,下拉同理,默认为低电平的输入方式,上拉电阻和下拉电阻的阻值都比较大,是一种弱上拉和弱下拉,目的是尽量不影响正常的输入操作。

施密特触发器作用是对输入电压整形,执行逻辑是如果输入电压大于某一阈值,输出就会瞬间升为高电平,如果输入电压小于某一阈值,输出就会瞬间降为低电平,中间留有一定的变化范围,可以有效避免因信号波动造成的输出抖动现象。

经过施密特触发器整形的波形就可以直接写入输入数据寄存器了,我们再用程序读取输入数据寄存器对应于某一位的数据,就可以知道端口的输入电平了。上面还有两路线路,这些就是连接到片上外设的一些端口,模拟输入是连接到ADC上的,因为ADC要接一些模拟量,所以这根线是接到施密特触发器前面的。另一根是复用功能输入,这个是连接到其他需要读取端口的外设上的,比如串口的输入引脚等,这根线接收的是数字量,所以在施密特触发器后面。

接着看输出部分,数字部分可以由输出数据寄存器或片上外设控制,两种控制方式通过这个数据选择器接到了输出控制部分,如果选择通过输出数据寄存器进行控制,就是普通的IO口输出,写这个数据寄存器的某一位就可以操作对应的某个端口了,左边的位设置清除寄存器。这个可以用来单独操作输出数据寄存器的某一位,而不影响其他位,因为输出数据寄存器同时控制16个端口,并且这个寄存器只能整体读写,所以如果想单独控制其中某一个端口而不影响其他端口的话,就需要一些特殊的方式,第一种方式是先读出这个寄存器然后用按位与和按位或的方式更改某一位,最后再将更改后的数据写回去,这种方法比较麻烦效率不高,对于IO口的操作而言不太合适。第二种方式是通过位设置和位清除寄存器,如果我们要对某一位进行置1的操作,在位设置寄存器的对应位写1即可,剩下不需要操作的位写0,这样它内部就会有电路,自动将输出数据寄存器中对应位置为1,而剩下写0的位则保持不变,这样就保证了只操作其中某一位而不影响其它位,并且这是一步到位的操作,如果想对某一位进行清0的操作,就在位清除寄存器的对应位写1即可。第三种操作方式是读写stm32中的“位带”区域,在stm32中专门分配的有一段地址区域,这段地址映射了RAM和外设寄存器所有的位,读写这段地址中的数据就相当于读写所映射位置的某一位。

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

GPIO的8种工作模式

在输出模式下,输入模式也是有效的,但在输入模式下,输出是无效的,这是因为,一个端口只能有一个输出但是可以有多个输入。

通用的输出这里是没有连接的,引脚的控制权转移到了片上外设,由片上外设来控制,在输入部分,片上外设也可以读取引脚的电平,同时普通的输入也是有效的,顺便接收一下电平信号。

在GPIO的这8种模式中,除了模拟输入这个模式会关闭数字的输入功能,在其他的7个模式中,所有的输入都是有效的。

限流电阻作用:1.防止LED因为电流过大而烧毁。2.可以调整LED亮度。

蜂鸣器电路采用三极管开关驱动的方法,对于功率稍微大一点的,直接用IO口驱动会导致stm32负担过重,可以用一个三极管驱动电路来完成驱动的任务。注意:PNP的三极管最好接在上边,NPN的三极管最好接在下边,这是因为三极管的通断是需要在发射极和基极直接产生一定的开启电压的,如果把负载接在发射极这边,可能会导致三极管不能开启。

  • 17
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值