1. 將硬體環境設定為宏定義,方便硬體環境修改:
設定包含三項:GPIO連接埠、GPIO引腳號和GPIO連接埠時鐘。樣本如下
#define LED1_PIN GPIO_Pin_10#define LED1_GPIO_PORT GPIOH#define LED1_GPIO_CLK RCC_AHB1Periph_GPIOH#define LED2_PIN GPIO_Pin_11#define LED2_GPIO_PORT GPIOH#define LED2_GPIO_CLK RCC_AHB1Periph_GPIOH#define LED3_PIN GPIO_Pin_11#define LED3_GPIO_PORT GPIOD#define LED3_GPIO_CLK RCC_AHB1Periph_GPIOD
其中GPIO_Pin_10 /GPIO_Pin_11、GPIOH / GPIOD 、RCC_AHB1Periph_GPIOH / RCC_AHB1Periph_GPIOD這些都是STM32庫中的宏定義。
2. 開啟GPIO外設時鐘
RCC_AHB1PeriphClockCmd (LED1_GPIO_CLK | LED2_GPIO_CLK | LED3_GPIO_CLK, ENABLE);
將要使用的GPIO連接埠時鐘全部開啟。
3. 初始化GPIO
3.1定義一個GPIO初始化結構體對象
GPIO_InitTypeDefGPIO_InitStructure;
3.2通過該結構體對象設定GPIO工作模式
a. 選擇要控制的引腳:
GPIO_InitStructure.GPIO_Pin =LED1_PIN;
b. 設定引腳輸入、輸出出模式:
GPIO_InitStructure.GPIO_Mode =GPIO_Mode_OUT;//設定引腳為輸出模式
c. 設定引腳輸出類型:
GPIO_InitStructure.GPIO_OType =GPIO_OType_PP;//設定引腳為推挽模式
d. 設定引腳上拉模式:
GPIO_InitStructure.GPIO_PuPd =GPIO_PuPd_UP;//設定引腳為上拉
e. 設定引腳速率:
GPIO_InitStructure.GPIO_Speed =GPIO_Speed_2MHz; //設定引腳速率為2Mhz
3.3 調用庫函數使用上面的初始化結構體對象,初始化GPIO
GPIO_Init(LED1_GPIO_PORT, &GPIO_InitStructure);
以上,一個連接埠的初始配置即已完成。
如果有多個GPIO需要初始化,則根據連接埠工作模式可歸類一起初始化。
如LED2_PIN和LED3_PIN工作方式與LED1_PIN一樣,則初始化LED2_PIN和LED3_PIN可以在上面的基礎上,如下設定:
/*選擇要控制的GPIO引腳*/
GPIO_InitStructure.GPIO_Pin =LED2_PIN;
GPIO_Init(LED2_GPIO_PORT, &GPIO_InitStructure);
/*選擇要控制的GPIO引腳*/
GPIO_InitStructure.GPIO_Pin =LED3_PIN;
GPIO_Init(LED3_GPIO_PORT, &GPIO_InitStructure);
即,只要重新給初始化結構體的pin腳成員變數賦新值,然後調用初始化庫函數GPIO_Init即可(注意,函數第一個參數GPIO連接埠要對應改變)。步驟3.2下的b、c、d、e可省略。
如果連接埠工作模式不一樣時,可多定義幾個初始化結構體,將相同模式的歸為一類,步驟3.2中統一設定,避免重複編寫代碼。
參考《零死角玩轉STM32-F49挑戰者》常式如下: