一、前言
本篇开始对STM32的GPIO在实际开发设计中的使用配置和技巧进行探讨,可以先去回顾下之前介绍的GPIO的相关理论基础知识包括基本结构,工作模式和寄存器原理。
了解过STM32的GPIO相关的理论知识,这样在应用GPIO开发过程中,能更好的理解GPIO的特点,应用起来会更加的得心应手。
后续将从以下图1中所示的几个方面对GPIO应用设计中的步骤展开介绍。本篇先介绍GPIO的基本API函数定义,配置初始化的流程,以及使用技巧;针对将GPIO的引脚用于外部中断的功能将作为单独的一篇进行详细的讨论介绍。
图1 GPIO应用设计
二、API函数
STM32有多种类型的库,本节所介绍的STM32的GPIO函数接口是STM32标准库的函数接口,接口总共分为4种类型,如图2所示。
图2 GPIO库函数接口分类
1、关键参数
在详细介绍各个API函数接口功能之前,我们需要对函数接口中使用到的关键的几个参数进行分析。
(1)、GPIO_TypeDef* GPIOx
这个参数是用于指定需要具体的GPIO端口号定义,参数的范围为GPIOA~GPIOK。
(2)、GPIO_InitTypeDef* GPIO_InitStruct
这个参数是GPIO端口需要初始化的功能参数的结构体指针,下面我们看看这个结构体的定义。
1 typedef struct 2 { 3 uint32_t GPIO_Pin; //GPIO端口的引脚 4 GPIOMode_TypeDef GPIO_Mode; //GPIO的端口模式 5 GPIOSpeed_TypeDef GPIO_Speed; //GPIO的输出速度频率 6 GPIOOType_TypeDef GPIO_OType; //GPIO输出时的类型 7 GPIOPuPd_TypeDef GPIO_PuPd; //GPIO上下拉电阻设置 8 }GPIO_InitTypeDef;

(a)、GPIO端口的引脚:可选范围为GPIO_Pin_0~GPIO_Pin_15,也可以选所有引脚GPIO_Pin_All。
(b)、GPIO的端口模式:用于设置GPIO的端口模式,可选的端口模式如下。
1 typedef enum 2 { 3 GPIO_Mode_IN = 0x00, //普通IO口输入 4 GPIO_Mode_OUT = 0x01, //普通IO口输出 5 GPIO_Mode_AF = 0x02, //管脚复用功能 6 GPIO_Mode_AN = 0x03 //模拟输入,用于ADC功能 7 }GPIOMode_TypeDef;

(c)、GPIO的输出速度频率:当GPIO引脚用于普通功能输出或复用功能输出时,GPIO的输出速度频率,可选的输出速率如下。
1 typedef enum 2 { 3 GPIO_Low_Speed = 0x00, //GPIO_Speed_2MHz 4 GPIO_Medium_Speed = 0x01, //<