對GPIO_Init(GPIOx,&GPIO_InitStructure)的理解


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM