GPIO(通用输入输出口)
所有GPIO口都是挂载在APB2外设总线上,GPIO外设名称按照GPIOA、GPIOB、GPIOC来命名。 每个GPIO外设有16个引脚(0~15),GPIOA的第0号引脚称作PA0。
八种输入输出模式
1.浮空输入:可读取引脚高低电平,若引脚悬空,高低电平不确定。
2.上拉输入:可读取引脚高低电平,引脚悬空时,默认高电平。
3.下拉输入:可读取引脚高低电平,引脚悬空时,默认低电平。
4.模拟输入:GPIO无效,引脚直接接入内部ADC,为ADC模数转换器专属配置。
5.开漏输出:可输出引脚电平,低电平有效。
6.推挽输出:可输出引脚电平,高低电平均有效。
7.复用开漏输出:引脚电平由片上外设(单片机上的外围设备)控制,低电平有效。
8.复用推挽输出:引脚电平由片上外设控制,高低电平有均效。
AIN(Analog in) 模拟输入
IN_FLOATING 浮空输入
IPD(In Pull Down) 下拉输入
IPU(In Pull Up) 上拉输入
Out_OD(out open drain) 开漏输出
Out_PP(out push pull) 推挽输出
AF_OD(Alt open drrain) 复用开漏
AF_PP(Alt push pull) 复用推挽
使用GPIO的3个步骤
1.使用RCC开启GPIO时钟
2.使用GPIO_Init函数初始化GPIO
3.使用输出或输入函数控制GPIO口
RCC常用库函数
1.RCC AHB外设时钟控制
2.RCC APB2外设时钟控制
3.RCC APB1外设时钟控制
void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState);
void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);
void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);
以RCC_APB2PeriphClockCmd()为例:第一个参数选择下列的外设,第二个参数使能或失能(ENABLE/DISABLE)
RCC_APB2Periph_AFIO, RCC_APB2Periph_GPIOA, RCC_APB2Periph_GPIOB,
RCC_APB2Periph_GPIOC, RCC_APB2Periph_GPIOD, RCC_APB2Periph_GPIOE,
RCC_APB2Periph_GPIOF, RCC_APB2Periph_GPIOG, RCC_APB2Periph_ADC1,
RCC_APB2Periph_ADC2, RCC_APB2Periph_TIM1, RCC_APB2Periph_SPI1,
RCC_APB2Periph_TIM8, RCC_APB2Periph_USART1, RCC_APB2Periph_ADC3,
RCC_APB2Periph_TIM15, RCC_APB2Periph_TIM16, RCC_APB2Periph_TIM17,
RCC_APB2Periph_TIM9, RCC_APB2Periph_TIM10, RCC_APB2Periph_TIM11
GPIO库函数
void GPIO_DeInit(GPIO_TypeDef* GPIOx);//所指定的GPIO外设将会复位
void GPIO_AFIODeInit(void);//复位AFIO外设
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
//用结构体的参数数值化GPIO口
void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct);
//把结构