一、GPIO基本结构和工作方式

1)I/O端口位的基本结构如下图所示:

STM32F1的GPIO工作原理

2)GPIO的工作方式:

四种输入模式:

  • 输入浮空模式,经过下图所示①、②、③、④通道,同时Vdd 和 Vss 所接的开关是断开的。
    STM32F1的GPIO工作原理
  • 输入上拉,与输入浮空的区别就是上拉电阻的开关闭合了。
    STM32F1的GPIO工作原理
  • 输入下拉,与浮空输入的区别就是下拉电阻的开关闭合了。
    STM32F1的GPIO工作原理
  • 模拟输入,此处一般用外部的模拟量通过I/O端口输入,这里是以电压的形式输入,而不是电平的形式。通过模拟输入转化为数字量进入单片机
    STM32F1的GPIO工作原理

四种输出模式:

  • 开漏输出,输出控制电路之前来自于输出数据寄存器,NMOS的漏级直接接到IO口作为输出引脚。
    STM32F1的GPIO工作原理
  • 开漏复用功能,输出控制电路的输入来自于片上的外设模块。
    STM32F1的GPIO工作原理
  • 推挽输出
    STM32F1的GPIO工作原理
  • 推挽式复用功能
    STM32F1的GPIO工作原理

推挽输出:

可以输出强高低电平,连接数字器件。

开漏输出:

只可以输出强低电平,高电平得靠外部电阻拉高。输出端相当于三极管的集电极,要得到高电平状态需要上拉电阻才行。适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内)。

三种最大翻转速度:

  • 2MHz
  • 10MHz
  • 50MHz

二、GPIO寄存器说明

每组GPIO端口的寄存器包括:

  • 两个32位配置寄存器(GPIOx_CRL,GPIOx_CRH),用来配置上面所提到的8种输入 / 输出模式和三种翻转速度。(一个IO口占四位)
    STM32F1的GPIO工作原理
    IO的端口位配置表如下图所示:
    STM32F1的GPIO工作原理
    由上图可以看出,当我们给CRL寄存器配置为输入,上拉 / 下拉模式的时候,我们脑子里想到的是,具体到底配置的是输入上拉还是输入下拉呢,这里需要注意的是,在输入模式下,GPIOx_ODR寄存器用来配置输入模式下的上拉还是下拉,写0配置为输入下拉,写1配置为输入上拉。当IO作为输出模式下的时候,GPIOx_ODR就作为输出数据寄存器来输出高电平或低电平。

  • 两个32位数据寄存器(GPIOx_IDR,GPIOx_ODR)

  • 一个32位置位/复位寄存器(GPIOx_BSRR),这里需要注意的是这个寄存器与输出数据寄存器的区别,以开漏输出模式为例:
    STM32F1的GPIO工作原理
    上图①处,我们在CPU写寄存器的时候,先写位设置 / 清除寄存器,通过它来间接控制设置输出数据寄存器的目的,当然可以看到输出数据寄存器也能直接被读 / 写。所以先写位设置 / 清除寄存器,通过它来间接控制设置输出数据寄存器只是其中一种方式,但是这种方式有一个好处,就是这里如果需要设置PA0为高电平,只需要设置GPIOA_BSRR的第0位为1,其他位都设置为0就行。其它位的电平写0,是不影响ODR的输出的。
    STM32F1的GPIO工作原理
    但是对于直接设置ODR寄存器的话,你对ODR寄存器的每一位设置的是什么,这个引脚实际输出的就是什么电平。这里设置BSRR间接控制ODR寄存器与直接写ODR寄存器相比的好处是,如在实时操作系统里,时常要先把ODR寄存器的值读进来,去分析他,再去写ODR寄存器输出,为的是不影响ODR寄存器的其他位被改变。
    对于GPIOx_BSRR的16-31位用来设置引脚输出为低电平,GPIOx_BSRR的0-15位用来设置引脚输出为高电平,高位和低位的作用是相反的。

  • 一个16位复位寄存器(GPIOx_BRR)

  • 一个32位锁定寄存器(GPIOx_LCKR)

三、STM32F10x GPIO引脚说明

1)端口复用功能

  • STM32的大部分端口都具有复用功能,所谓复用就是一些端口不仅仅可以作为通用的IO口,还可以复用为一些外设引脚,比如PA9,PA10可以复用为STM32的串口1引脚。

2)端口重映射

  • 就是可以把某些功能引脚映射到其他引脚,比如串口1默认引脚是PA9,PA10可以通过配置重映射映射到PB6,PB7,重映射的作用一般是为了方便布线。
    STM32F1的GPIO工作原理

相关文章:

  • 2022-01-06
  • 2022-01-03
  • 2021-07-12
  • 2021-10-10
  • 2021-12-11
  • 2022-12-23
  • 2022-01-05
  • 2022-12-23
猜你喜欢
  • 2021-07-08
  • 2022-12-23
  • 2021-08-05
  • 2022-12-23
  • 2021-10-02
  • 2021-10-04
  • 2022-01-20
相关资源
相似解决方案