意法半導體在推出 STM32 微控制器之初,也同時提供了一套完整細致的固件開發包,
里面包含了在 STM32 開發過程中所涉及到的所有底層操作。通過在程序開發中引入這樣的
固件開發包,可以使開發人員從復雜冗余的底層寄存器操作中解放出來,將精力專注應用程
序的開發上,這便是ST 推出這樣一個開發包的初衷。
但這對于許多從51/AVR這類單片機的開發轉到STM32 平臺的開發人員來說,勢必有一
個不適應的過程。因為程序開發不再是從寄存器層次起始,而要首先去熟悉 STM32 所提供
的固件庫。那是否一定要使用固件庫呢?當然不是。但 STM32 微控制器的寄存器規模可不
是常見的8 位單片機可以比擬,若自己細細琢磨各個寄存器的意義,必然會消耗相當的時間,
并且對于程序后續的維護,升級來說也會增加資源的消耗。對于當前“時間就是金錢”的行
業競爭環境,無疑使用庫函數進行 STM32 的產品開發是更好的選擇。本文將通過一個簡單
的例子對STM32的庫函數做一個簡單的剖析。
以最常用的GPIO設備的初始化函數為例,如下程序段一:
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
這是一個在STM32 的程序開發中經常使用到的 GPIO初始化程序段,其功能是將 GPIOA.4 口
初始化為推挽輸出狀態,并最大翻轉速率為50MHz。下面逐一分解:
首先是○ 1 ,該語句顯然定義了一個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 是一個結構體類型同義字,其功能是定義一個結構體,該結
構體有三個成員分別是 u16 類型的 GPIO_Pin、GPIOSpeed_TypeDef 類型的 GPIO_Speed
和 GPIOMode_TypeDef 類 型 的 GPIO_Mode 。 繼 續 探 查 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 枚舉類型同一只,其功能是定義一個枚舉類型變量,該變量
可表示GPIO_Speed_10MHz、GPIO_Speed_2MHz 和GPIO_Speed_50MHz 三個含義(其中
GPIO_Speed_10MHz 已經定義為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;
0.png (210.8 KB, 下載次數: 58)
下載附件
2017-10-17 16:47 上傳
完整的pdf格式文檔51黑下載地址(共6頁):
解析STM32的庫函數.pdf
(310.69 KB, 下載次數: 47)
2017-10-17 14:12 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|