1.GPIO简介
STM32是一系列基于ARM Cortex-M内核的32位微控制器。该系列微控制器广泛应用于计算机、通讯、工业自动化、消费电子、汽车电子、医疗仪器及家庭电器等领域。该系列控制器具有高性能、低功耗、智能化等特点。其中,GPIO就是STM32控制器中的一种重要的通用输入输出口。
GPIO全称为“General Purpose Input and Output”,即通用输入输出口。它是STM32控制器中的一种数字输入输出接口,具有广泛的应用。GPIO通常是微控制器与外围电路之间的主要通信接口。它可以通过控制逻辑电平来实现输入、输出、控制等功能。在STM32控制器中,GPIO口通常是通过引脚配置和寄存器编程进行控制的。
2.GPIO基本结构
STM32的系统结构如下图,在STM32中,所有的GPIO都是挂载在APB2外设总线上的,APB2在APB1的左边,GPIO的名称是按照GPIOA,GPIOB......的方式来命名的。
每个GPIO外设有16个引脚,从0-15,每个GPIO中包含了寄存器和驱动器,寄存器就相当于一个特殊的存储器,内核可以通过APB2总线来对寄存器进行读写,这就可以完成输出电平和读取电平了。
- 寄存器的每一位都对应一个引脚
- 输出寄存器写1对应的引脚就输出高电平,写0对应的引脚就输出低电平。
- 当读取1就证明对应的引脚为高电平,读取0则对应的引脚为低电平。
因为STM32是32位的单片机,所以内部的寄存器都是32位的,但是端口只有16位,所以寄存器只有低16位有端口,高16位是没有端口的。
至于驱动器就是用来加强信号的驱动能力的,寄存器只负责读写数据,所以当我们需要点亮LED灯等操作时, 则需要驱动器来增大驱动能力。
2.1 GPIO位结构
整个GPIO位的结构可以分为3个部分,从左到右依次为寄存器,驱动器,IO引脚三部分,但是也可以分为两个部分,从上到下是输入,输出两部分,
2.2 IO引脚
接下来我们来详细看一下,首先从输入部分来看,IO引脚部分有两个保护二极管,是用来对输入电压进行限幅的,上面接的VDD是3.3V的,下面的VSS是0V的。
- 如果输入电压比3.3V还要高,那么上面的二极管会导通,输入电压产生的电流会流入上方的VDD而不会流入内部电路,可以防止电压过高对内部电路产生伤害。
- 如果输入电压比0V还低,那么下面的二极管会被导通,电流会从VSS流出去,而不会从内部电路汲取电路,也能对内部电路进行保护.
- 如果输入电压在0~3.3V之间,保护二极管均不会被导通,此时保护二极管无任何作用,
2.3上拉电阻和下拉电阻
接下来这根线就到了这个地方,这里连接了两个电阻,称为上拉电阻和下拉电阻,上拉电阻至VDD,下拉电阻至VSS,这里就有三种模式:
- 上拉输入,上面导通,下面断开。当引脚悬空时,上拉输入可以保证引脚的高电平,所以上拉输入是默认为高电平的输入模式。
- 下拉输入,上面断开,下面导通。当引脚悬空时,下拉输入可以保证引脚的低电平,所以上拉输入是默认为低电平的输入模式。
- 浮空输入,上下都断开。容易受到外界影响。
上拉和下拉有什么作用呢?就是为了给输入提供一个默认的输入电平, 因为对应一个数字的端口,输入的不是高电平就是低电平,但如果输入引脚什么都不接,就不确定是高电平还是低电平。
如果输入什么都不接,此时输入就是一种浮空的状态,引脚的输入电平容易受到影响,为了防止这种事情的发生,就有了上拉输入和下拉输入。
2.4施密特触发器,输入数据寄存器
这里应该是施密特触发器而不是肖特基触发器,施密特触发器在这里的作用就是给输入电压进行整形的,如果输入电压大于某个阈值,输入会瞬间升为高电平,输入电压小于某个阈值,输入会瞬间降为低电平。
通过下图可以发现,相比较输入信号,通过施密特触发器整形的输出信号就更完美了,施密特触发器通过两个比较阈值来判断,中间留有一定的变化范围,可以有效避免信号波动产生的输出抖动现象。接下来经过施密特触发器整形的波形就能够直接写给输入数据寄存器了。
这时我们再用程序读取输入数据寄存器的某一位数据,就能知道端口的输入电平了。
2.5片上外设端口
这里还有两条线路,是连接到片上外设的端口,包含了模拟输入和复用功能输入。
- 模拟输入是连接到ADC上的,因为ADC需要接收模拟量,所以这根线是接在施密特触发器前面的。
- 还有一根线是复用功能输入,这个是连接到其他需要读取端口的外设上的,比如串口的输入引脚等,这根线需要的是数字量的信号,所以接在施密特触发器的后面。
3.GPIO特点
- 可配置为8种输入输出模式
- 引脚电平:0V~3.3V,部分引脚可容忍5V
- 输出模式下可控制端口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等
- 输入模式下可读取端口的高低电平或电压,用于读取按键输入、外接模块电平信号输入、ADC电压采集、模拟通信协议接收数据等
4. 8种输入输出模式
5.模拟输入
其他三种输入模式在2.3有介绍,大家可以去看看。
在模拟输入的模式下,施密特触发器和下面的输出都是断开的,所以红圈部分都是用不到的,也就是整个电路只有一条线,也就是从IO引脚直接接到片上外设,也就是ADC,所以当我们使用ADC的时候,直接将引脚输入设置成模拟输入即可,其他时候用不到。
今天的分享到这里就结束了,下一期给大家分享GPIO的输出。