STM32F10x GPIO引脚说明

此篇文章重点讨论STM32的GPIO的配置种类以及上拉输入、下拉输入、浮空输入、模拟输入的区别

经过学习STM32发现,GPIO有8种工作方式

输入模式:输入浮空、输入上拉、输入下拉、模拟输入

输出模式:开漏输出、开漏复用功能、推挽式输出、推挽式复用功能

输入模式参照图片来讲

浮空输入:浮空输入状态下上拉电阻和下拉电阻都是断开的,信号经过I/O端口——施密特触发器——输入数据寄存器——CPU读取

上拉输入:相比浮空输入状态,就是上拉电阻闭合(下拉电阻仍然处于断开状态)

下拉输入:相比浮空输入状态,就是下拉电阻闭合(上拉电阻仍然处于断开状态)

模拟输入:上拉电阻和下拉电阻都处于断开状态,并且信号不是经过施密特触发器,而是直接进入施密特触发器之前的模拟输入通道


输出模式也参照图片来讲:


开漏输出模式:其中1号区域,两个寄存器有两种读写方式,这个后面会介绍,这是关于寄存器的配置原因,对于输出驱动器部分,当输出控制电路输出逻辑1(高电平)时,外部的I/O端口输出的电平由外部电路决定,如果外部连接有上拉电阻,则输出高电平,如果接有下拉电阻,则输出低电平;当输出控制电路输出逻辑0(低电平)时,外部的电路不管是否接有上拉电阻还是下拉电阻,都输出低电平;所有应用开漏输出模式的时候想要输出高电平切记要加上拉电阻

开漏复用功能输出:此模式与开漏输出模式只有一个不同的地方,就是在1号区域,此模式是直接在复用功能输出引输出部分输出的

推挽输出模式:也是走的1、2、3、4号路线,其中在2号区域输出控制电路部分,如果输出逻辑1,则3号区域P-MOS导通,N-MOS截止,输出高电平(不管外部有没有上拉电阻);如果输出逻辑0,则3号区域P-MOS截止,N-MOS导通,输出低电平(不管外部有没有上拉电阻和下拉电阻)

推挽复用功能输出:此模式与推挽输出模式不同的地方就是1号区域,此模式是直接在复用功能输出部分输出的

下面讲解一下输出模式与寄存器的关系

在STM32的参考手册中我们可以找到GPIOx_CRL和GPIOx_CRH寄存器,这两个寄存器功能相同,就是GPIOx_CRL是用来配置低8位(例:PA0_PA7)I/O口的,GPIOx_CRH是用来配置高8位(例:PA8_PA15)I/O口的

STM32F10x GPIO引脚说明_第1张图片

这是一个32位寄存器,每4位配置一个端口,例:第1位和第0位即MODE0[1:0],用来设置Px0(PA0 or PB0 or PC0 and so on)是输入还是输出,第3位和第2位即CNF0[1:0],用来选择Px0的输入或者输出的具体模式。

其中有一个地方值得注意,就是在输入模式下,CNFx=10的状态:上拉/下拉输入模式,到底是上拉输入模式还是下拉模式就要用到另一个寄存器GPIOx_ODR,并且这个寄存器对输入和输出有着不同的作用

STM32F10x GPIO引脚说明_第2张图片

这是一个32位寄存器,高16位保留,低16位每位对应Px的一个I/O口

在输入模式下,如果对应位置1,则为上拉输入;如果对应位置0,则为下拉输入

在输出模式下,如果对应位置0,则是要求输出端口输出默认输出高电平,注意:此处,若为开漏输出模式,若想输出高电平需要外界上拉电阻

具体对应关系见下表:


还有一个寄存器需要介绍,端口位设置/清除寄存器(GPIOx_BSRR)


在输出模式下,可以通过配置这个寄存器决定到底是输出高电平还是低电平,低16位置1,则对应端口输出高电平,高16位置1,则对应端口输出低电平

这个寄存器就是上面讲解输出模式时的疑问

STM32F10x GPIO引脚说明_第3张图片

配置输出模式时,可以通过配置寄存器GPIOx_BSRR然后映射到寄存器GPIOx_ODR,也可以直接配置寄存器GPIOx_ODR,但是对于运行效率来说,还是通过GPIOx_BSRR映射到GPIOx_ODR效率更高。




你可能感兴趣的:(stm32,开漏,推挽,端口模式,io端口)