端口概述
在STM32中,每个I/O端口可以由软件配置成为输入/输出模式。复位期间或刚复位后,I/O端口被配置成浮空输入模式。所有的GPIO引脚有一个内部弱上拉和弱下拉,当配置为输入时,
它们可以被激活或者是断开。
所有的端口都有外部中断的能力。
AF功能:对于复用功能,端口必须配置成复用功能输出模式。当软件把一个GPIO脚配置成复用输出功能,但是外设没有被激活,它的输出将不确定。还可以进行软件重映射I/O复用功能。
输入模式
四种输入模式:上拉输入、下拉输入、浮空输入、模拟输入。
以上电路由右至左看:
I/O即GPIO的外接部分;
在引脚上下连接保护二极管,当输入电压高于VDD时,上方二极管导通吸收此高电压;当引脚电压低于VSS时,下方的二极管导通,防止不正常电压引入芯片导致芯片烧毁。 尽管STM32芯片内部有这样的保护,但并不意味着STM32的引脚就无所不能,如果直接将引脚连接大功率器件,比如电机,那么要么电机不转,要么烧坏芯片。如果要驱动一些大功率器件,必须要加大功率及隔离电路驱动。也可以说STM32引脚是用来做控制,而不是做驱动使用的。
从图中可以看到,上拉和下拉电阻上都有一个开关,通过配置上下拉电阻开关,可以控制引脚的默认状态电平。当开启上拉时引脚默认电压为高电平,开启下拉时,引脚默认电压为低电平,这样就可以消除引脚不定状态的影响。当然也可以将上拉和下拉的开关都关断,这种状态我们称为浮空模式,一旦配置成这个模式,引脚的电压是不确定的,如果用万用表测量此模式下管脚电压时会发现只有 1 点几伏,而且还不时改变,所以一般情况下我们都会给引脚设置成上拉或者下拉模式,使它有一个默认状态。STM32 上下拉及浮空模式的配置是通过GPIOx_CRL和GPIOx_CRH寄存器控制的,大家在《STM32F1xx中文参考手册》查阅。STM32内部的上拉其实是一个弱上拉,也就是说通过此上拉电阻输出的电流很小,如果想要输出一个大电流,那么就需要外接上拉电阻了。
模拟输入配置:上下拉电阻被禁止。因为经过施密特触发器的信号只有1/0两种状态,信号源不经过触发器直接进行输入。
输出模式
四种输出模式:推挽输出、开漏输出、复用推挽输出、复用开漏输出。
所谓推挽输出模式,是根据P-MOS和N-MOS管的工作方式命名的。在该结构单元输入一个高电平时,P-MOS管导通,N-MOS管截止(可以将P-MOS当作NPN三极管,N-MOS当作PNP三极管来看就非常清楚),对外输出高电平(3.3V)。在该单元输入一个低电平时,P-MOS管截止,N-MOS管导通, 对外输出低电平 (0V) 。如果当切换输入高低电平时,两个MOS管将轮流导通,一个负责灌电流(电流输出到负载),一个负责拉电流(负载电流流向芯片),使其负载能力和开关速度都比普通的方式有很大的提高。
在开漏输出模式时,不论输入是高电平还是低电平,P-MOS 管总处于关闭状态。当给这个单元电路输入低电平时,N-MOS 管导通,输出即为低电平。当输入高电平时,N-MOS 管截止,这个时候引脚状态既不是高电平,又不是低电平,我们称之为高阻态。如果想让引脚输出高电平,那么引脚必须外接一个上拉电阻,由上拉电阻提供高电平。在开漏模式时,对输入数据寄存器的读访问可得到I/O状态。
复用功能输出:当I/O引脚被配置成为复用输出时,内置的外设的信号驱动输出缓冲器被打开,即由片内外设提供输出功能。所以当使用某引脚的复用功能时,一定要打开片上外设、复用时钟,且将使用复用的推挽或者开漏输出。
由上图可知,输出电平由输出数据寄存器决定,可以通过修改GPIOx_BSRR来影响电路的输出。
引脚配置
STM32的每个外设引脚配置情况可见《STM32中文参考手册》。包括TIM/USART/SPI/I2S/I2C/BxCAN/USB/USB OTG/SDIO/ADC DAC/FSMC等。