今天學習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只能進行寄存器底層操作,這種函數庫的運用真心感覺強大方便。