以下是我要讲解的GPIO初始化程序段,尽量讲解小白学习过程中不解的每一个方面。
代码讲解时我是根据一个程序边讲边跳入它的声明或是定义中讲解的。
voidLED_GPIO_Config(void)
{
/*定义一个GPIO_InitTypeDef类型的结构体*/
1. GPIO_InitTypeDef GPIO_InitStructure;
/*开启GPIOF的外设时钟*/
2. RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE);
/*选择要控制的GPIOF引脚*/
3. GPIO_InitStructure.GPIO_Pin =GPIO_Pin_9 | GPIO_Pin_10;
/*设置引脚模式为通用推挽输出*/
4. GPIO_InitStructure.GPIO_Mode =GPIO_Mode_OUT;
5. GPIO_InitStructure.GPIO_OType =GPIO_OType_PP;
/*设置引脚速率为100MHz */
6. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
7. GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
/*调用库函数,初始化GPIOF*/
8. GPIO_Init(GPIOF, &GPIO_InitStructure);
}
解读:
1:对于1来讲,正如注解所说,先定义一个结构体,结构体中有需要初始化的一些结构体变量,而这些变量又有什么意义呢?这是我们要思考的问题。
typedef struct
{
uint32_t GPIO_Pin; /*!< Specifies the GPIO pins to be configured.
This parameter can be any value of @ref GPIO_pins_define */
GPIOMode_TypeDef GPIO_Mode; /*!< Specifies the operating mode for the selected pins.
This parameter can be a value of @ref GPIOMode_TypeDef */
GPIOSpeed_TypeDef GPIO_Speed; /*!< Specifies the speed for the selected pins.
This parameter can be a value of @ref GPIOSpeed_TypeDef */
GPIOOType_TypeDef GPIO_OType; /*!< Specifies the operating output type for the selected pins.
This parameter can be a value of @ref GPIOOType_TypeDef */
GPIOPuPd_TypeDef GPIO_PuPd; /*!< Specifies the operating Pull-up/Pull down for the selected pins.
This parameter can be a value of @ref GPIOPuPd_TypeDef */
}GPIO_InitTypeDef;
这是结构体中定义的变量
再看下GPIOMode_TypeDef,这是一个枚举变量。而几个枚举元素的值其实代表了对相应的寄存器的赋值(相应的赋值对应相应的模式)。例如将GPIO模式寄存器赋值0x00,则表示引脚配置为输入模式。
typedef enum
{
GPIO_Mode_IN = 0x00, /*!< GPIO Input Mode */
GPIO_Mode_OUT = 0x01, /*!< GPIO Output Mode */
GPIO_Mode_AF