STM32固件庫(kù)使用手冊(cè)的中文翻譯;_第1頁(yè)
STM32固件庫(kù)使用手冊(cè)的中文翻譯;_第2頁(yè)
STM32固件庫(kù)使用手冊(cè)的中文翻譯;_第3頁(yè)
STM32固件庫(kù)使用手冊(cè)的中文翻譯;_第4頁(yè)
STM32固件庫(kù)使用手冊(cè)的中文翻譯;_第5頁(yè)
已閱讀5頁(yè),還剩64頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、 um0427用戶(hù)手冊(cè) 32位基于arm微控制器stm32f101xx與stm32f103xx 固件函數(shù)庫(kù) 介紹本手冊(cè)介紹了32位基于arm微控制器stm32f101xx與stm32f103xx的固件函數(shù)庫(kù)。該函數(shù)庫(kù)是一個(gè)固件函數(shù)包,它由程序、數(shù)據(jù)結(jié)構(gòu)和宏組成,包括了微控制器所有外設(shè)的性能特征。該函數(shù)庫(kù)還包括每一個(gè)外設(shè)的驅(qū)動(dòng)描述和應(yīng)用實(shí)例。通過(guò)使用本固件函數(shù)庫(kù),無(wú)需深入掌握細(xì)節(jié),用戶(hù)也可以輕松應(yīng)用每一個(gè)外設(shè)。因此,使用本固態(tài)函數(shù)庫(kù)可以大大減少用戶(hù)的程序編寫(xiě)時(shí)間,進(jìn)而降低開(kāi)發(fā)成本。每個(gè)外設(shè)驅(qū)動(dòng)都由一組函數(shù)組成,這組函數(shù)覆蓋了該外設(shè)所有功能。每個(gè)器件的開(kāi)發(fā)都由一個(gè)通用api (applicatio

2、n programming interface 應(yīng)用編程界面)驅(qū)動(dòng),api對(duì)該驅(qū)動(dòng)程序的結(jié)構(gòu),函數(shù)和參數(shù)名稱(chēng)都進(jìn)行了標(biāo)準(zhǔn)化。所有的驅(qū)動(dòng)源代碼都符合“strict ansi-c”標(biāo)準(zhǔn)(項(xiàng)目于范例文件符合擴(kuò)充ansi-c標(biāo)準(zhǔn))。我們已經(jīng)把驅(qū)動(dòng)源代碼文檔化,他們同時(shí)兼容misra-c 2004標(biāo)準(zhǔn)(根據(jù)需要,我們可以提供兼容矩陣)。由于整個(gè)固態(tài)函數(shù)庫(kù)按照“strict ansi-c”標(biāo)準(zhǔn)編寫(xiě),它不受不同開(kāi)發(fā)環(huán)境的影響。僅對(duì)話(huà)啟動(dòng)文件取決于開(kāi)發(fā)環(huán)境。該固態(tài)函數(shù)庫(kù)通過(guò)校驗(yàn)所有庫(kù)函數(shù)的輸入值來(lái)實(shí)現(xiàn)實(shí)時(shí)錯(cuò)誤檢測(cè)。該動(dòng)態(tài)校驗(yàn)提高了軟件的魯棒性。實(shí)時(shí)檢測(cè)適合于用戶(hù)應(yīng)用程序的開(kāi)發(fā)和調(diào)試。但這會(huì)增加了成本,可以在最

3、終應(yīng)用程序代碼中移去,以?xún)?yōu)化代碼大小和執(zhí)行速度。想要了解更多細(xì)節(jié),請(qǐng)參閱section 2.5。因?yàn)樵摴碳?kù)是通用的,并且包括了所有外設(shè)的功能,所以應(yīng)用程序代碼的大小和執(zhí)行速度可能不是最優(yōu)的。對(duì)大多數(shù)應(yīng)用程序來(lái)說(shuō),用戶(hù)可以直接使用之,對(duì)于那些在代碼大小和執(zhí)行速度方面有嚴(yán)格要求的應(yīng)用程序,該固件庫(kù)驅(qū)動(dòng)程序可以作為如何設(shè)置外設(shè)的一份參考資料,根據(jù)實(shí)際需求對(duì)其進(jìn)行調(diào)整。 此份固件庫(kù)用戶(hù)手冊(cè)的整體架構(gòu)如下:n 定義,文檔約定和固態(tài)函數(shù)庫(kù)規(guī)則。 n 固態(tài)函數(shù)庫(kù)概述(包的內(nèi)容,庫(kù)的架構(gòu)),安裝指南,庫(kù)使用實(shí)例。n 固件庫(kù)具體描述:設(shè)置架構(gòu)和每個(gè)外設(shè)的函數(shù)。 stm32f101xx和stm32f103xx在

4、整個(gè)文檔中被寫(xiě)作stm32f101x。譯文英文原版為um0427 oct. 2007 rev 2, 譯文僅供參考,與英文版沖突的,以英文版為準(zhǔn)文檔和庫(kù)規(guī)范1.文檔和庫(kù)規(guī)范本用戶(hù)手冊(cè)和固態(tài)函數(shù)庫(kù)按照以下章節(jié)所描述的規(guī)范編寫(xiě)。1.1 縮寫(xiě)table 1. 本文檔所有縮寫(xiě)定義縮寫(xiě)外設(shè)/單元adc模數(shù)轉(zhuǎn)換器bkp備份寄存器can控制器局域網(wǎng)模塊dma直接內(nèi)存存取控制器exti外部中斷事件控制器flash閃存存儲(chǔ)器gpio通用輸入輸出i2c內(nèi)部集成電路iwdg獨(dú)立看門(mén)狗nvic嵌套中斷向量列表控制器pwr電源/功耗控制rcc復(fù)位與時(shí)鐘控制器rtc實(shí)時(shí)時(shí)鐘spi串行外設(shè)接口systick系統(tǒng)嘀嗒定時(shí)器ti

5、m通用定時(shí)器tim1高級(jí)控制定時(shí)器usart通用同步異步接收發(fā)射端wwdg窗口看門(mén)狗1.2 命名規(guī)則固態(tài)函數(shù)庫(kù)遵從以下命名規(guī)則:ppp表示任一外設(shè)縮寫(xiě),例如:adc。更多縮寫(xiě)相關(guān)信息參閱章節(jié)1.1 縮寫(xiě)。系統(tǒng)、源程序文件和頭文件命名都以“stm32f10x_”作為開(kāi)頭,例如:stm32f10x_conf.h。常量?jī)H被應(yīng)用于一個(gè)文件的,定義于該文件中;被應(yīng)用于多個(gè)文件的,在對(duì)應(yīng)頭文件中定義。所有常量都由英文字母大寫(xiě)書(shū)寫(xiě)。寄存器作為常量處理。他們的命名都由英文字母大寫(xiě)書(shū)寫(xiě)。在大多數(shù)情況下,他們采用與縮寫(xiě)規(guī)范與本用戶(hù)手冊(cè)一致。外設(shè)函數(shù)的命名以該外設(shè)的縮寫(xiě)加下劃線(xiàn)為開(kāi)頭。每個(gè)單詞的第一個(gè)字母都由英文字

6、母大寫(xiě)書(shū)寫(xiě),例如:spi_senddata。在函數(shù)名中,只允許存在一個(gè)下劃線(xiàn),用以分隔外設(shè)縮寫(xiě)和函數(shù)名的其它部分。名為ppp_init的函數(shù),其功能是根據(jù)ppp_inittypedef中指定的參數(shù),初始化外設(shè)ppp,例如tim_init.名為ppp_deinit的函數(shù),其功能為復(fù)位外設(shè)ppp的所有寄存器至缺省值,例如tim_deinit.名為ppp_structinit的函數(shù),其功能為通過(guò)設(shè)置ppp_inittypedef 結(jié)構(gòu)中的各種參數(shù)來(lái)定義外設(shè)的功能,例如:usart_structinit.名為ppp_cmd的函數(shù),其功能為使能或者失能外設(shè)ppp,例如: spi_cmd.名為ppp_it

7、config的函數(shù),其功能為使能或者失能來(lái)自外設(shè)ppp某中斷源,例如: rcc_itconfig.名為ppp_dmaconfig的函數(shù),其功能為使能或者失能外設(shè)ppp的dma接口,例如:tim1_dmaconfig.用以配置外設(shè)功能的函數(shù),總是以字符串“config”結(jié)尾,例如gpio_pinremapconfig.名為ppp_getflagstatus的函數(shù),其功能為檢查外設(shè)ppp某標(biāo)志位被設(shè)置與否,例如:i2c_getflagstatus.名為ppp_clearflag的函數(shù),其功能為清除外設(shè)ppp標(biāo)志位,例如:i2c_clearflag.名為ppp_getitstatus的函數(shù),其功能為

8、判斷來(lái)自外設(shè)ppp的中斷發(fā)生與否,例如:i2c_getitstatus.名為ppp_clearitpendingbit的函數(shù),其功能為清除外設(shè)ppp中斷待處理標(biāo)志位,例如: i2c_clearitpendingbit.1.3 編碼規(guī)則本章節(jié)描述了固態(tài)函書(shū)庫(kù)的編碼規(guī)則。1.3.1變量固態(tài)函數(shù)庫(kù)定義了24個(gè)變量類(lèi)型,他們的類(lèi)型和大小是固定的。在文件stm32f10x_type.h中我們定義了這些變量:typedef signed long s32;typedef signed short s16;typedef signed char s8;typedef signed long const sc

9、32; /* read only */typedef signed short const sc16; /* read only */typedef signed char const sc8; /* read only */typedef volatile signed long vs32;typedef volatile signed short vs16;typedef volatile signed char vs8;typedef volatile signed long const vsc32; /* read only */typedef volatile signed shor

10、t const vsc16; /* read only */typedef volatile signed char const vsc8; /* read only */typedef unsigned long u32;typedef unsigned short u16;typedef unsigned char u8;typedef unsigned long const uc32; /* read only */typedef unsigned short const uc16; /* read only */typedef unsigned char const uc8; /* r

11、ead only */typedef volatile unsigned long vu32;typedef volatile unsigned short vu16;typedef volatile unsigned char vu8;typedef volatile unsigned long const vuc32; /* read only */typedef volatile unsigned short const vuc16; /* read only */typedef volatile unsigned char const vuc8; /* read only */1.3.

12、2布爾型在文件stm32f10x_type.h中,布爾形變量被定義如下:typedef enumfalse = 0,true = !false bool;1.3.3 標(biāo)志位狀態(tài)類(lèi)型在文件stm32f10x_type.h中,我們定義標(biāo)志位類(lèi)型(flagstatus type)的2個(gè)可能值為“設(shè)置”與“重置”(set or reset)。typedef enumreset = 0, set = !reset flagstatus;1.3.4 功能狀態(tài)類(lèi)型在文件stm32f10x_type.h中,我們定義功能狀態(tài)類(lèi)型(functionalstate type)的2個(gè)可能值為“使能”與“失能”(ena

13、ble or disable)。typedef enumdisable = 0,enable = !disable functionalstate;1.3.5 錯(cuò)誤狀態(tài)類(lèi)型在文件stm32f10x_type.h中,我們錯(cuò)誤狀態(tài)類(lèi)型類(lèi)型(errorstatus type)的2個(gè)可能值為“成功”與“出錯(cuò)”(success or error)。typedef enum error = 0,success = !error errorstatus;1.3.6 外設(shè)用戶(hù)可以通過(guò)指向各個(gè)外設(shè)的指針訪(fǎng)問(wèn)各外設(shè)的控制寄存器。這些指針?biāo)赶虻臄?shù)據(jù)結(jié)構(gòu)與各個(gè)外設(shè)的控制寄存器布局一一對(duì)應(yīng)。外設(shè)控制寄存器結(jié)構(gòu)文件st

14、m32f10x_map.h包含了所有外設(shè)控制寄存器的結(jié)構(gòu),下例為spi寄存器結(jié)構(gòu)的聲明:/*- serial peripheral interface -*/typedef structvu16 cr1; u16 reserved0;vu16 cr2;u16 reserved1;vu16 sr;u16 reserved2;vu16 dr;u16 reserved3;vu16 crcpr;u16 reserved4;vu16 rxcrcr;u16 reserved5;vu16 txcrcr;u16 reserved6; spi_typedef;寄存器命名遵循上節(jié)的寄存器縮寫(xiě)命名規(guī)則。reserv

15、edi(i為一個(gè)整數(shù)索引值)表示被保留區(qū)域。外設(shè)聲明文件stm32f10x_map.h包含了所有外設(shè)的聲明,下例為spi外設(shè)的聲明:#ifndef ext#define ext extern#endif.#define periph_base (u32)0x40000000)#define apb1periph_base periph_base#define apb2periph_base (periph_base + 0x10000)./* spi2 base address definition*/#define spi2_base (apb1periph_base + 0x3800)./

16、* spi2 peripheral declaration*/#ifndef debug.#ifdef _spi2 #define spi2 (spi_typedef *) spi2_base)#endif /*_spi2 */.#else /* debug */. #ifdef _spi2 ext spi_typedef *spi2;#endif /*_spi2 */.#endif /* debug */如果用戶(hù)希望使用外設(shè)spi,那么必須在文件stm32f10x_conf.h中定義_spi標(biāo)簽。通過(guò)定義標(biāo)簽_spin,用戶(hù)可以訪(fǎng)問(wèn)外設(shè)spin的寄存器。例如,用戶(hù)必須在文件stm32f10x

17、_conf.h中定義標(biāo)簽_spi2,否則是不能訪(fǎng)問(wèn)spi2的寄存器的。在文件stm32f10x_conf.h中,用戶(hù)可以按照下例定義標(biāo)簽_spi 和_spin。#define _spi #define _spi1 #define _spi2每個(gè)外設(shè)都有若干寄存器專(zhuān)門(mén)分配給標(biāo)志位。我們按照相應(yīng)的結(jié)構(gòu)定義這些寄存器。標(biāo)志位的命名,同樣遵循上節(jié)的外設(shè)縮寫(xiě)規(guī)范,以ppp_flag_開(kāi)始。對(duì)于不同的外設(shè),標(biāo)志位都被定義在相應(yīng)的文件stm32f10x_ppp.h中。用戶(hù)想要進(jìn)入除錯(cuò)(debug)模式的話(huà),必須在文件stm32f10x_conf.h中定義標(biāo)簽debug。這樣會(huì)在sram的外設(shè)結(jié)構(gòu)部分創(chuàng)建一個(gè)

18、指針。因此我們可以簡(jiǎn)化除錯(cuò)過(guò)程,并且通過(guò)轉(zhuǎn)儲(chǔ)外設(shè)獲得來(lái)獲得所有寄存器的狀態(tài)。在所有情況下,spi2都是一個(gè)指向外設(shè)spi2首地址的指針。變量debug可以仿照下例定義:#define debug 1可以初始化debug模式與文件stm32f10x_lib.c中如下:#ifdef debugvoid debug(void) .#ifdef _spi2spi2 = (spi_typedef *) spi2_base;#endif /*_spi2 */. #endif /* debug*/note:1 當(dāng)用戶(hù)選擇debug模式,宏assert_param被擴(kuò)展,同時(shí)運(yùn)行時(shí)間檢查功能也在固態(tài)函數(shù)庫(kù)代碼

19、中被激活。2 進(jìn)入debug模式會(huì)增大代碼的尺寸,降低代碼的運(yùn)行效率。因此,我們強(qiáng)烈建議僅僅在除錯(cuò)的時(shí)候使用相應(yīng)代碼,在最終的應(yīng)用程序中,刪除它們。固件函數(shù)庫(kù)2. 固件函數(shù)庫(kù)2.1 壓縮包描述stm32f10x固件函數(shù)庫(kù)被壓縮在一個(gè)zip文件中。解壓該文件會(huì)產(chǎn)生一個(gè)文件夾:stm32f10xfwlibfwlib,包含如下所示的子文件夾:figure 1:固件函數(shù)庫(kù)文件夾結(jié)構(gòu)2.1.1 文件夾examples文件夾examples,對(duì)應(yīng)每一個(gè)stm32外設(shè),都包含一個(gè)子文件夾。這些子文件夾包含了整套文件,組成典型的例子,來(lái)示范如何使用對(duì)應(yīng)外設(shè)。這些文件有:readme.txt:每個(gè)例子的簡(jiǎn)單描述

20、和使用說(shuō)明。stm32f10x_conf.h:該頭文件設(shè)置了所有使用到的外設(shè),由不同的“define”語(yǔ)句組成。stm32f10x_it.c:該源文件包含了所有的中斷處理程序(如果未使用中斷,則所有的函數(shù)體都為空)。stm32f10x.it.h:該頭文件包含了所有的中斷處理程序的原形。main.c:例程代碼。注:所有的例程的使用,都不受不同軟件開(kāi)發(fā)環(huán)境的影響。2.1.2 文件夾library文件夾library包含組成固件函數(shù)庫(kù)核心的所有子文件夾和文件:n 子文件夾inc包含了固件函數(shù)庫(kù)所需的頭文件,用戶(hù)無(wú)需修改該文件夾:-stm32f10x_type.h:所有其他文件使用的通用數(shù)據(jù)類(lèi)型和枚舉

21、。- stm32f10x_map.h:外設(shè)存儲(chǔ)器映像和寄存器數(shù)據(jù)結(jié)構(gòu)。- stm32f10x_lib.h:主頭文件夾,包含了其他頭文件。- stm32f10x_ppp.h:每個(gè)外設(shè)對(duì)應(yīng)一個(gè)頭文件,包含了該外設(shè)使用的函數(shù)原形,數(shù)據(jù)結(jié)構(gòu)和枚舉。- cortexm3_macro.h: 文件cortexm3_macro.s對(duì)應(yīng)的頭文件。n 子文件夾src包含了固件函數(shù)庫(kù)所需的源文件,用戶(hù)無(wú)需修改該文件夾:-stm32f10x_ppp.c:每個(gè)外設(shè)對(duì)應(yīng)一個(gè)源文件,包含了該外設(shè)使用的函數(shù)體。- stm32f10x_lib.c:初始化所有外設(shè)的指針。注:所有代碼都按照strict ansi-c標(biāo)準(zhǔn)書(shū)寫(xiě),都不

22、受不同軟件開(kāi)發(fā)環(huán)境的影響。2.1.3 文件夾project文件夾project包含了一個(gè)標(biāo)準(zhǔn)的程序項(xiàng)目模板,包括庫(kù)文件的編譯和所有用戶(hù)可修改的文件,可用以建立新的工程。- stm32f10x_conf.h:項(xiàng)目配置頭文件,默認(rèn)為設(shè)置了所有的外設(shè)。- stm32f10x_it.c:該源文件包含了所有的中斷處理程序(所有的函數(shù)體默認(rèn)為空)。stm32f10x_it.h:該頭文件包含了所有的中斷處理程序的原形。main.c:主函數(shù)體文件夾ewarm,rvmdk,ride:用于不同開(kāi)發(fā)環(huán)境使用,詳情查詢(xún)各文件夾下的文件readme.txt。2.2 固件函數(shù)庫(kù)文件描述table 2列舉和描述了固件函數(shù)庫(kù)

23、使用的所有文件。固件函數(shù)庫(kù)的體系和文件相互包括的聯(lián)系表示在figure 2中。每一個(gè)外設(shè)都有一個(gè)對(duì)應(yīng)的源文件:stm32f10x_ppp.c和一個(gè)對(duì)應(yīng)的頭文件:stm32f10x_ppp.h。文件stm32f10x_ppp.c包含了使用外設(shè)ppp所需的所有固件函數(shù)。提供所有外設(shè)一個(gè)存儲(chǔ)器映像文件stm32f10x_map.h。它包含了所有寄存器的聲明,既可以用于debug模式也可以用于release模式。頭文件stm32f10x_lib.h包含了所有外設(shè)頭文件的頭文件。它是唯一一個(gè)用戶(hù)需要包括在自己應(yīng)用中的文件,起到應(yīng)用和庫(kù)之間界面的作用。文件stm32f10x_conf.h是唯一一個(gè)需要由用

24、戶(hù)修改的文件。它作為應(yīng)用和庫(kù)之間的界面,指定了一系列參數(shù)。table 2. 固件函數(shù)庫(kù)文件描述文件名描述stm32f10x_conf.h參數(shù)設(shè)置文件,起到應(yīng)用和庫(kù)之間界面的作用。用戶(hù)必須在運(yùn)行自己的程序前修改該文件。 用戶(hù)可以利用模板使能或者失能外設(shè)。也可以修改外部晶振的參數(shù)。也可以是用該文件在編譯前使能debug或者release模式。main.c主函數(shù)體示例。stm32f10x_it.h頭文件,包含所有中斷處理函數(shù)原形。stm32f10x_it.c外設(shè)中斷函數(shù)文件。用戶(hù)可以加入自己的中斷程序代碼。對(duì)于指向同一個(gè)中斷向量的多個(gè)不同中斷請(qǐng)求,可以利用函數(shù)通過(guò)判斷外設(shè)的中斷標(biāo)志位來(lái)確定準(zhǔn)確的中斷

25、源。固件函數(shù)庫(kù)提供了這些函數(shù)的名稱(chēng)。stm32f10x_lib.h包含了所有外設(shè)的頭文件的頭文件。它是唯一一個(gè)用戶(hù)需要包括在自己應(yīng)用中的文件,起到應(yīng)用和庫(kù)之間界面的作用。stm32f10x_lib.cdebug模式初始化文件。它包括多個(gè)指針的定義,每個(gè)指針指向特定外設(shè)的首地址,以及在debug模式被使能時(shí),被調(diào)用的函數(shù)的定義。stm32f10x_map.h該文件包含了存儲(chǔ)器映像和所有寄存器物理地址的聲明,既可以用于debug模式也可以用于release模式。所有外設(shè)都使用該文件。stm32f10x_type.h通用聲明文件。包含所有外設(shè)驅(qū)動(dòng)使用的通用類(lèi)型和常數(shù)。stm32f10x_ppp.c由

26、c語(yǔ)言編寫(xiě)的外設(shè)ppp的驅(qū)動(dòng)源程序文件。stm32f10x_ppp.h外設(shè)ppp的頭文件。包含外設(shè)ppp函數(shù)的定義,和這些函數(shù)使用的變量。cortexm3_macro.h文件cortexm3_macro.s的頭文件cortexm3_macro.scortex-m3內(nèi)核特殊指令的指令包裝。figure 2. 固件函數(shù)庫(kù)文件體系結(jié)構(gòu)2.3 外設(shè)的初始化和設(shè)置本節(jié)按步驟描述了如何初始化和設(shè)置任意外設(shè)。這里ppp代表任意外設(shè)。1.在主應(yīng)用文件中,聲明一個(gè)結(jié)構(gòu)ppp_inittypedef,例如:ppp_inittypedef ppp_initstructure;這里ppp_initstructure是

27、一個(gè)位于內(nèi)存中的工作變量,用來(lái)初始化一個(gè)或者多個(gè)外設(shè)ppp。2.為變量ppp_initstructure的各個(gè)結(jié)構(gòu)成員填入允許的值。可以采用以下2種方式:a)按照如下程序設(shè)置整個(gè)結(jié)構(gòu)體ppp_initstructure.member1=val1; ppp_initstructure.member2 = val2;ppp_initstructure.membern = valn;/* where n is the number of the structure members */以上步驟可以合并在同一行里,用以?xún)?yōu)化代碼大?。簆pp_inittypedef ppp_initstructure =

28、 val1, val2,., valnb)僅設(shè)置結(jié)構(gòu)體中的部分成員:這種情況下,用戶(hù)應(yīng)當(dāng)首先調(diào)用函數(shù)ppp_sturcinit(.)來(lái)初始化變量ppp_initstructure,然后再修改其中需要修改的成員。這樣可以保證其他成員的值(多為缺省值)被正確填入。ppp_structinit(&ppp_initstructure);pp_initstructure.memberx = valx;ppp_initstructure.membery = valy;/*where x and y are the members the user wants to configure*/3. 調(diào)用函數(shù)pp

29、p_init(.)來(lái)初始化外設(shè)ppp。4. 在這一步,外設(shè)ppp已被初始化??梢哉{(diào)用函數(shù)ppp_cmd(.)來(lái)使能之。ppp_cmd(ppp, enable);可以通過(guò)調(diào)用一系列函數(shù)來(lái)使用外設(shè)。每個(gè)外設(shè)都擁有各自的功能函數(shù)。更多細(xì)節(jié)參閱 section3 外設(shè)固件概述。注:1. 在設(shè)置一個(gè)外設(shè)前,必須調(diào)用以下一個(gè)函數(shù)來(lái)使能它的時(shí)鐘:rcc_ahbperiphclockcmd(rcc_ahbperiph_pppx, enable); rcc_apb2periphclockcmd(rcc_apb2periph_pppx, enable); rcc_apb1periphclockcmd(rcc_ap

30、b1periph_pppx, enable);2. 可以調(diào)用函數(shù)ppp_deinit(.)來(lái)把外設(shè)ppp的所有寄存器復(fù)位為缺省值:ppp_deinit(ppp)3. 在外設(shè)設(shè)置完成以后,繼續(xù)修改它的一些參數(shù),可以參照如下步驟:ppp_initstucture.memberx = valx; ppp_initstructure.membery = valy; /* where x and y are the onlymembers that user wants to modify*/ppp_init(ppp, &ppp_initstructure);2.4 位段(bit-banding)cor

31、tex-m3 存儲(chǔ)器映像包括兩個(gè)位段(bit-band)區(qū)。這兩個(gè)位段區(qū)將別名存儲(chǔ)器區(qū)中的每個(gè)字映射到位段存儲(chǔ)器區(qū)的一個(gè)位,在別名存儲(chǔ)區(qū)寫(xiě)入一個(gè)字具有對(duì)位段區(qū)的目標(biāo)位執(zhí)讀-改-寫(xiě)操作的相同效果。所有stm32f10x外設(shè)寄存器都被映射到一個(gè)位段(bit-band)區(qū)。這個(gè)特性在各個(gè)函數(shù)中對(duì)單個(gè)比特進(jìn)行置1/置0操作時(shí)被大量使用,用以減小和優(yōu)化代碼尺寸。section 2.4.1和section 2.4.2給出了外設(shè)固件函數(shù)庫(kù)中如何實(shí)現(xiàn)位段訪(fǎng)問(wèn)的描述。2.4.1 映射公式映射公式給出別名區(qū)中的每個(gè)字是如何對(duì)應(yīng)位帶區(qū)的相應(yīng)位的,公式如下:bit_word_offset = (byte_offset

32、 x 32) + (bit_number 4)bit_word_addr = bit_band_base + bit_word_offset其中:bit_word_offset是目標(biāo)位在存取器位段區(qū)中的位置。bit_word_addr 是別名存儲(chǔ)器區(qū)中字的地址,它映射到某個(gè)目標(biāo)位。bit_band_base 是別名區(qū)的起始地址。byte_offset 是包含目標(biāo)位的字節(jié)在位段的序號(hào)。bit_number 是目標(biāo)位所在位置(0-31)。2.4.2 應(yīng)用實(shí)例下例展現(xiàn)了如何把寄存器rcc_cr的pllon24位,映射到別名區(qū):/* peripheral base address in the bit

33、-band region */#define periph_base (u32)0x40000000)/* peripheral address in the alias region */#define periph_bb_base (u32)0x42000000)/* - rcc registers bit address in the alias region - */#define rcc_offset (rcc_base - periph_base)/* - cr register -*/* alias word address of pllon bit */#define cr_o

34、ffset (rcc_offset + 0x00)#define pllon_bitnumber 0x18#define cr_pllon_bb (periph_bb_base + (cr_offset * 32(pllon_bitnumber * 4)編寫(xiě)一個(gè)使能/失能pll的函數(shù),步驟如下:.#define cr_pllon_set (u32)0x01000000)#define cr_pllon_reset (u32)0xfeffffff).void rcc_pllcmd(functionalstate newstate)if (newstate != disable) /* enabl

35、e pll */rcc-cr |= cr_pllon_set; else /* disable pll */rcc-cr &= cr_pllon_reset; using bit-band access this function will be coded as follows:void rcc_pllcmd(functionalstate newstate)*(vu32 *) cr_pllon_bb = (u32)newstate;2.5 運(yùn)行時(shí)間檢測(cè)固件函數(shù)庫(kù)通過(guò)檢查庫(kù)函書(shū)的輸入來(lái)實(shí)現(xiàn)運(yùn)行時(shí)間錯(cuò)誤偵測(cè)。通過(guò)使用宏assert_param來(lái)實(shí)現(xiàn)運(yùn)行時(shí)間檢測(cè)。所有要求輸入?yún)?shù)的函數(shù)都使用這個(gè)

36、宏。它可以檢查輸入?yún)?shù)是否在允許的范圍之內(nèi)。例:函數(shù)pwr_clearflagstm32f10x_pwr.c:void pwr_clearflag(u32 pwr_flag)/* check the parameters */assert_param(is_pwr_clear_flag(pwr_flag);pwr-cr |= pwr_flag 2;stm32f10x_pwr.h:/* pwr flag */#define pwr_flag_wu (u32)0x00000001) #define pwr_flag_sb (u32)0x00000002) #define pwr_flag_pvdo

37、 (u32)0x00000004)#define is_pwr_clear_flag(flag) (flag = pwr_flag_wu) | (flag = pwr_flag_sb)如果傳給宏assert_param的參數(shù)為false,則調(diào)用函數(shù)assert_failed并返回被錯(cuò)誤調(diào)用的函數(shù)所在的文件名和行數(shù)。如果傳給宏assert_param的參數(shù)為true,則無(wú)返回值。宏assert_param編寫(xiě)于文件stm32f10x_conf.h中:/* exported macro -*/#ifdef debug/* * * macro name : assert_param * descri

38、ption : the assert_param macro is used for functions parameters check.* it is used only if the library is compiled in debug mode.* input : - expr: if expr is false, it calls assert_failed function.* which reports the name of the source file and the source * line number of the call that failed. * if

39、expr is true, it returns no value. * return : none */#define assert_param(expr) (expr) ? (void)0 : assert_failed(u8 *)_file_, _line_)/* exported functions - */void assert_failed(u8* file, u32 line);#else#define assert_param(expr) (void)0)#endif /* debug */函數(shù)assert_failed編寫(xiě)于文件main.c或者其他用戶(hù)c文件:#ifdef d

40、ebug/* * function name : assert_failed * description : reports the name of the source file and the source line number.* where the assert_param error has occurred.* input : - file: pointer to the source file name * - line: assert_param error line source number* output : none * return : none */void as

41、sert_failed(u8* file, u32 line)/* user can add his own implementation to report the file name and line number, ex: printf(wrong parameters value: file %s on line %drn, file, line) */* infinite loop */while (1) #endif注:運(yùn)行時(shí)間檢查,即宏assert_param應(yīng)當(dāng)只在庫(kù)在debug模式下編譯時(shí)使用。建議在用戶(hù)應(yīng)用代碼的開(kāi)發(fā)和調(diào)試階段使用運(yùn)行時(shí)間檢查,在最終的代碼中去掉它們以改進(jìn)代

42、碼尺寸和速度。如果用戶(hù)仍然希望在最終的代碼中保留這項(xiàng)功能,可以在調(diào)用庫(kù)函數(shù)前,重新使用宏assert_param來(lái)測(cè)試輸入?yún)?shù)。外設(shè)固件描述3. 外設(shè)固件概述本節(jié)系統(tǒng)描述了每一個(gè)外設(shè)固件函數(shù)庫(kù)。完整地描述所有相關(guān)函數(shù)并提供如何使用他們的例子。 函數(shù)的描述按如下格式進(jìn)行:table 3. 函數(shù)描述格式函數(shù)名外設(shè)函數(shù)的名稱(chēng)函數(shù)原形原形聲明功能描述簡(jiǎn)要解釋函數(shù)是如何執(zhí)行的輸入?yún)?shù)x輸入?yún)?shù)描述輸出參數(shù)x輸出參數(shù)描述返回值函數(shù)的返回值先決條件調(diào)用函數(shù)前應(yīng)滿(mǎn)足的要求被調(diào)用函數(shù)其他被該函數(shù)調(diào)用的庫(kù)函數(shù)4. 模擬/數(shù)字轉(zhuǎn)換器4.1 adc寄存器結(jié)構(gòu)4.2 adc庫(kù)函數(shù)5. 備份寄存器(bkp)5.1 bkp

43、寄存器結(jié)構(gòu)5.2 bkp庫(kù)函數(shù)6 控制器局域網(wǎng)(can)6.1 can寄存器結(jié)構(gòu)6.2 can庫(kù)函數(shù)7 dma控制器(dma)7.1 dma寄存器結(jié)構(gòu)7.2 dma庫(kù)函數(shù)8 外部中斷/事件控制器(exti)8.1 exti寄存器結(jié)構(gòu)8.2 exti庫(kù)函數(shù)9 flash存儲(chǔ)器(flash)9.1 flash寄存器結(jié)構(gòu)9.2 flash庫(kù)函數(shù)gpio10 通用輸入/輸出(gpio)gpio驅(qū)動(dòng)可以用作多個(gè)用途,包括管腳設(shè)置,單位設(shè)置/重置,鎖定機(jī)制,從端口管腳讀入或者向端口管腳寫(xiě)入數(shù)據(jù)。section 10.1 gpio寄存器結(jié)構(gòu)描述了固件函數(shù)庫(kù)所使用的數(shù)據(jù)結(jié)構(gòu),section 10.2 固件庫(kù)函

44、數(shù)介紹了函數(shù)庫(kù)里的所有函數(shù)。10.1 gpio寄存器結(jié)構(gòu)gpio寄存器結(jié)構(gòu),gpio_typedef和afio_typedef,在文件“stm32f10x_map.h”中定義如下:typedef struct vu32 crl; vu32 crh; vu32 idr; vu32 odr; vu32 bsrr; vu32 brr; vu32 lckr; gpio_typedeftypedef structvu32 evcr; vu32 mapr; vu32 exticr4; afio_typedef;table 178.例舉了gpio所有寄存器。table 178. gpio寄存器寄存器描述cr

45、l端口配置低寄存器crh端口配置高寄存器idr端口輸入數(shù)據(jù)寄存器odr端口輸出數(shù)據(jù)寄存器bsrr端口位設(shè)置/復(fù)位寄存器brr端口位復(fù)位寄存器lckr端口配置鎖定寄存器evcr事件控制寄存器mapr復(fù)用重映射和調(diào)試i/o配置寄存器exticr外部中斷線(xiàn)路0-15配置寄存器五個(gè)gpio外設(shè)聲明于文件“stm32f10x_map.h”:.#define periph_base (u32)0x40000000) #define apb1periph_base periph_base #define apb2periph_base (periph_base + 0x10000) #define ahbp

46、eriph_base (periph_base + 0x20000) .#define afio_base (apb2periph_base + 0x0000) #define gpioa_base (apb2periph_base + 0x0800) #define gpiob_base (apb2periph_base + 0x0c00)#define gpioc_base (apb2periph_base + 0x1000) #define gpiod_base (apb2periph_base + 0x1400) #define gpioe_base (apb2periph_base

47、+ 0x1800) #ifndef debug.#ifdef _afio #define afio (afio_typedef *) afio_base) #endif /*_afio */ #ifdef _gpioa #define gpioa (gpio_typedef *) gpioa_base) #endif /*_gpioa */#ifdef _gpiob #define gpiob (gpio_typedef *) gpiob_base) #endif /*_gpiob */ #ifdef _gpioc #define gpioc (gpio_typedef *) gpioc_ba

48、se) #endif /*_gpioc */ #ifdef _gpiod #define gpiod (gpio_typedef *) gpiod_base) #endif /*_gpiod */ #ifdef _gpioe #define gpioe (gpio_typedef *) gpioe_base) #endif /*_gpioe */ .#else /* debug */. #ifdef _afio ext afio_typedef *afio; #endif /*_afio */#ifdef _gpioa ext gpio_typedef *gpioa; #endif /*_gp

49、ioa */ #ifdef _gpiob ext gpio_typedef *gpiob; #endif /*_gpiob */ #ifdef _gpioc ext gpio_typedef *gpioc;#endif /*_gpioc */ #ifdef _gpiod ext gpio_typedef *gpiod; #endif /*_gpiod */ #ifdef _gpioe ext gpio_typedef *gpioe; #endif /*_gpioe */.#endif 使用debug模式時(shí),初始化指針afio, gpioa, gpiob, gpioc, gpiod 和gpioe

50、 于文件“stm32f10x_lib.c”: #ifdef _gpioa gpioa = (gpio_typedef *) gpioa_base; #endif /*_gpioa */ #ifdef _gpiob gpiob = (gpio_typedef *) gpiob_base; #endif /*_gpiob */#ifdef _gpioc gpioc = (gpio_typedef *) gpioc_base; #endif /*_gpioc */ #ifdef _gpiod gpiod = (gpio_typedef *) gpiod_base; #endif /*_gpiod *

51、/#ifdef _gpioe gpioe = (gpio_typedef *) gpioe_base; #endif /*_gpioe */#ifdef _afio afio = (afio_typedef *) afio_base; #endif /*_afio */為了訪(fǎng)問(wèn)gpio寄存器,, _gpio, _afio, _gpioa, _gpiob, _gpioc, _gpiod和_gpioe必須在文件“stm32f10x_conf.h”中定義如下:#define _gpio #define _gpioa #define _gpiob #define _gpioc #define _gpi

52、od#define _gpioe #define _afio10.2 gpio庫(kù)函數(shù)table 179. 例舉了gpio的庫(kù)函數(shù)table 179. gpio庫(kù)函數(shù)函數(shù)名描述gpio_deinit將外設(shè)gpiox寄存器重設(shè)為缺省值gpio_afiodeinit將復(fù)用功能(重映射事件控制和exti設(shè)置)重設(shè)為缺省值gpio_init根據(jù)gpio_initstruct中指定的參數(shù)初始化外設(shè)gpiox寄存器gpio_structinit把gpio_initstruct中的每一個(gè)參數(shù)按缺省值填入gpio_readinputdatabit讀取指定端口管腳的輸入gpio_readinputdata讀取指定的gpio端口輸入gpio_readoutputdatabit讀取指定端口管腳的輸出gpio_readoutputdata讀取指定的gpio端口輸出gpio_setbits設(shè)置指定的數(shù)據(jù)端口位gpio_resetbits清除指定的數(shù)據(jù)端口位gpio_writebit設(shè)置或者清除指定的數(shù)據(jù)端口位gpio_write向指定gpio數(shù)據(jù)端口寫(xiě)入數(shù)據(jù)gpio_pinl

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論