GPIO框图剖析
框图
基本结构分析
保护二极管
保护二极管用于防止引脚外部过高或过低的电压,当外部电压低于VSS,下方二极管导通,当外部电压高于VDD_FT,上方二极管导通。
上、下拉电阻
上、下拉电阻可以控制引脚默认电压(高电平和低电平),可以消除引脚不定状态的影响。也可以配置为浮空模式(既不上拉也不下拉)。
值得注意的是,STM32的内部上拉是弱上拉,要求大电流还是需要外部上拉。
通过“上、下拉寄存器GPIOx_PUPDR”控制引脚上、下拉模式。
P-MOS管和N-MOS管
P-MOS管和N-MOS管组成的单元电路使GPIO具有了"推挽输出"和“开漏输出”两种模式。
1 推挽输出
在IN输入高电平时,P-MOS导通,N-MOS关闭,输出高电平;
在IN输入低电平时,P-MOS关闭,N-MOS导通,输出低电平;
2 开漏输出
在开漏模式中,P-MOS管完全不工作,若想要输出0,P-MOS关闭,N-MOS导通,输出接地;
若想要输出1(无法输出高电平),P-MOS和N-MOS都关闭,引脚既不输出高电平也不输出低电平,为高阻态,为正常使用,必须接外部上拉;
除了I2C等需要“线与”功能(多个开漏引脚接一起,都输出高阻态,才由上拉电阻提供高电平,若一个引脚为地,则线路短路接地)的总线电路和电平不匹配(需输出5V高电平,则外部接上拉电阻,上拉电压为5V)的场合,通常情况下使用推挽输出模式。
通过“输出类型寄存器GPIOx_OTYPER”控制端口是推挽模式还是开漏模式。
输出数据寄存器
单片机可通过修改**“置位/复位寄存器GPIOx_BSRR”来修改“输出数据寄存器GPIOx_ODR”**的值,从而影响电路的输出。
复用功能输出
“复用”指的是STM32的其他片上外设对GPIO引脚进行控制,此时其他片上外设出来的信号连接到双MOS管结构中。
例如我们使用 USART 串口通讯时,需要用到某个 GPIO 引脚作为通讯发送引脚,这个时候就可以把该 GPIO 引脚配置成 USART 串口复用功能,由串口外设控制该引脚,发送数据。
通过“端口模式寄存器GPIOx_MODER”控制端口为复用模式。
输入数据寄存器
输入信号经过施密特触发器后,模拟信号转为0、1的数字信号,然后存储在**“输出数据寄存器GPIOx_IDR”**中,通过读取该寄存器就可以了解 GPIO 引脚的电平状态。
通过“输入数据寄存器GPIOx_IDR”读取I/O状态。
复用功能输入
与复用输出类似,信号通过GPIO引脚传输到其他片上外设,由该外设读取引脚状态。
通过“端口模式寄存器GPIOx_MODER”控制端口为复用模式。
模拟输入输出
模拟输入用于采集原始的模拟信号(ADC需要),不经过施密特触发器;类似的,当引脚用于DAC作为模拟信号输出通道时,此时为模拟输出功能,信号直接输出到引脚;
当GPIO用于模拟功能时(包括输入输出),引脚的上、下拉电阻是不起作用的。
通过“端口模式寄存器GPIOx_MODER”控制端口为模拟模式。
GPIO的工作模式
总结一下,由GPIO的结构决定了可以配置为以下几种工作模式。
输入模式
通过**“端口模式寄存器GPIOx_MODER”**控制端口为输入模式;
通过**“输入数据寄存器GPIOx_IDR”**读取I/O状态;
通过**“上/下拉寄存器GPIOx_PUPDR”**设置上、下拉状态。
输出模式
通过**“端口模式寄存器GPIOx_MODER”**控制端口为输出模式;
通过**“输出类型寄存器GPIOx_OTYPER”**控制端口是推挽模式还是开漏模式;
通过**“输出速度寄存器GPIOx_OSPEEDR”**设置输出速度;
通过**“上/下拉寄存器GPIOx_PUPDR”设置上、下拉状态,由于“输出数据寄存器GPIOx_ODR”**的影响(ODR对应的引脚为0,即引脚初始化后默认状态为低,上拉不足以影响引脚默认状态),;
通过**“输出数据寄存器GPIOx_ODR”**控制IO高低电平(推挽);
此时输入可用,可通过**“输入数据寄存器GPIOx_IDR”**读取I/O状态。
复用功能
通过**“端口模式寄存器GPIOx_MODER”**控制端口为复用模式;
通过**“输出类型寄存器GPIOx_OTYPER”**控制端口是推挽模式还是开漏模式;
通过**“输出速度寄存器GPIOx_OSPEEDR”**设置输出速度;
通过**“上/下拉寄存器GPIOx_PUPDR”**设置上、下拉状态;
输出源于其他外设,**“输出数据寄存器GPIOx_ODR”**无效,同输出模式,此时引脚默认状态为低;
此时输入可用,可通过**“输入数据寄存器GPIOx_IDR”**读取I/O状态,但一般用外设的寄存器获取数据信号。
模拟输入输出
通过**“端口模式寄存器GPIOx_MODER”**控制端口为模拟模式;
此时,双MOS管结构关闭,施密特触发器停用,上/下拉禁止,其他外设通过模拟通道进行输入输出。