目录
一、GPIO简介
GPIO是通用输入输出端口简称,即软件可控制的引脚,32芯片的GPIO引脚与外部设备连接起来,从而实现各种功能。
以STM32F103ZET6为例
共有7组GPIO,每组16个引脚,16*7=112个GPIO引脚,GPIOA-GPIOG
二、GPIO基本结构
1.保护二级管
芯片的引脚电平0~3.3V,引脚描述带有FT的引脚可以接5V
(两个保护二级管可以防止外部电压过高或过低)
引脚电压大于VDD时,上方二级管导通,防止过高电压进入芯片内部烧坏芯片。
引脚电压低于VSS时,下方二级管导通,防止过低电压从芯片内部汲取电流。
2.施密特触发器
具有滤波的作用,把连续的模拟信号转化为0,1的数字信号(高低电平)
三、GPIO功能描述
根据每个I/O端口的特定硬件特征,STM32 的 IO 口 可以由软件配置成如下 8 种模式(软件控制寄存器): 1、输入浮空 2、输入上拉 3、输入下拉 4、模拟输入 5、开漏输出 6、推挽输出 7、推挽式复用功能 8、开漏复用功能
输入配置:
● 输出缓冲器被禁止
● 施密特触发输入被激活
● 根据输入配置(上拉,下拉或浮动)的不同,弱上拉和下拉电阻被连接
● 出现在I/O脚上的数据在每个APB2时钟被采样到输入数据寄存器
● 对输入数据寄存器GPIOx_IDR读取I/O状态
1.输入浮空
如果引脚什么都不接,此时输入电平极易受外界的干扰导致输入电平不确定,完全由外部的输入决定。
2.输入上拉
上拉电阻接VDD,默认高电平,没有外部输入时I/O状态为高电平,电路为低电平有效(0有效)
3.下拉电阻
下拉电阻接VSS,默认低电平,没有外部输入时I/O状态为低电平,电路为高电平有效(1有效)
4.模拟输入
为片上ADC配置,从外部读取模拟信号
不经过施密特触发器
输出配置:
● 施密特触发开启
● 弱上拉和下拉电阻被禁止
● 出现在I/O脚上的数据在每个APB2时钟被采样到输入数据寄存器
● 在开漏模式下,对输入数据寄存器的读访问可得到I/O状态
● 在推挽模式下,对输出数据寄存器的读访问得到最后一次写的值
推挽输出和开漏输出
5.开漏输出
只有N-MOS管工作,输出数据寄存器GPIOx_ODR可控制I/O输出高阻态或低电平
当输出寄存器输出高电平,引脚输出高阻态(相当与断路)
当输出寄存器输低电平,引脚输出低电平
6.推挽输出
双MOS管以轮流方式工作,输出数据寄存器GPIOx_ODR可控制I/O输出高低电平。
当输出寄存器为高电平,引脚也输出为高电平
当输出寄存器为低电平,引脚也输出为低电平
开漏复用输出和推挽复用输出
复用功能模式中,输出使能,输出速度可配置,可工作在开漏及推挽模式,但是输出信号源于其他外设。输出数据寄存器GPIOx_ODR无效,输入可用,通过输入数据寄存器可获取I/O口实际状态,但一般直接用外设的寄存器获取该数据信号。
7.开漏复用输出
8.推挽复用输出
四、GPIO相关配置寄存器
每个GPI/O端口有两个32位配置寄存器(GPIOx_CRL,GPIOx_CRH),两个32位数据寄存器 (GPIOx_IDR和GPIOx_ODR),一个32位置位/复位寄存器(GPIOx_BSRR),一个16位复位寄存 器(GPIOx_BRR)和一个32位锁定寄存器(GPIOx_LCKR)。但我们常用的 IO 端口寄存器只有 4 个:CRL、CRH、IDR、ODR。具体可参考《STM32F103-中文参考手册》
1.端口配置低寄存器(GPIOx_CRL)
32位寄存器,4位控制一个引脚,CRL配置PX0~PX7
CNFy[1:0]和MODEy[1:0]共同控制有一个引脚
CNFy[1:0]是前两位,决定具体模式;MODEy[1:0]是后两位,决定是输入还是输出。
2.端口配置高寄存器(GPIOx_CRH)
32位寄存器,4位控制一个引脚,CRH配置PX8~PX15
CNFy[1:0]和MODEy[1:0]共同控制有一个引脚
CNFy[1:0]是前两位,决定具体模式;MODEy[1:0]是后两位,决定是输入还是输出
3.端口输入数据寄存器(GPIOx_IDR)
4.端口输出数据寄存器(GPIOx_ODR)
5.端口位设置/清除寄存器(GPIOx_BSRR)
设置和清除输出数据寄存器,都是写1有效
BRy位为1,ODRy被清除变为0
BSy位为1,ODRy被设置为1
6.端口位清除寄存器(GPIOx_BRR)
功能与GPIOx_BSRR的高16位一样
五、STM32的引脚说明
STM32的引脚可以分为6种,分别为电源引脚(3V3、5V、GND)、晶振引脚、复位引脚、BOOT引脚和GPIO引脚。晶振、复位和BOOT引脚对于不同的芯片来说所用引脚也不同,具体请参考技术手册,对于开发者来说,我们主要关注的是GPIO引脚的使用,GPIO有的引脚具有复用和重映射功能
1. 端口复用功能
STM32的大部分端口都具有复用功能
所谓复用,就是一些端口不仅仅可以做为通用IO口,还可以复用为一些外设引脚(比如正点原子的开发板PA9,PA10除了作为普通GPIO,还可以作为串口1的发送引脚)
作用:最大限度的利用端口资源
2.端口重映射功能
就是可以通过设置重映射寄存器把某些功能引脚映射到其他引脚(比如串口1的TX,RX引脚是在PA9,PA10上,但是同时它有两个映射端口PB6,PB7,开启重映射,PB6,PB7同样可以使用串口1)
作用:方便布线