stm32_gpio结构篇

stm32_gpio结构篇

目录

  • stm32_gpio结构篇
    • 1. GPIO端口位基本结构
    • 2. GPIO寄存器
    • 3. GPIO寄存器功能配置
    • 4. 开漏输出与推挽输出
    • 5. 上下拉电阻的作用

1. GPIO端口位基本结构

stm32_gpio结构篇_第1张图片

2. GPIO寄存器

配置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)

3. GPIO寄存器功能配置

GPIO端口模式寄存器(GPIOX_MODER)
stm32_gpio结构篇_第2张图片

功能:00:输入(复位状态)
           01:通用输出
           10:复用功能
           11:模拟

GPIO端口输出类型寄存器(GPIOX_OTYPER)
stm32_gpio结构篇_第3张图片
功能:0:输出推挽(复位状态)
           1:输出开漏

GPIO端口输出速度寄存器(GPIOX_OSPEEDR)
stm32_gpio结构篇_第4张图片
功能:00:2Mhz
           01:25Mhz
           10:50Mhz
           11:100Mhz(30pf),80Mhz(15pf)

GPIO端口上下拉寄存器(GPIOX_PUPDR)
stm32_gpio结构篇_第5张图片
功能:00:无上拉和下拉
           01:上拉
           10:下拉
           11:保留

GPIO端口输入数据寄存器(GPIOX_IDR)
stm32_gpio结构篇_第6张图片
功能:低16位有效,这些位只读,只能在字模式下访问

GPIO端口输出数据寄存器(GPIOX_ODR)
stm32_gpio结构篇_第7张图片
功能:低16位有效,可以通过软件可读可写,也可以使用GPIOX_BSRR寄存器来操作这些位

GPIO端口置位/复位寄存器(GPIOX_BSRR)
stm32_gpio结构篇_第8张图片
功能:高16位,0:保持;1:复位
           低16位,0:保持:1:置位

GPIO端口配置锁定寄存器(GPIOX_LCKR)
stm32_gpio结构篇_第9张图片
正确的写序列应用到第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)
stm32_gpio结构篇_第10张图片
每4位控制一个端口,控制端口0~7

GPIO端口复用功能高位寄存器(GPIOX_AFRH)
stm32_gpio结构篇_第11张图片
每4位控制一个端口,控制端口8~15

复用功能表:
stm32_gpio结构篇_第12张图片

4. 开漏输出与推挽输出

stm32_gpio结构篇_第13张图片

开漏输出: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导通,能输出高电平,反之输出低电平

5. 上下拉电阻的作用

1.提高驱动能力,利用单片机输出高电平,可能会因为后续电路的影响,导致输出电压达不到驱动器件的电压,所以,外接一个上拉电阻,提高电压
2.电压钳位:
单片机最开始上电的时候电平是不稳定的,所以外接一个上拉电阻,把电平稳定成高电平,下拉电阻同理,也就是说将一个不稳定的信号变成一个稳定的信号

3.上拉是对器件输入电流,下拉是输出电流;
上拉用来增大电流,下拉电阻是用来吸收电流。

你可能感兴趣的:(stm32,单片机)