STM32学习——GPIO

GPIO就是通用的输入输出端口,通俗的说就是单片机的一些引脚,这些引脚可以控制LED灯、蜂鸣器也可以作为按键输入、ADC采样等,从而实现STM32单片机和外部硬件之间的连接和数据交互。

在STM32中以STM32F103C8T6为例,其GPIO被分为了很多组,先来看一下STM32F103C8T6的系统结构。

可以看到STM32的GPIO都挂载在了APB2外设总线上,其中GPIO外设的名称都是按照GPIOA、GPIOB等等这样来命名的,每个GPIO外设有16个引脚从PA0——PA15等类似。

其中每一组GPIO都有一组寄存器与之关联 ,通过控制寄存器来控制GPIO的功能。

比如在输入寄存器中写1,则对应的端口输出高电平,写0则输出低电平。那么对应输入寄存器,当输入寄存器读出1时,对应的IO口输入的是高电平,读出0则为低电平。

由于STM32是32为单片机,所有其内部的寄存器都是32位的,但是GPIO端口只有16位,所以这个寄存器只有低16位对应的有端口,高16位没有用到。

其中驱动器是用来增加信号的驱动能力的,寄存器只负责存储数据,如果要进行点灯这样的操作的话,还是要用驱动器来增加驱动能力的。这些就是GPIO的整体基本结构了。

下面是GPIO位结构的电路图

 下面是输入电路

首先来看IO引脚,这里接了两个保护二极管对输入电压进行限幅,上面VDD接3.3V,下面VSS接0V。如果输入电压比3.3V高上面的二极管将会导通,输入电压产生的电流将直接流入VDD而不会流入电路内部,可以避免过高电压对内部电路造成伤害,如果输入电压比0V还低则下面的二极管将会导通,那么电流将从VSS直接流出,而不会从内部电路汲取电流,这样也可以保护内部电路。当输入电压在这之间,那么这两个二极管都不会导通,这时二极管对电路没有影响。

接下来将到达上拉电阻和下拉电阻这个位置,上拉电阻至VDD下拉电阻至VSS,这个开关是可以通过程序进行配置的。如果上面导通下面断开,就是上拉输入模式。上面断开,下面导通,就是下拉输入模式。两个都断开就是浮空输入模式。

上拉输入模式下

 下拉输入模式下

 下面是浮空输入

 浮空输入在IO口悬空是读取的端口电压不稳定。

三种输入模式的区别

输入模式下,输出驱动器断。

 模拟输入

模拟输入,端口数据不需要果施密特触发器,而实直接到片上外设进行处理。

 

输入模式下,输出驱动器断开。

 下面是输出电路

其中数字部分可以由输出寄存器和片上外设控制,通过数据选择器接到了输出控制部分。若选择输出寄存器进行配置就是普通的IO口输出,写输出寄存器的某一位,就可操作对应的IO端口,左边的位设置/清除寄存器可以用来单独操作输出寄存器中的某一位,不影响其他位。

推挽输出

推挽输出模式下,P-MOS与N-MOS均有效,数据寄存器为1时上管导通,下管关闭,输出接到VDD输出高电平,数据寄存器为0时下管导通,上管关闭,输出接到VSS输出低电平。这种模式下高低电平均有较强的驱动能力,所以推挽输出模式也可叫做强推输出模式。在推挽输出模式下,STM32对IO口有绝对的控制权,高低电平都由STM32控制。

开漏输出

开漏输出模式下,P-MOS无效,只有N-MOS工作。数据寄存器为1时下管断开,此时输出相当于断开,呈现高阻模式。数据寄存器为0时下管导通,此实输出低电平。这种模式下只有低电平有驱动能力,高电平没有。        开漏模式可以作为通讯协议的驱动方式,比如I2C通讯的引脚,在多机通讯的模式下,可以避免各个设备的相互干扰。

开漏模式还可用于输出5V的电平信号

数据寄存器为1,下管关闭,输出外部上拉的VDD可以是5V。数据寄存器为0,下管开启,输出直接连接VSS输出为0V。

还有一种是两个MOS管都无效,也就是输出关闭,端口的电平由外部信号控制。

下面是开漏输出和推挽输出的系统结构图。

 此模式下,输入仍有效。这是因为一个端口智能由一个输出,但可以有多个输入。

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

 

 复用推挽输出与复用开漏输出只是数据选择器选择为片上外设控制,与推挽输出和开漏输出只是控制源的不同,工作模式相同。

 

GPIO的8种模式

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值