STM32学习笔记—GPIO端口的介绍
无论学什么单片机,第一个要学的都是输入输出端口(I/O口),那么GPIOx(x为第几个端口)是STM32的输入输出端口,全称为General-Purpose Input Output ports,也就是通用输入/输出口。
什么是GPIO端口
GPIO端口是通用输入输出端口的简称,STM32芯片的GPIO引脚与与外部设备连接起来,从而实现与外部通讯,控制以及数据采集的功能。
GPIO端口功能描述
相较于51单片机的8位IO口,STM32的GPIO为是16位,每个GPIO端口有七个寄存器:
- GPIOx_CRL:端口配置低寄存器(32位)
- GPIOx_CRH:端口配置高寄存器(32位)
- GPIOx_IDR:端口输入寄存器(32位)
- GPIOx_ODR:端口输出寄存器(32位)
- GPIOx_BSRR:端口位设置/清除寄存器(32位)
- GPIOx_BRR:端口位清除寄存器(16位)
- 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个位。