前文我们概述了STM32单片机的GPIO外部功能,接下来将是STM32单片机的GPIO内部结构,希望对小伙伴们有所帮助。
GPIO端口位的基本结构如图所示:
1、保护二极管
GPIO引脚内部加上两个保护二极管配置,可防止单片机引脚外部过高或过低的电压输入。当引脚电压高于VDD_FT或VDD时,上方的二极管将导通吸收该电压;当引脚电压低于VSS 时,下方的二极管将导通,防止不正常电压因引入芯片导致被毁。
需要注意的是,当引脚接入大功率器件,将有烧坏的风险。
2、上、下拉电阻
如上图所示,上下拉电阻都配置一个开关,它们可通过配置上下拉电阻开关,控制引脚的默认状态电平。
当GPIO的电阻开启上拉时,将默认电压为高电平;当GPIO的电阻开启,将默认电压为高电平,这样可以消除引脚间不定状态的影响,也可选择浮空模式,将上拉下拉的开关全都关掉,需要注意的是若上下电阻处于浮空模式,其引脚电压将不确定。
3、P-MOS管和N-MOS管
GPIO引脚经过两个保护二极管将分为两部分,上面是输入模式,下面是输出模式。后者的线路将经过一个由P-MOS和N-MOS管组成的单元电路,具有推挽和开漏两种输出模式。
4、复用功能输出
由于STM32单片机的GPIO引脚具有第二功能,当时用复用功能,将通过其他外设复用功能输出信号与GPIO数据寄存器一起连接到双MOS管电路的输入,其中梯型结构是用来选择复用功能还是普通IO口功能。
5、输出数据寄存器
前文所提到的P-MOS管和N-MOS管结构电路的输入信号,是由输出数据寄存器GPIOx_ODR提供的,若是想修改GPIO引脚的输出电平,可直接修改输出数据寄存器的值。而“置位/复位寄存器GPIOx_BSRR”可通过修改输出数据寄存器的值从而影响电路的输出。
6、复用功能输入
该模式与前文所提到的复用功能输出类似,在复用功能输入模式时,GPIO引脚的信号传输到STM32其他片上外设,由该外设读取引脚的状态。
7、输入数据寄存器
输入数据寄存器是由IO口经过上下拉电阻、肖特基触发器引入。
当信号经过触发器,模拟信号将变为数字信号0或1,然后存储在输入数据寄存器中,通过读取输入数据寄存器GPIOx_IDR可知IO口的电平状态。
8、模拟输入输出
当GPIO引脚用于ADC才几点呀的输入通道时,将作为模拟输入功能,此时信号是不经过施密特触发器。因为经过施密特触发器后信号只有0、1两种状态,ADC外设要采集到原始的模拟信号,信号源输入必须在施密特触发器前,当GPIO引脚用于DAC作为模拟电压输出通道时,此时作为“模拟输出功能”,DAC的模拟信号也不经过双MOS管结构了,直接通过管脚输出。