一、GPIO简介
general purpose input output 通用输入输出口。有8种模式。
只要是通过高低电平进行的控制的电路,GPIO都可以使用。也可以模拟通信协议。
可以读取高低电压,数字输入。
二、stm32的GPIO结构

stm32的外设都挂载在APB2总线上,每个GPIO模块有16个引脚。
GPIO的模式介绍
三、在stm32中使用GPIO
流程:配置时钟线,打开需要使用的GPIO的时钟;对GPIO初始化;对GPIO进行读写操作。
1.配置时钟线
对于STM32的GPIO,都接在APB2时钟总线上,对其进行初始化。
RCC_APB2PeriphClockCmd()函数
参数一:要设置的GPIO类型
参数二:要设置的状态 开、关
2.GPIO初始化
标准库的初始化采用结构体的定义方式,对GPIO的模式、引脚、频率进行了规定。
GPIO_InitTypeDef
标准库规定的定义结构体类型
一般定义名称为:GPIO_InitStructure
GPIO的八大模式:
cpp
GPIO_Mode_AIN = 0x00, // 模拟输入模式
GPIO_Mode_IN_FLOATING = 0x04,// 浮空输入模式
GPIO_Mode_IPD = 0x28, // 下拉输入模式
GPIO_Mode_IPU = 0x48, // 上拉输入模式
GPIO_Mode_Out_PP = 0x10, // 推挽输出模式
GPIO_Mode_Out_OD = 0x14, // 开漏输出模式
GPIO_Mode_AF_PP = 0x18, // 复用推挽输出模式
GPIO_Mode_AF_OD = 0x1C // 复用开漏输出模式
GPIO_Init();
参数一:要操作的GPIO类型
参数二:定义的结构体,对GPIO的配置
3.GPIO的读写函数

四个函数功能为:将指定引脚设置为高电平, 将指定引脚设置为**低电平,**设置单个引脚为高 / 低电平,一次性设置整个 GPIO 端口的 16 个引脚电平。
四、示例代码
cpp
int main()
{
//LED流水灯
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//打开时钟
//初始化GPIO
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_All;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
while (1)
{
unsigned char i;
for ( i = 0; i < 8; i++)
{
GPIO_Write(GPIOA,~(0x0001<<(i)));
Delay_ms(500);
}
if (i==8)
{
i=0;
}
}
}
