您的位置:首页
对GPIO_Init(GPIOx,&GPIO_InitStructure)的理解
2017-02-15 10:27
661 查看
今天学习stm32流水灯程序的时候,看到了“GPIO_Init(GPIOB, &GPIO_InitStructure)”这个函数,参数1”GPIOB“很好理解,就是GPIO的外设口B(也可以是A,C,D,E),第二个参数有点不理解,于是查看了下库函数手册,该函数原型是这样的:
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)
功能描述: 根据GPIO_InitStruct中指定的参数初始化外设GPIOx寄存器
输入参数1: GPIOx:x可以是A,B,C,D或者E,来选择GPIO外设
输入参数2: GPIO_InitStruct:指向结构GPIO_InitTypeDef的指针,包含了外设GPIO的配置信息
由此我们知道第二个参数“&GPIO_InitStructure”包含的是外设GPIO的配置信息,主函数开头我们进行了这样一个私有数据声明:
GPIO_InitTypeDef GPIO_InitStructure;
顺藤摸瓜,我们在头文件“stm32f10x_gpio.h”看到对GPIO_InitTypeDef 的定义:
typedef struct
{
uint32_t GPIO_Pin;
GPIOMode_TypeDef GPIO_Mode;
GPIOSpeed_TypeDef GPIO_Speed;
GPIOOType_TypeDef GPIO_OType;
GPIOPuPd_TypeDef GPIO_PuPd;
}GPIO_InitTypeDef;
在这个之前,我已经对GPIO_InitTypeDef中的各个参数进行了定义,对应的正是void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)输入参数2的描述“指向结构GPIO_InitTypeDef的指针,包含了外设GPIO的配置信息”。
至此,我们便可以理解GPIO_Init初始化寄存器的大概步骤了,即将你事先设定好的参数告诉你要用到的外设(或者说外设对应的寄存器。stm32强大的库函数可以让你摆脱复杂冗余的底层寄存器操作。)很简单有木有,相对51只能进行寄存器底层操作,这种函数库的运用真心感觉强大方便。
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)
功能描述: 根据GPIO_InitStruct中指定的参数初始化外设GPIOx寄存器
输入参数1: GPIOx:x可以是A,B,C,D或者E,来选择GPIO外设
输入参数2: GPIO_InitStruct:指向结构GPIO_InitTypeDef的指针,包含了外设GPIO的配置信息
由此我们知道第二个参数“&GPIO_InitStructure”包含的是外设GPIO的配置信息,主函数开头我们进行了这样一个私有数据声明:
GPIO_InitTypeDef GPIO_InitStructure;
顺藤摸瓜,我们在头文件“stm32f10x_gpio.h”看到对GPIO_InitTypeDef 的定义:
typedef struct
{
uint32_t GPIO_Pin;
GPIOMode_TypeDef GPIO_Mode;
GPIOSpeed_TypeDef GPIO_Speed;
GPIOOType_TypeDef GPIO_OType;
GPIOPuPd_TypeDef GPIO_PuPd;
}GPIO_InitTypeDef;
在这个之前,我已经对GPIO_InitTypeDef中的各个参数进行了定义,对应的正是void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)输入参数2的描述“指向结构GPIO_InitTypeDef的指针,包含了外设GPIO的配置信息”。
至此,我们便可以理解GPIO_Init初始化寄存器的大概步骤了,即将你事先设定好的参数告诉你要用到的外设(或者说外设对应的寄存器。stm32强大的库函数可以让你摆脱复杂冗余的底层寄存器操作。)很简单有木有,相对51只能进行寄存器底层操作,这种函数库的运用真心感觉强大方便。
相关文章推荐
- 对GPIO_Init(GPIOx,&GPIO_InitStructure)的理解
- 'init(start:end:)' is deprecated: it will be removed in Swift 3. Use the '..<' operator
- void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)的一些理解
- failed to copy 'init.rc' to '//init.rc': Read-only file system
- void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct) 理解
- stm32 GPIO配置以及什么时候用 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU
- 编译报request for member '***' in something not a structure or union的原因,以及解决方法
- LWUIT中的进度条实现(Progress Indicator & Threads In LWUIT by Shai Almog)
- Get "Server Down" when retrieve the channel list in sopcast, how to solve it?
- Android Init Language,init.rc的语法结构说明
- Can't update table 'tbl' in stored function/trigger because it is already used by statement which invoked this stored function/t
- I did an SDK update last night and it moved adb.exe. In its place it left a file called "adb_has_mov
- userinit.exe usrinit.exe 机器狗问题
- Announcing Microsoft All-In-One Script Framework - IT Pros' Time Saver
- A*- not a star in the space, it's on you hands
- 各种initcall的执行先后顺序(module_init、postcore_initcall、arch_initcall、subsys_initcall、 fs_initcall)
- ADODB使用excel的"Cannot modify the design of table 'xxxx'. It is in a read-only database"的问题
- 我理解keso的"东拉西扯:不要听用户的" -对牛乱弹琴 | Playin' with IT
- 数据结构算法经常看到的形如"int InitStack(Stack &S)"和"int Empty(Stack S)"的解释
- Finding a needle in Haystack:Facebook's photo storage的理解