目录
1、GPIO定义
GPIO的全称是General-purpose input/output,意为通用输入/输出接口,在STM32中,GPIO的工作模式被细分为8种,由4个32位寄存器共同控制,分别是4种输入模式:浮空输入、上拉、下拉输入、模拟输入,2种输出模式:推挽输出,开漏输出,2种复用输出模式:推挽复用功能和开漏复用功能。
2、STM32的GPIO原理图
浮空输入模式
浮空即端口在默认情况下不接上拉电阻和下拉电阻,上图开关1与开关2断开,都呈高阻态。因此其特点为:电压不稳定,可能为0V,也可能是VCC,还可能是介于两者之间的某个值,所以对于浮空输入要有明确的输入信号。
适用场合:外部按键输入/USART RX引脚。
上拉、下拉输入模式
上拉: 开关1闭合,开关2断开,即端口接入一个上拉电阻,起到保护作用。那么在没有输入信号时,默认电平为高电平。
下拉:开关2闭合,开关1断开,即端口接入一个上拉电阻,起到保护作用。那么在没有输入信号时,默认电平为低电平。
适用场合:需要IO内部上拉电阻输入时,器件的外部中断(IRQ)引脚触发中断条件为下(上)降沿触发/低(高)电平触发,这样在无信号输入时始终保持高(低)电平,如果有事件触发中断IRQ可以输出一个低(高)电平,进而可产生(下(上)降沿/低(高)电平)中断。
模拟输入模式
斯密特触发器关闭,模拟信号直接从I/O引脚经过模拟输入通道到达STM32处理器的片上A/D转换电路。
适用场合:ADC模拟输入/低功耗下省电。
推挽输出模式
推挽电路是指两个参数相同的三极管或MOSFET,以推挽方式存在于电路中,受两个互补信号控制,各负责正负半周的波形放大任务。推挽电路工作时,两只对称的功率开关管每次只有一个导通,另一个截止,所以导通损耗小、效率高。输出既可以向负载灌电流,也可以从负载抽取电流,及提高电路的的负载能力,又提高了开关速度。但要注意的是,推挽电路是不需要接上拉电阻,引脚就可以直接输出高电平,假如输出端接地,输出高电平反而会引起单片机运行不稳定,甚至烧坏引脚。
当STM32处理器的I/0引脚工作在推挽输出方式下,CPU输出‘0’时,N-MOS导通,P-MOS截止,引脚输出‘0’,也就是低电平;CPU输出‘1’时,N-MOS截止,P-MOS导通,引脚输出‘1’,也就是高电平。可见,I/0口工作在推挽输出方式下,并不需要接上拉电阻的,此时开关1、开关2都断开。
适用场合:通常作为普通的GPIO用于驱动LED、数码管等电子元器件或输出控制某个信号。
开漏输出模式
开漏中的“漏”是指MOSFET的漏极,开漏电路就是指以MOSFET的漏极为输出的电路。
图中,CPU输出‘0’时,N-MOS导通,P-MOS不被CPY激活,引脚输出‘0’,也就是低电平;
CPU输出‘1’时,N-MOS截正即高阻态,P-MOS不被激活,此时输出引脚要得到‘1’高电平,
需要外接上拉电阻,也就是开关1闭合,开关2断开。
适用场合:适合做电流型的驱动,其吸收电流能力较强。可以将多路开漏输出的引脚连接到一条线上,通过一个上拉电阻,在不增加任何 器件的情况下,形成“与逻辑”关系,这也是I2C,SMBus,等总线判断总线占用 状态的原理。
复用推挽输出模式
在STM32中,一个引脚通常可作为普通GPIO来使用,但通常有多个复用模块对应着同一个引脚,那么当这个GPIO作为内置外设引脚时,就叫做复用模式。
适用场合:常见片内外设(USART TX引脚/SPI/PWM输出等等)
复用开漏输出模式
与开漏输出特性一致,只不过引脚选择了复用功能。 适用场合:常见片内外设(I2C/SMBus等等)
注意事项:当GPIO引脚的主功能为驱动片上外设(如I2C)时,此时也可选择对应推挽/开漏输出模式而不启用复用引脚功能。此外如果有多个复用功能模块对应同一个引脚,只能使能其中之一,其它模块保持非使能状态。