STM32的GPIO分析
GPIO介绍
STM32的每个GPIO引脚都可以由软件配置成输出(推挽或开漏)、输入(带或不带上拉或下拉)或复用的外设功能接口。多数GPIO引脚与数字或模拟的复用外设共用,除了具有模拟输入(ADC)功能的引脚之外,其他GPIO引脚都有大电流通过的能力,具体有8种模式:
1、输入浮空(输入电平必须由外部电路确定,要根据具体电路,加外部上拉电阻或下拉电阻,可以做按键识别)
2、输入上拉(打开I/O内部上拉电阻)
3、输入下拉(打开I/O内部下拉电阻)
4、模拟输入
5、开漏输出(输出端相当于三极管的集电极,要想输出高电平必须外接上拉电阻,适合做电流型驱动)
6、推挽式输出(可以输出高低电平和连接数字器件,推挽式输出的电阻小,带负载能量强)
7、推挽式复用功能(复用指该引脚打开remap)
8、开漏复用功能
基本结构图
STM32很多I/O口是5V兼容的,具体查阅技术手册(标注FT:five tolerant)有助于连接5V电平外设
STM32每个I/O端口(16个引脚)都是由7个寄存器来控制的(具体到控制哪个引脚需要翻阅手册)
GPIO的寄存器
一、端口配置寄存器
每个引脚占用4bit的配置寄存器,用来配置输入/输出以及模式速率。因此一个端口16个引脚对应两个32位寄存器。分别是GPIOx_CRL和GPIOx_CRL,分别对应低8位和高8位。4bit的高两位为CNF,低两位为MODE
-举例:我们配置PORT B的12位为上拉输入,13位为推挽输出
GPIOB->CRH&=0xFF00FFFF;//清除这两位原来的设置
GPIOB->CRH|=0x00380000;//配置PB12位1000B,PB13为0011B
GPIOB->ODR=1<<12; //1左移12位,相当于把1000000000000赋给GPIO_ODR,刚好对应PB12的输出位为1
二、端口输入(输出)数据寄存器
输入数据寄存器IDR和输出数据寄存器ODR都分别用了寄存器的低16位,只是IDR为只读,ODR可读可写。两个寄存器都是以字(两字节)模式访问而不能以bit模式访问。
三、端口位设置/ 清除寄存器
四、端口位清除寄存器
五、端口配置锁定寄存器
六、复用功能I/O 和调试配置(AFIO)
为了优化64脚或100脚封装的外设数目,可以把一些复用功能重新映射到其他引脚上。设置复用重映射和调试I/O配置寄存器(AFIO_MAPR)实现引脚的重新映射。这时,复用功能不再映射到它们的原始分配上
具体参考手册
。。。。。。。。。。。。。。。。。待续。。。。。。。。。。。。。。。。。。。。。。