STM32笔记系列第2章:GPIO详解

  GPIO(General Purpose Input Output)通用输入输出口 可配置为8种输入输出模式

其结构如下:

GPIO口挂在APB2总线上,在GPIO中又通过控制寄存器的后16位选取0~15号端口

 8种不同的模式: 

若开关接VDD则为上拉输入,接VSS则为下拉输入,都不接则为浮空输入 

 模拟输入(GPIO_Mode_AIN)
 浮空输入(GPIO_Mode_IN_FLOATING )
 上拉输入(GPIO_Mode_IPU)
 下拉输入(GPIO_Mode_IPD )
 开漏输出( GPIO_Mode_Out_OD )
 推挽输出( GPIO_Mode_Out_PP )
 复用开漏输出 ( GPIO_Mode_AF_OD )
 复用推挽输出( GPIO_Mode_AF_PP 

 模拟输入方式就类似于ADC,通过读取引脚输入转换成为数字信号

 若两个mos管都导通则为推挽输出,只有p-mos管导通为开漏输出

注意:在推挽输出模式下,高低电平都有驱动能力,开漏输出模式下,只有低电平有驱动能力

复用可以理解为 GPIO口被用作第二功能时的配置情况

配置常用函数:

总线时钟控制函数:

RCC_AHBPeriphClockCmd                        对AHB总线时钟进行命令

RCC_APB2PeriphClockCmd                      对APB2总线时钟进行命令

RCC_APB1PeriphClockCmd                      对APB1总线时钟进行命令

 GPIO配置函数:

GPIO_Init                对GPIO口初始化

GPIO_SetBits                对GPIO口中的,一个端口给高电平

GPIO_ResetBits                对GPIO口中的,一个端口给低电平

GPIO_WriteBit                对GPIO口中的,一个端口给写高低电平  

 GPIO_Write                对一整个GPIO口进写高低电平

GPIO_ReadInputDataBit                对GPIO口中的,一个端口读取输入(读取输入寄存器)

GPIO_ReadInputData                对一整个GPIO口读取输入(读取输入寄存器)

GPIO_ReadOutputDataBit                对GPIO口中的,一个端口读取输出(读取输出寄存器)

GPIO_ReadOutputData                 对一整个GPIO口读取输出(读取输出寄存器)

常用配置端口模式: 

(1) 浮空输入_IN_FLOATING ——浮空输入,可以做 KEY识别,RX1
(2)带上拉输入_IPU——IO内部上拉电阻输入
(3)带下拉输入_IPD—— IO内部下拉电阻输入
(4) 模拟输入_AIN ——应用 ADC模拟输入,或者 低功耗下省电
(5)开漏输出_OUT_OD ——IO输出0接GND,IO输出1,悬空,需要外接上拉电阻,才能实现输出高电平。当输出为1时,IO口的状态由上拉电阻拉高电平,但由于是开漏输出模式,这样IO口也就可以由外部电路改变为低电平或不变。可以读IO输入电平变化,实现C51的IO双向功能
(6)推挽输出_OUT_PP ——IO输出0-接GND, IO输出1 -接VCC,读输入值是未知的
(7)复用功能的推挽输出_AF_PP ——片内外设功能(I2C的SCL,SDA)
(8)复用功能的开漏输出_AF_OD——片内外设功能(TX1,MOSI,MISO.SCK.SS)

以配置led灯为例 :

void Led_Init(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	GPIO_InitTypeDef GPIO_InitStruct;
	GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;
	GPIO_InitStruct.GPIO_Pin=GPIO_Pin_1;
	GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&GPIO_InitStruct);
	GPIO_SetBits(GPIOA,GPIO_Pin_1|);
}

作者:小菜Ⅷ

物联沃分享整理
物联沃-IOTWORD物联网 » STM32笔记系列第2章:GPIO详解

发表回复