STM32F103的开发板有7组IO口,每组IO口有16个IO,总共这块板子有112个IO口
GPIO的工作模式主要有八种:4种输入方式,4种输出方式
(1)GPIO_Mode_AIN 模拟输入 (应用ADC模拟输入,或者低功耗下省电)
(2)GPIO_Mode_IN_FLOATING 浮空输入 (浮空就是浮在半空,可以被其他物体拉上或者拉下,可以用于按键输入)
(3)GPIO_Mode_IPD 下拉输入 (IO内部下拉电阻输入)
(4)GPIO_Mode_IPU 上拉输入 (IO内部上拉电阻输入)
(5)GPIO_Mode_Out_OD 开漏输出(开漏输出:输出端相当于三极管的集电极. 要得到高电平状态需要上拉电阻才行)
(6)GPIO_Mode_Out_PP 推挽输出 (推挽就是有推有拉电平都是确定的,不需要上拉和下拉,IO输出0-接GND, IO输出1 -接VCC,读输入值是未知的 )
(7)GPIO_Mode_AF_OD 复用开漏输出(片内外设功能(I2C的SCL,SDA))
(8)GPIO_Mode_AF_PP 复用推挽输出 (片内外设功能(TX1,MOSI,MISO.SCK.SS))
GPIO的初始化步骤
1.使能GPIOX时钟
2.指明GPIOX的位,这一位的速度大小以及格式
3.调用GPIOX的初始化函数,进行初始化
4.调用GPIO-setbits函数,进行相应位的置位
example:LED_Init的GPIO初始化
/************************************************************/
//对于单个GPIO口的初始化
GPIO_InitTypeDef GPIO_InitStructure;
//使能GPIOA时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
//设置GPIOA参数:管脚,工作模式,反转速率
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
//调用初始化函数,根据设定参数初始化
GPIO_Init(GPIOA,&GPIO_InitStructure)
//调用GPIO_SetBits函数置位GPIO的相应的引脚
GPIO_SetBits(GPIOA,GPIO_PIN_0);
/************************************************************/
//对于多个GPIO口的初始化
GPIO_InitTypeDef GPIO_InitStructure;
//使能GPIOA,GPIOE时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);
//设置GPIOA,GPIOE参数:管脚,工作模式,反转速率,
//调用初始化函数,根据设定参数初始化
//调用GPIO_SetBits函数置位GPIO的相应的引脚
//先设置GPIOA
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
GPIO_InitStructure.GPIO_Pin_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_SetBits(GPIOA,GPIO_Pin_4);
//再设置GPIOB
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStructure.GPIO_Pin_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOE,&GPIO_InitStructure);
GPIO_SetBits(GPIOE,GPIO_PIN_3);