1.GPIO_Init这个函数主要是用于GPIO的初始化，GPIOx和GPIO_Pin选中某个引脚，GPIO_Speed决定GPIO的速度，GPIO的工作状态主要由GPIO_Mode决定，其工作状态是初始化的关键。GPIO_Pin 引脚：GPIO_Speed 引脚速率： GPIO_Speed_10MHz 最高输出速率10MHz GPIO_Speed_2MHz 最高输出速率2MHz GPIO_Speed_50MHz 最高输出速率50MHzGPIO_Mode：设置选中引脚的工作状态 GPIO_Mode_AIN = 0x0,//模拟输入 GPIO_Mode_IN_FLOATING = 0x04,//浮空输入 GPIO_Mode_IPD = 0x28,//下拉输入 GPIO_Mode_IPU = 0x48,//上拉输入 GPIO_Mode_Out_OD = 0x14,//开漏输入 GPIO_Mode_Out_PP = 0x10,//推挽输入 GPIO_Mode_AF_OD = 0x1C,//复用开漏输入 GPIO_Mode_AF_PP = 0x18//复用推挽输入 一、工作模式工作模式可能有不同的分类，但本质上相差不大。1 通用功能输入输出（GPIO）1.输入浮空2.输入上拉3.输入下拉4.开漏输出5.推挽式输出2 复用功能输入输出（AFIO）1.复用输入功能（端口必须配置为输入模式（浮空，上拉，下拉））2.模拟输入：用于ADC模拟输入3.推挽式复用输出功能：如I2C的SCL，SDA4.开漏复用输出功能：如SPI的SCK，MOSI，MISO5.双向复用功能：输出时必须配置为复用功能输出模式（推挽或开漏），倏然是，输入驱动器被配置为浮空输入模式3 工作模式的解释与使用1、模拟输入： 顾名思义，即为输入模拟信号2、浮空输入：I/O口的状态是不确定的，完全由外部输入决定3、下拉输入：在没有信号输入的时候默认输入低电平4、上拉输入：在没有信号输入的时候默认输入高电平5、开漏输出：IO输出0接GND，IO输出1，悬空，需要外接上拉电阻，才能实现输出高电平。当输出为1时，IO口的状态由上拉电阻拉高电平，但由于是开漏输出模式，这样IO口也就可以由外部电路改变为低电平或不变。可以读IO输入电平变化，实现IO双向功能6、推挽输出：IO输出0-接GND， IO输出1 -接VCC，读输入值是未知的7、复 用：理解为GPIO口被用作第二功能时的配置情况通常有5种方式使用某个引脚功能，它们的配置方式如下：1）作为普通GPIO输入：根据需要配置该引脚为浮空输入、带弱上拉输入或带弱下拉输入，同时不要使能该引脚对应的所有复用功能模块。2）作为普通GPIO输出：根据需要配置该引脚为推挽输出或开漏输出，同时不要使能该引脚对应的所有复用功能模块。3）作为普通模拟输入：配置该引脚为模拟输入模式，同时不要使能该引脚对应的所有复用功能模块。4）作为内置外设的输入：根据需要配置该引脚为浮空输入、带弱上拉输入或带弱下拉输入，同时使能该引脚对应的某个复用功能模块。5）作为内置外设的输出：根据需要配置该引脚为复用推挽输出或复用开漏输出，同时使能该引脚对应的所有复用功能模块。2.GPIO_SetBits，GPIO_ResetBits[scode type="red"]GPIO_SetBits 拉高引脚输出电平[/scode]GPIO_SetBits(GPIOE, GPIO_Pin_12); // PE12 输出高电平 GPIO_ResetBits(GPIOE, GPIO_Pin_12); // PE12 输出低电平 [scode type="blue"]GPIO_ResetBits 拉低引脚输出电平[/scode]3 GPIO_PinRemapConfig说这个之前有必要说一下STM32的端口复用与重映射。默认复用不需要AFIO，重映射才需要AFIO复用STM32有很多的内置外设，这些外设的外部引脚都是与GPIO复用的。也就是说，一个GPIO如果可以复用为内置外设的功能引脚，那么当这个GPIO作为内置外设使用的时候，就叫做复用。例如串口1的发送接收引脚是PA9,PA10，当我们把PA9,PA10不用作GPIO，而用做复用功能串口1的发送接收引脚的时候，叫端口复用。重映射每个内置外设都有若干个输入输出引脚，一般这些引脚的输出端口都是固定不变的，为了让设计工程师可以更好地安排引脚的走向和功能，在STM32中引入了外设引脚重映射的概念，即一个外设的引脚除了具有默认的端口外，还可以通过设置重映射寄存器的方式，把这个外设的引脚映射到其它的端口。重映射分为部分重映射和完全重映射。