標(biāo)題:
解析STM32的庫(kù)函數(shù)
[打印本頁(yè)]
作者:
chuixuetop
時(shí)間:
2017-10-17 14:13
標(biāo)題:
解析STM32的庫(kù)函數(shù)
意法半導(dǎo)體在推出 STM32 微控制器之初,也同時(shí)提供了一套完整細(xì)致的固件開(kāi)發(fā)包,
里面包含了在 STM32 開(kāi)發(fā)過(guò)程中所涉及到的所有底層操作。通過(guò)在程序開(kāi)發(fā)中引入這樣的
固件開(kāi)發(fā)包,可以使開(kāi)發(fā)人員從復(fù)雜冗余的底層寄存器操作中解放出來(lái),將精力專(zhuān)注應(yīng)用程
序的開(kāi)發(fā)上,這便是ST 推出這樣一個(gè)開(kāi)發(fā)包的初衷。
但這對(duì)于許多從51/AVR這類(lèi)單片機(jī)的開(kāi)發(fā)轉(zhuǎn)到STM32 平臺(tái)的開(kāi)發(fā)人員來(lái)說(shuō),勢(shì)必有一
個(gè)不適應(yīng)的過(guò)程。因?yàn)槌绦蜷_(kāi)發(fā)不再是從寄存器層次起始,而要首先去熟悉 STM32 所提供
的固件庫(kù)。那是否一定要使用固件庫(kù)呢?當(dāng)然不是。但 STM32 微控制器的寄存器規(guī)?刹
是常見(jiàn)的8 位單片機(jī)可以比擬,若自己細(xì)細(xì)琢磨各個(gè)寄存器的意義,必然會(huì)消耗相當(dāng)?shù)臅r(shí)間,
并且對(duì)于程序后續(xù)的維護(hù),升級(jí)來(lái)說(shuō)也會(huì)增加資源的消耗。對(duì)于當(dāng)前“時(shí)間就是金錢(qián)”的行
業(yè)競(jìng)爭(zhēng)環(huán)境,無(wú)疑使用庫(kù)函數(shù)進(jìn)行 STM32 的產(chǎn)品開(kāi)發(fā)是更好的選擇。本文將通過(guò)一個(gè)簡(jiǎn)單
的例子對(duì)STM32的庫(kù)函數(shù)做一個(gè)簡(jiǎn)單的剖析。
以最常用的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 的程序開(kāi)發(fā)中經(jīng)常使用到的 GPIO初始化程序段,其功能是將 GPIOA.4 口
初始化為推挽輸出狀態(tài),并最大翻轉(zhuǎn)速率為50MHz。下面逐一分解:
首先是○ 1 ,該語(yǔ)句顯然定義了一個(gè)GPIO_InitTypeDef類(lèi)型的變量,名為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)體類(lèi)型同義字,其功能是定義一個(gè)結(jié)構(gòu)體,該結(jié)
構(gòu)體有三個(gè)成員分別是 u16 類(lèi)型的 GPIO_Pin、GPIOSpeed_TypeDef 類(lèi)型的 GPIO_Speed
和 GPIOMode_TypeDef 類(lèi) 型 的 GPIO_Mode 。 繼 續(xù) 探 查 GPIOSpeed_TypeDef 和
GPIOMode_TypeDef 類(lèi)型,在“stm32f10x_gpio.h”文件中找到對(duì) GPIOSpeed_TypeDef的
定義:
typedef enum
{
GPIO_Speed_10MHz = 1,
GPIO_Speed_2MHz,
GPIO_Speed_50MHz
}GPIOSpeed_TypeDef;
則可知GPIOSpeed_TypeDef 枚舉類(lèi)型同一只,其功能是定義一個(gè)枚舉類(lèi)型變量,該變量
可表示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”文件中找到對(duì)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, 下載次數(shù): 58)
下載附件
2017-10-17 16:47 上傳
完整的pdf格式文檔51黑下載地址(共6頁(yè)):
解析STM32的庫(kù)函數(shù).pdf
(310.69 KB, 下載次數(shù): 47)
2017-10-17 14:12 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者:
Frozen
時(shí)間:
2017-10-18 15:41
沙發(fā)!好帖必頂!
作者:
as13882679358
時(shí)間:
2017-11-2 11:34
好資料,很適合新手自學(xué)
作者:
老煙槍
時(shí)間:
2017-11-2 12:28
不錯(cuò),可以好好學(xué)一下
作者:
bayga456
時(shí)間:
2017-11-2 17:59
感謝分享
作者:
plj213
時(shí)間:
2019-8-28 13:23
感謝樓主分享。。。
作者:
wu_changzhou
時(shí)間:
2019-8-30 11:02
感謝樓主分享
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1