重生之我在学stm32 2day(GPIO的理解)

 

GPIO的介绍

b95267d1fdde4918903f54ea8cc15c19.png

GPIO基本结构

40491c056bfd4aa78a9031a42d00fb21.png

寄存器就是一段特殊的存储器,内核可以通过APB2总线对寄存器进行读写,这个寄存器的每一位对应一个引脚,其中输出寄存器写1,对应的引脚输出高电平,写0,就输出低电平,输入寄存器读取为1,则对应的端口目前为高电平,读取为0,就是低电平

stm32是32位的单片机,所以stm32内部的寄存器都是32位的,但这个端口只有16位,所以这个寄存器只有16位有对应的端口,高16位是没有用到的

驱动器是用来增加信号的驱动能力

寄存器只负责存储数据

9b8737b7e7294bb6a2e8d17a387c0696.png

GPIO中每一位的具体电路

0de3dd50cad34f43b2febbf26955d895.png  

为了避免引脚悬空导致的输入数据不确定,我们就需要在上面加一个上拉电阻或者下拉电阻

上拉输入可以称作是默认 为高电平的输入模式,下拉就是默认为低电平模式

施密特触发器:对输入电压进行整形,如果输入电压高于某一阈值,输出瞬间升为高电平,输入小于则输出降为低电平

模拟输入,连接到ADC,因为ADC需要接收模拟量

复用功能输入,连接到其他需要读取的外设上的(比如串口输入引脚)这根线接收的是数字量,所以在施密特触发器后面

输出部分

数字部分可以由数据寄存器或片上外设控制

位设置清除寄存器可以单独操作数据寄存的某一位,而不影响其他位

MOS管就是一种电子开关

我们的信号来控制开关的导通和关闭,开关负责降IO口接到VDD或者VSS(可以选推挽,开漏,关闭三种模式)

推挽输出模式下,P-MOS和N-MOS均有效数据寄存器为1时,上管导通,下管断开,输出直接接到VDD,就是输出高电平,数据寄存器为0时,则相反,这种模式下,高低电平均有较强的驱动力,所以推挽输出也可以叫强推输出模式,在推挽输出模式下,STM32对IO口具有绝对的控制权,高低电平由stm32说的算。

在开漏输出模式下,P-MOS是无效的,只有N-MOS工作,数据寄存器为1时,下管断开,这时输出相当于断开,也就是高阻模式,数据寄存器为0时,下管导通,输出直接接到VSS,也就是输出低电平,开漏模式可以做为通信协议的驱动模式,比如I2C通信的引脚,就是是用的开漏模式,在多机通信的情况下,这个可以避免各个设备的相互干扰,另外开漏输出可以用于输出5V的电平信号

关闭模式:当引脚配置为输入模式时候,两个MOS管都无效,端口电平由外部信号控制

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

f70ed0be61214abeb06d06b04c9d4b97.png

配置寄存器,比如开关的通断、N-MOS,P-MOS是否有效,数据的选择等等

前三个,都是数字的输入口,都可以读取端口的高低电平 ,当引脚悬空时,上拉输入默认为高电平,下拉输入默认为低电平,浮空输入是不确定的1b97113678b24051aebfbd98d8036cfe.png 

模拟输入,GPIO无效,引脚直接接入内部ADC,可以说是ADC模数转换器的专属配置了

bb5c67288b654181a15a19a58151a051.png

开漏输出和推挽输出

区别开漏输出的高低电平不具有驱动能力,推挽输出的高低电平具有驱动能力,但此时的输入模式是有效防的(一个端口可以有多个输入只能有一个输出)b327320efeef4c92b5a73cb0579f52d0.png 

 复用开漏输出和复用推挽输出

534bf8c856174857a9701aa751f96934.png

通用输出寄存器那里没有连接,引脚的控制权转移到了片上外设,由片上外设来控制,在输入部分片上外设也可以读取引脚电平 ,同时普通输入是有效的。

GPIO配置寄存器,每个端口的模式由四位进行配置,16个端口就需要64位,一个是端口配置低寄存器,一个是端口端口配置高寄存器8ca2215e12b041b38afa035e2dcf294b.png

 具体配置

1d1456a159a04997aa51d702a7126dc4.png

GPIO的输出速度可以限制输出引脚的最大翻转速度,是为了低功耗和稳定性,我们一般配置为50HZ

5c1f13265d2146f7895e911b25220368.png 

高16位没有用

0ea00db624cb454cb782b1272688cfc1.png 

5e8f5d63b2a541ffa8f8eb7dd69d9607.png 

高16位位清除,低16韦进行位设置

端口配置锁电寄存器

可以对端口的设置进行锁定(暂时用的不多)

STM32外部的设备和电路

54c08800bc0f43b6b6658ba7d362ec1f.png 

f37471273b4949c98f26375c6da999bc.png 

左边的基极给低电平就会导通,三极管就会导通,通过3.3V和GND,就可以给蜂鸣器提供驱动电流了。基极给高电平,三极管截止,蜂鸣器没有电流 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值