STM32学习笔记—GPIO端口的介绍

STM32学习笔记—GPIO端口的介绍

无论学什么单片机,第一个要学的都是输入输出端口(I/O口),那么GPIOx(x为第几个端口)是STM32的输入输出端口,全称为General-Purpose Input Output ports,也就是通用输入/输出口。

什么是GPIO端口

GPIO端口是通用输入输出端口的简称,STM32芯片的GPIO引脚与与外部设备连接起来,从而实现与外部通讯,控制以及数据采集的功能。

GPIO端口功能描述

相较于51单片机的8位IO口,STM32的GPIO为是16位,每个GPIO端口有七个寄存器:

  1. GPIOx_CRL:端口配置低寄存器(32位)
  2. GPIOx_CRH:端口配置高寄存器(32位)
  3. GPIOx_IDR:端口输入寄存器(32位)
  4. GPIOx_ODR:端口输出寄存器(32位)
  5. GPIOx_BSRR:端口位设置/清除寄存器(32位)
  6. GPIOx_BRR:端口位清除寄存器(16位)
  7. GPIOx_LCKR:端口配置锁存寄存器(32位)

端口配置低寄存器(GPIOx_CRL)

端口配置低寄存器
GPIO口的每一位需要端口配置寄存器的4位来进行配置输入输出模式(2位配置MODE,2位配置CNF),这样的话每组16个GPIO口则需要64位,这也就表明需要两个32位寄存器。于是GPIOx_CRL用于配置Px0-Px7的输入输出模式,GPIOx_CRH用于配置Px8-Px15的输入输出模式。

端口配置高寄存器
需要注意的是,当MODE选择00,CNF为选择10时,代表着上拉/下拉输入模式。到底是上拉还是下拉则需要GPIOx_ODR(端口输出寄存器)来确定,0为下拉输入,1为上拉输入。

端口输入寄存器(GPIOx_IDR)

端口输入寄存器
IDR寄存器低16位,每个位控制该组GPIO口的一个IO口,对应的是该IO口的输入电平,高16位为保留位。在输入模式下,可以读取I/O端口的电平值;在输出模式下,也可以读取I/O端口的电平值(在开漏输出时,读取到的I/O端口的电平值,不一定就是输出的电平值)。

端口输出寄存器(GPIOx_ODR)

端口输出寄存器
ODR寄存器的低16位,每个位控制该组GPIO口的一个IO口,对应的是该IO口的输出电平,高16位为保留位。在输出模式下,可以通过写寄存器的值,来达到某个IO口的电平输出;在输入模式下,还可以通过写值,来确定是上拉还是下拉输入模式。

端口位设置/清除寄存器(GPIOx_BSRR)

端口位设置/清除寄存器
BSRR寄存器的B是Bit,S是Set,R是Reset,R是Register。该寄存器高16位和低16位都对应ODR寄存器。高16位BRy:清除端口位x的位y,写入1使端口置0;低16位BSy:设置端口x的位y,写入1使端口置1。

端口位清除寄存器(GPIOx_BRR)

端口位清除寄存器
BRR寄存器与BSRR寄存器高16位功能一样。

端口配置锁存寄存器(GPIOx_LCKR)

端口配置锁存寄存器
位[15:0]用于锁定GPIO端口的配置。在规定的写入操作期间,不能改变LCKP[15:0]。当对相应的端口位执行了LOCK序列后,在下次系统复位之前将不能再更改端口位的配置。每个锁定位锁定控制寄存器(CRL, CRH)中相应的4个位。