一、引言
我們在學(xué)習(xí)32的過程中,固件庫是個(gè)必不可少的東西,因?yàn)槌绦蜷_發(fā)不再是從寄存器層次起始,而要首先去熟悉 STM32 所提供的固件庫。那是否一定要使用固件庫呢?當(dāng)然不是。但 STM32 微控制器的寄存器規(guī)模可不 是常見的 8 位單片機(jī)可以比擬,若自己細(xì)細(xì)琢磨各個(gè)寄存器的意義,必然會(huì)消耗相當(dāng)?shù)臅r(shí)間, 并且對于程序后續(xù)的維護(hù),升級(jí)來說也會(huì)增加資源的消耗。
二、正題
以最常用的 GPIO 設(shè)備的初始化函數(shù)為例,如下程序段一:
GPIO_InitTypeDef GPIO_InitStructure; ○1
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; ○2
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; ○3
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; ○4
GPIO_Init(GPIOA , &GPIO_InitStructure); ○5
這是一個(gè)在 STM32 的程序開發(fā)中經(jīng)常使用到的 GPIO 初始化程序段,其功能是將 GPIOA.4 口 初始化為推挽輸出狀態(tài),并最大翻轉(zhuǎn)速率為 50MHz。下面逐一分解:
首先是O1 ,該語句顯然定義了一個(gè) GPIO_InitTypeDef 類型的變量,名為 GPIO_InitStructure,找出GPIO_InitTypeDef的原型位于
“stm32f10x_gpio.h”文件,原型為如下:
typedef struct
{
u16 GPIO_Pin;
GPIOSpeed_TypeDef GPIO_Speed;
GPIOMode_TypeDef GPIO_Mode;
}GPIO_InitTypeDef;
由此可知 GPIO_InitTypeDef 是一個(gè)結(jié)構(gòu)體類型同義字,其功能是定義一個(gè)結(jié)構(gòu)體,該結(jié) 構(gòu)體有三個(gè)成員分別是 u16 類型的 GPIO_Pin、GPIOSpeed_TypeDef 類型的 GPIO_Speed和 GPIOMode_TypeDef 類 型 的 GPIO_Mode 。繼 續(xù) 探 查 GPIOSpeed_TypeDef 和GPIOMode_TypeDef 類型,在“stm32f10x_gpio.h”文件中找到對 GPIOSpeed_TypeDef 的 定義:
typedef enum
{
GPIO_Speed_10MHz = 1,
GPIO_Speed_2MHz,
GPIO_Speed_50MHz
}GPIOSpeed_TypeDef;
則可知 GPIOSpeed_TypeDef 枚舉類型同一只,其功能是定義一個(gè)枚舉類型變量,該變量 可表示 GPIO_Speed_10MHz、GPIO_Speed_2MHz 和 GPIO_Speed_50MHz 三個(gè)含義(其中GPIO_Speed_10MHz 已經(jīng)定義為 1,讀者必須知道 GPIO_Speed_2MHz 則依次被編譯器賦予 2,而 GPIO_Speed_50MHz 為 3)。同樣也在“stm32f10x_gpio.h”文件中找到對 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;
這同樣是一個(gè)枚舉類型同義字,其成員有 GPIO_Mode_AIN、GPIO_Mode_AF_OD 等(也 可以輕易判斷出這表示 GPIO 設(shè)備的工作模式)。至此對程序段一的O1 解析可以做一個(gè)總結(jié):該行定義一個(gè)結(jié)構(gòu)體類型的變量 GPIO_InitStructure,并且該結(jié)構(gòu)體有 3 個(gè)成員,分別為 GPIO_Pin、GPIO_Speed 和 GPIO_Mode,并且 GPIO_Pin 表示 GPIO 設(shè)備引腳 GPIO_Speed 表示 GPIO 設(shè)備速率和 GPIO_Mode 表示 GPIO 設(shè)備工作模式。
-
寄存器
+關(guān)注
關(guān)注
31文章
5325瀏覽量
120052 -
STM32
+關(guān)注
關(guān)注
2266文章
10876瀏覽量
354922 -
固件庫
+關(guān)注
關(guān)注
2文章
97瀏覽量
14926
發(fā)布評(píng)論請先 登錄
相關(guān)推薦
評(píng)論