目录
GPIO端口模式寄存器(GPIOx_MODER) (x = A..D,F)
GPIO 端口输出类型寄存器 (GPIOx_OTYPER) (x = A..D,F)
GPIO 口输出速度寄存器 (GPIOx_OSPEEDR) (x = A..D,F)
GPIO 口上拉 / 下拉寄存器 (GPIOx_PUPDR) (x = A..D,F)
GPIO 端口输入数据寄存器 (GPIOx_IDR) (x = A..D,F)
GPIO 端口输出数据寄存器 (GPIOx_ODR) (x = A..D,F)
GPIO 端口置位 / 复位寄存器 (GPIOx_BSRR) (x = A..D,F)
GPIO简介
GPIO是通用型输入输出的简称,简单的说其实就是STM32单片机额的可控制引脚STM32的GPIO引脚与外部设备连接起来,实现外部通信,控制以及数据采集的功能;GPIO被分为很多组,每组有16个引脚编号为0~15,例如STM32G030C8来说,引脚分为了GPIOA,GPIOB,GPIOC,GPIOD,GPIOF,以及其他引脚;所有的GPIO引脚都具备基本输入输出功能。
最基本的输出功能由STM32控制引脚输出高、低电平,实现开关控制;
最基本的输入功能是检测外部电平,通过引脚上电平的高低来确定按键是否被正常按下。
GPIO硬件解析
STM32芯片GPIO接口内部原理
注释:
I/O引脚:接收外部发出的信号或者向外部发出信号
保护二极管:
VDD:用来限制IO引脚输入或输出过高电压,当输入或输出电压过高时,保护二极管VDD则导通
VSS:同VDD,但是他的作用是当输入或输出电压过低时,保护二极管VSS导通
上下拉电阻:
当VDD开关处于闭合状态,VSS开关处于打开状态时,整个电路处于上拉输入状态
当VDD开关处于打开状态,VSS开关处于闭合状态时,整个电路处于下拉输入状态
当VDD开关处于打开状态,VSS开关处于打开状态时,整个电路处于浮空输入状态
通常情况下设置模拟输入模式或者复用功能输入模式,VDD开关和VSS开关均设置为打开状态
P-MOS、N_MOS:
P-MOS、N-MOS在这里用于控制输出状态,分别为开漏输出和推挽输出
当电路处于推挽输出状态时P-MOS、N-MOS均处于有效电路,且P-MOS 输出0时电路导通, N-MOS 输出1时导通,反之不成立
当电路处于开漏输出状态时P-MOS处于失效状态,且N-MOS输出1时处于导通状态
GPIO模式
typedef enum
{
GPIO_Mode_AIN = 0x00, // 模拟输入
GPIO_Mode_IN_FLOATING = 0x04, // 浮空输入
GPIO_Mode_IPD = 0x28, // 下拉输入
GPIO_Mode_IPU = 0x48, // 上拉输入
GPIO_Mode_Out_OD = 0x14, // 开漏输出
GPIO_Mode_Out_PP = 0x10, // 推挽输出
GPIO_Mode_AF_OD = 0x1C, // 复用开漏输出
GPIO_Mode_AF_PP = 0x18 // 复用推挽输出
} GPIOMode_TypeDef;
输入模式
在输入模式时,施密特触发器打开,输出被禁止,可以挺过输入数据寄存器GPIOx_IDR读取I/O状态,其中输入模式可以氛围上拉、下拉、浮空和模拟输入中,上下拉输入这里就不再解释了;所谓浮空输入就是指输入的电平是不确定的,完全由外部输入所决定,一