一、GPIO是什么
GPIO简介:通用输入输出端口的简称。可以通过软件控制其输出和输入。stm32芯片的GPIO引脚与外部设备连接起来,从而实现与外部通信,控制以及数据采集的功能。
二、GPIO特性
输出状态:带有上拉或下拉的推挽输出或开漏输出
从数据寄存器 (GPIOx_ODR) 或外设 ( 复用功能输出 ) 输出数据
可选的每个 I/O 口的速度
输入状态:浮空、上拉 / 下拉、模拟输入
从数据寄存器 (GPIOIDR) 或外设输入数据 ( 复用功能输出 )
位置位 / 复位寄存器 (GPIOx_RR) 为对 GPIOx_ODR 寄存器提供位访问能力
口 A 或口的锁定机制 (GPIOx_LCKR) 配置
模拟功能
可选的口 A 和口 B 复用功能
每两个时钟周期快速切换口线值能力
允许 GPIO 口和外设引脚的高灵活性复用
三、GPIO 功能描述
根据数据手册中列出的每个 I/O 端口的特定硬件特征, GPIO 端口的每个位可以由软件分别配
置成多种模式:
●
浮空输入
●
上拉输入
●
下拉输入
●
模拟输入
●
具有上拉或下拉能力的开漏输出
●
具有上拉或下拉能力的推挽输出
●
复用功能且具有上拉或下拉能力的推挽输出
●
复用功能且具有上拉或下拉能力的开漏输出
复用功能输出
由于 STM32 的 GPIO 引脚具有第二功能,因此当使用复用功能的时候,也就是通过其他外设复用功能输出信号与 GPIO 数据寄存器一起连接到双 MOS 管电路的输入,其中梯形结构是用来选择使用复用功能还是普通 IO 口功能。例如我们使用 USART 串口通讯时,需要用到某个 GPIO 引脚作为通讯发送引脚,这个时候就可以把该 GPIO 引脚配置成 USART 串口复用功能,由串口外设控制该引脚,发送数据。
输入数据寄存器
输入数据寄存器是由 IO 口经过上下拉电阻、施密特触发器引入。当信号经过触发器,模拟信号将变为数字信号 0 或 1,然后存储在输入数据寄存器中,通过读取输入数据寄存器 GPIOx_IDR 就可以知道 IO 口的电平状态。
复用功能输入
此模式与复用功能输出类似。在复用功能输入模式时,GPIO 引脚的信号传输到 STM32 其他片上外设,由该外设读取引脚的状态。同样,如我们使用 USART 串口通讯时,需要用到某个 GPIO 引脚作为通讯接收引脚,这个时候就可以把该 GPIO 引脚配置成 USART 串口复用功能,使 USART 可以通过该通讯引脚的接收远端数据。
模拟输入输出
当 GPIO 引脚用于 ADC 采集电压的输入通道时,用作“模拟输入”功能,此时信号是不经过施密特触发器的,因为经过施密特触发器后信号只有 0、1 两种状态,ADC 外设要采集到原始的模拟信号,信号源输入必须在施密特触发器之前。类似地,当 GPIO 引脚用于 DAC 作为模拟电压输出通道时,此时作为“模拟输出”功能, DAC 的模拟信号输出就不经过双 MOS 管结构了,模拟信号直接通过管脚输出。
四、寄存器
GPIO 端口输出类型寄存器 (GPIOx_OTYPER) (x = A..D,F)
偏移地址:0x04
复位值: 0x0000 0000
五、程序(寄存器方式实现PB0点亮)
int main (void)
{
RCC->IOPERN |=1<<1;//打开GPIO的使能
GPIOB->MODER |=1<<0;//配置01输出模式(PB0的)
GPIOB->MODER &=~(1<<1);//配置01输出模式
GPIOB->OTYPER &=~(1<<0);//配置输出类型 推挽输出(PB0的)
GPIOB->OSPEEDR |=1<<0;//配置输出速度(PB0的)
GPIOB->OSPEEDR |=1<<1;//配置输出速度(PB0的)
while (1)
{
GPIOB->BRR=1<<0;//控制PB0输出低电平
}
}