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