配置GPIO端口一共有10个32位的相关寄存器,分别是
GPIO端口控制有关:
GPIO端口模式寄存器(GPIOX_MODER)
GPIO端口输出类型寄存器(GPIOX_OTYPER)
GPIO端口速度寄存器(GPIOX_OSPEEDR)
GPIO端口上下拉寄存器(GPIOX_PUPDR)
GPIO端口数据有关:
GPIO端口输入数据寄存器(GPIOX_IDR)
GPIO端口输出数据寄存器(GPIOX_ODR)
GPIO端口位操作有关:
GPIO端口置位/复位寄存器(GPIOX_BSRR)
端口锁定机制有关:
GPIO端口配置锁定寄存器(GPIOX_LCKR)
GPIO端口复用功能选择有关:
GPIO端口复用功能低位寄存器 (GPIOX_AFRL)
GPIO端口复位功能高位寄存器 (GPIOX_AFRH)
功能:00:输入(复位状态)
01:通用输出
10:复用功能
11:模拟
GPIO端口输出类型寄存器(GPIOX_OTYPER)
功能:0:输出推挽(复位状态)
1:输出开漏
GPIO端口输出速度寄存器(GPIOX_OSPEEDR)
功能:00:2Mhz
01:25Mhz
10:50Mhz
11:100Mhz(30pf),80Mhz(15pf)
GPIO端口上下拉寄存器(GPIOX_PUPDR)
功能:00:无上拉和下拉
01:上拉
10:下拉
11:保留
GPIO端口输入数据寄存器(GPIOX_IDR)
功能:低16位有效,这些位只读,只能在字模式下访问
GPIO端口输出数据寄存器(GPIOX_ODR)
功能:低16位有效,可以通过软件可读可写,也可以使用GPIOX_BSRR寄存器来操作这些位
GPIO端口置位/复位寄存器(GPIOX_BSRR)
功能:高16位,0:保持;1:复位
低16位,0:保持:1:置位
GPIO端口配置锁定寄存器(GPIOX_LCKR)
正确的写序列应用到第16位时,此寄存器将锁定端口位的配置,位[15:0]值用于锁定GPIO配置,在写序列期间位[15:0]值不能变,LCK序列应用后,在执行下一次复位前,都不会改变
LCKK[16]:锁定键,可以随时读取此位,可使用锁定键写序列进行修改
0:端口配置锁定键未激活
1:端口配置锁定键已激活
锁定键写序列
WR LCKR[16]=‘1’+LCKR[15:0]
WR LCKR[16]=‘0’+LCKR[15:0]
WR LCKR[16]=‘1’+LCKR[15:0]
RD LCKR
RD LCKR[16]=‘1’
LCKX[15:0]
0:端口配置未锁定
1:端口配置已锁定
GPIO端口复用功能低位寄存器(GPIOX_AFRL)
每4位控制一个端口,控制端口0~7
GPIO端口复用功能高位寄存器(GPIOX_AFRH)
每4位控制一个端口,控制端口8~15
开漏输出:P_MOS被设置为高阻态,只有N_MOS能被导。当输出数据寄存器(GPIOX_ODR)=0时,N_MOS导通,输出低电平,当输出数据寄存器(GPIOX_ODR)=1时,N_MOS截至,只能通过配置上拉电阻来实现输出高电平,因为是使用外部电源,所以适合做电流性驱动电路
推挽输出:输出数据寄存器(GPIOX_ODR)=0时,N_MOS导通,输出低电平,当输出数据寄存器(GPIOX_ODR)=1时,N_MOS截至,P_MOS导通,能输出高电平,反之输出低电平
1.提高驱动能力,利用单片机输出高电平,可能会因为后续电路的影响,导致输出电压达不到驱动器件的电压,所以,外接一个上拉电阻,提高电压
2.电压钳位:
单片机最开始上电的时候电平是不稳定的,所以外接一个上拉电阻,把电平稳定成高电平,下拉电阻同理,也就是说将一个不稳定的信号变成一个稳定的信号
3.上拉是对器件输入电流,下拉是输出电流;
上拉用来增大电流,下拉电阻是用来吸收电流。