GPIO八种工作模式
四种输入:
GPIO_Mode_IPU(上拉输入)GPIO_Mode_IPD(下拉输入)
原理: 经过上拉开关和下拉开关的连接,再经过触发器转化为0,1的数字信号,存储到数据寄存器中,然后我们就可以通过配置寄存器CRL,CRH控制这两个开关。
用法: 若GPIO引脚配置为上拉输入模式,在默认状态下(GPIO引脚无输入),取得的GPIO引脚数据为1,既高电平. 而下拉输入模式则是相反的,在默认状态下其引脚数据为0,低电平.
GPIO_Mode_IN_FLOATING(浮空输入)
原理: 不接上拉和下拉开关,直接经由触发器输入.
用法: 若配置成这个模式可以用电表测量其引脚电压是1点几伏(不确定的值).由于输入阻抗较大,一般把这种模式用于标准的通讯协议例如:I2C,USART的接收端.
GPIO_Mode_AIN(模拟输入)
原理: 直接关闭触发器,不接上拉和下拉开关,由另一路开关传至片上外设模块.
用法: 例如传送至ADC模块时,就由ADC采集电压信号.(使用ADC外设的时候,必须是设置为模拟输入模式).
四种输出:
GPIO_Mode_Out_PP(普通推挽输出)
原理: 经过一个由P_MOS和N_MOS管组成的单元电路.输出高电平(3.3V)时,P_MOS导通,低电平(0V)时,N_MOS导通(两个管子轮流导通,一个进电流,一个拉电流.这样它的负载能力和开关速度都比普通方式有大的提高)
用法: 一般都是应用在输出电平为0和3.3V的场合.
GPIO_Mode_Out_OD(普通开漏输出)
原理:
在输出0时,既高电平,则N_MOS管导通,使输出接地.在输出1时,则不输出高电平也不输出低电平(无法输出高电平,本身为高阻态).所以在使用的时候,必须在外部接上一个上拉电阻并且开漏输出模式具有”线与”的特性,既有很多开漏模式的引脚接到一起时,只有在所有引脚都处于高阻态的时候,才会输出高电平.(电压是外部上拉电阻所接电源的电压).只要其中一个引脚是低电平,那么整个线路都等于短路接地(低电平),电压是0V.(只要是开漏输出模式,都必须接上拉电阻)
用法:
一般应用在电平不匹配的场合,如需要输出5V的高电平,就需要在外部接上一个上拉电阻,电源为5V.这时在输出高组态的时候,就会由上拉电阻和电源向外输出5V.
GPIO_Mode_AF_PP(复用推挽输出)
GPIO_Mode_AF_OD(复用开漏输出)
原理: 同上.
用法: 对于复用模式,一般都是由GPIO的复用功能来选择的(比如一个IO引脚可以做一般输入输出,同时还是串口输出脚,这就是复用) 例如:GPIO的引脚用作串口的输出,就可以使用复用推挽输出模式了.如果是用在I2C,SMBUS这些需要线与功能的,就使用复用开漏输出
GPIO相关配置寄存器
每组GPIO端口的寄存器包括:
- 一个端口模式寄存器(GPIOx_MODER)
- 一个端口输出类型寄存器(GPIOx_OTYPER)
- 一个端口输出速度寄存器(GPIOx_OSPEEDR)
- 一个端口上拉下拉寄存器(GPIOx_PUPDR)
- 一个端口输入数据寄存器(GPIOx_IDR)
- 一个端口输出数据寄存器(GPIOx_ODR)
- 一个端口置位/复位寄存器(GPIOx_BSRR)
- 一个端口配置锁存寄存器(GPIOx_LCKR)
- 两个复位功能寄存器(低位GPIOx_AFRL & GPIOx_AFRH)
如果配置一个IO口需要2个位,那么刚好32位寄存器配置一组IO口16个IO口
如果配置一个IO口只需要1个位,一般高16位保留
BSRR寄存器32位分为低16位BSRRL和高16位BSRRH,BSRRL配置一组IO口的16个IO口的置位状态(1),BSRRH配置复位状态(0)。