GPIO 初始化理解

GPIO 初始化理解

1. GPIO 初始化理解
# include //包含头文件
# define //宏 替换,不进行语法检查
# define //宏名 ()  #define ABC (5+3)
# ifdef #endif // 预编译
// GPIO 初始化
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)
//可以理解 GPIO_TypeDef *GPIOx,GPIO_TypeDef 是结构体类型,类似int,*GPIOx 是指针,也就是GPIOx 地址
/*
功能描述:     根据GPIO_InitStruct中指定的参数初始化外设GPIOx寄存器
输入参数1:   GPIOx:x可以是A,B,C,D或者E,来选择GPIO外设
输入参数2:   GPIO_InitStruct:指向结构GPIO_InitTypeDef的指针,包含了外设GPIO的配置信息
本身两个参数(形参)都是指针类型,而第一个实参GBIOB本身在宏定义:#define GPIOB ((GPIO_TypeDef *) GPIOB_BASE)中定义的即为指针类型,所以直接写GPIOB。而第二个实参 GPIO_InitStructure定义为:GPIO_InitTypeDef GPIO_InitStructure; 只是个结构体变量,所以需要对其进行取地址&GPIO_InitStructure。 
*/
    
//头文件“stm32f10x_gpio.h”看到对GPIO_InitTypeDef  的定义, 用结构体GPIO_InitTypeDef 申明结构体变量 GPIO_InitStructure 
typedef struct
{
    uint16_t GPIO_Pin;
    GPIOSpeed_TypeDef GPIO_Speed;
    GPIOMode_TypeDef GPIO_Mode;
}GPIO_InitTypeDef;

/* 关于GPIOMode_TypeDef 定义*/
typedef enum
{ 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 //复用推挽
}GPIOMode_TypeDef;

/* 关于GPIOSpeed_TypeDef 定义*/
typedef enum
{
GPIO_Speed_10MHz = 1,
GPIO_Speed_2MHz,
GPIO_Speed_50MHz
}GPIOSpeed_TypeDef;

/* 通过GPIO 初始化实例来讲解结构体成员变量含义 */
GPIO_InitTypeDef GPIO_InitStructure;
/* 申明一个结构体,名字GPIO_InitStructure ,结构体原型由GPIO_InitTypeDef 确定*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; // LED0-->PB.5 端口配置, 结构体指针访问成员使用 -> 或者.
GPIO_InitStructure.GPIO_Mode= GPIO_Mode_Out_PP; // 推挽输出
GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz; //速度50MHZ
GPIO_Init(GPIOB, &GPIO_InitStructure);// 根据设定参数配置GPIO
/* GPIO_InitStructure 它的形参是一个结构体指针 GPIO_InitTypeDef*所以必须要对这个形参也就是 这个结构体取地址,GPIO_InitStructure->GPIO_Mode中 -> 就说明是对结构体操作,至于要不要这个取地址符 就要看你的实参 和形参 了 
形参是 地址   实参 是变量  那么就要对实参取地址 
形参是 地址   实参 是地址  或者
形参是 变量   实参 是变量 
那么就没有必要 取地址 */


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值