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è),還剩61頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、UM0427 用戶手冊(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é),用戶也可以輕松應(yīng)用每一個(gè)外設(shè)。因此,使用本固態(tài)函數(shù)庫(kù)可以大大 減少用戶的程序編寫(xiě)時(shí)間,進(jìn)而降低開(kāi)發(fā)成本。每個(gè)外設(shè)驅(qū)動(dòng)都由一組函數(shù)組成,這組函數(shù)覆蓋了該外設(shè)所有功能。每個(gè)器件的開(kāi)發(fā)都由 一個(gè)通用 AP

2、I (application programming interface 應(yīng)用編程界面 )驅(qū)動(dòng), API 對(duì)該驅(qū)動(dòng)程序的 結(jié)構(gòu),函數(shù)和參數(shù)名稱都進(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ì)話啟動(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è)適合于

3、用戶應(yīng)用程序的開(kāi)發(fā)和調(diào)試。 但這會(huì)增加了成本, 可以在最終應(yīng)用 程序代碼中移去,以優(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ō), 用戶可以直接使用之, 對(duì)于那些在代碼大小和執(zhí) 行速度方面有嚴(yán)格要求的應(yīng)用程序, 該固件庫(kù)驅(qū)動(dòng)程序可以作為如何設(shè)置外設(shè)的一份參考資 料,根據(jù)實(shí)際需求對(duì)其進(jìn)行調(diào)整。此份固件庫(kù)用戶手冊(cè)的整體架構(gòu)如下:定義,文檔約定和固態(tài)函數(shù)庫(kù)規(guī)則。 固態(tài)函數(shù)庫(kù)概述(包的容,庫(kù)的架構(gòu)),安裝指南,庫(kù)使用實(shí)例。 固件庫(kù)具體描述:設(shè)置架構(gòu)和每個(gè)

4、外設(shè)的函數(shù)。STM32F101xx 和STM32F103xx 在整個(gè)文檔中被寫(xiě)作 STM32F101x 。1. 文檔和庫(kù)規(guī)本用戶手冊(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直接存存取控制器EXTI外部中斷事件控制器FLASH閃存存儲(chǔ)器GPIO通用輸入輸出I2C部集成電路IWDG獨(dú)立看門(mén)狗NVIC嵌套中斷向量列表控制器PWR電源 /功耗控制RCC復(fù)位與時(shí)鐘控制器RTC實(shí)時(shí)時(shí)鐘SPI串行外設(shè)接口SysTick系統(tǒng)嘀嗒定時(shí)器TIM通用定時(shí)器TIM1高級(jí)控制定時(shí)器USART通用同步

5、異步接收發(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ī)與本用戶手冊(cè)一致。外設(shè)函數(shù)的命名以該外設(shè)的縮寫(xiě)加下劃線為開(kāi)頭。每個(gè)單詞的第一個(gè)字母都由英文字母大寫(xiě)書(shū)寫(xiě),例如: SPI_SendD

6、ata 。在函數(shù)名中,只允許存在一個(gè)下劃線,用以分隔外設(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_I

7、TConfig 的函數(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_

8、GetITStatus 的函數(shù),其功能為判斷來(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

9、;typedef signed long const sc32; /* 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

10、*/typedef volatile signed short 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 */typede

11、f unsigned char const uc8; /* Read 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

12、 const vuc8; /* Read Only */1.3.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)

13、型( FunctionalState type)的 2個(gè)可能值 為“使能”與“失能”( ENABLE 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 enumERROR = 0,SUCCESS = !ERROR ErrorStatus;1.3.6 外設(shè)用戶可以通過(guò)指向各個(gè)外設(shè)的指針訪

14、問(wèn)各外設(shè)的控制寄存器。 這些指針?biāo)赶虻臄?shù)據(jù)結(jié)構(gòu) 與各個(gè)外設(shè)的控制寄存器布局一一對(duì)應(yīng)。外設(shè)控制寄存器結(jié)構(gòu)文件 stm32f10x_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 TXCRC

15、R;u16 RESERVED6; SPI_TypeDef;寄存器命名遵循上節(jié)的寄存器縮寫(xiě)命名規(guī)則。RESERVEDi ( 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

16、 definition*/#define SPI2_BASE (APB1PERIPH_BASE + 0x3800) /* SPI2 peripheral declaration*/ #ifndef DEBUG #ifdef _SPI2 #define SPI2 (SPI_TypeDef *) SPI2_BASE) #endif /*_SPI2 */ #else /* DEBUG */#ifdef _SPI2EXT SPI_TypeDef *SPI2;#endif /*_SPI2 */#endif /* DEBUG */如果用戶希望使用外設(shè) SPI,那么必須在文件 stm32f10x_conf.

17、h 中定義 _SPI 標(biāo)簽。通 過(guò) 定 義 標(biāo) 簽_SPIn ,用 戶 可 以 訪 問(wèn)外 設(shè) SPIn 的 寄 存 器 。例 如 , 用 戶 必 須 在 文 件 stm32f10x_conf.h 中 定 義 標(biāo) 簽 _SPI2 , 否 則 是 不 能 訪 問(wèn) SPI2 的 寄 存 器 的 。 在 文 件 stm32f10x_conf.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_

18、FLAG_ 開(kāi)始。對(duì)于不同的外設(shè),標(biāo)志位 都被定義在相應(yīng)的文件 stm32f10x_ppp.h 中。用戶想要進(jìn)入除錯(cuò) (DEBUG )模式的話,必須在文件 stm32f10x_conf.h 中定義標(biāo)簽 DEBUG 。 這樣會(huì)在 SRAM 的外設(shè)結(jié)構(gòu)部分創(chuàng)建一個(gè)指針。因此我們可以簡(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(vo

19、id)#ifdef _SPI2SPI2 = (SPI_TypeDef *) SPI2_BASE; #endif /*_SPI2 */ #endif /* DEBUG*/Note:1 當(dāng)用戶選擇 DEBUG 模式,宏 assert_param被擴(kuò)展,同時(shí)運(yùn)行時(shí)間檢查功能也在固 態(tài)函數(shù)庫(kù)代碼中被激活。2 進(jìn)入 DEBUG 模式會(huì)增大代碼的尺寸,降低代碼的運(yùn)行效率。因此,我們強(qiáng)烈建議僅僅在除錯(cuò)的時(shí)候使用相應(yīng)代碼,在最終的應(yīng)用程序中,刪除它們。2. 固件函數(shù)庫(kù)2.1壓縮包描述STM32F10x 固件函數(shù)庫(kù)被壓縮在一個(gè) zip 文件中。解壓該文件會(huì)產(chǎn)生一個(gè)文件夾:STM32F10xFWLibFWLib

20、,包含如下所示的子文件夾: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)單描述和使用說(shuō)明。stm32f10x_conf.h :該頭文件設(shè)置了所有使用到的外設(shè),由不同的“ DEFINE”語(yǔ)句組成。stm32f10x_it.c :該源文件包含了所有的中斷處理程序(如果未使用中斷,則所有的函數(shù)體 都為空)。stm32f10x.it.h :該頭文件包含了所有的中斷處理程序的原形。

21、main.c :例程代碼。注:所有的例程的使用,都不受不同軟件開(kāi)發(fā)環(huán)境的影響。2.1.2 文件夾 Library文件夾 Library 包含組成固件函數(shù)庫(kù)核心的所有子文件夾和文件: 子文件夾 inc 包含了固件函數(shù)庫(kù)所需的頭文件,用戶無(wú)需修改該文件夾: -stm32f10x_type.h :所有其他文件使用的通用數(shù)據(jù)類(lèi)型和枚舉。- 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_m

22、acro.h : 文件 cortexm3_macro.s 對(duì)應(yīng)的頭文件。 子文件夾 src包含了固件函數(shù)庫(kù)所需的源文件,用戶無(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ě),都不受不同軟件開(kāi)發(fā)環(huán)境的影響。2.1.3 文件夾 Project文件夾 Project 包含了一個(gè)標(biāo)準(zhǔn)的程序項(xiàng)目模板,包括庫(kù)文件的編譯和所有用戶可修改的文 件,可用以建立新的工程。- stm32f10x_conf.h :項(xiàng)目配置頭文件,默認(rèn)為設(shè)置了所有

23、的外設(shè)。- stm32f10x_it.c :該源文件包含了所有的中斷處理程序(所有的函數(shù)體默認(rèn)為空)。 stm32f10x_it.h :該頭文件包含了所有的中斷處理程序的原形。main.c :主函數(shù)體文件夾 EWARM ,RVMDK ,RIDE :用于不同開(kāi)發(fā)環(huán)境使用,詳情查詢各文件夾下的文件 readme.txt。2.2固件函數(shù)庫(kù)文件描述Table 2列舉和描述了固件函數(shù)庫(kù)使用的所有文件。固件函數(shù)庫(kù)的體系和文件相互包括的聯(lián)系表示在 Figure 2中。每一個(gè)外設(shè)都有一個(gè)對(duì)應(yīng)的 源文件: stm32f10x_ppp.c 和一個(gè)對(duì)應(yīng)的頭文件: stm32f10x_ppp.h 。文件 stm32f

24、10x_ppp.c包含了使用外設(shè) PPP所需的所有固件函數(shù)。提供所有外設(shè)一個(gè)存儲(chǔ)器 映像文件 stm32f10x_map.h 。它包含了所有寄存器的聲明,既可以用于 Debug模式也可以用 于release模式。頭文件 stm32f10x_lib.h 包含了所有外設(shè)頭文件的頭文件。它是唯一一個(gè)用戶需要包括在自 己應(yīng)用中的文件,起到應(yīng)用和庫(kù)之間界面的作用。文件 stm32f10x_conf.h 是唯一一個(gè)需要由用戶修改的文件。它作為應(yīng)用和庫(kù)之間的界面, 指定了一系列參數(shù)。Table 2. 固件函數(shù)庫(kù)文件描述文件名描述stm32f10x_conf.h參數(shù)設(shè)置文件,起到應(yīng)用和庫(kù)之間界面的作用。 用戶

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

26、作用。stm32f10x_lib.c Debug 模式初始化文件。 它包括多個(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 由 C 語(yǔ)言編寫(xiě)的外設(shè) PPP 的驅(qū)動(dòng)源程序文件。stm32f10x_ppp.h 外設(shè) PPP的頭文件。包含外設(shè) PPP 函數(shù)的定義,和這

27、些函數(shù)使用的變量。 cortexm3_macro.h 文件 cortexm3_macro.s 的頭文件 cortexm3 macro.s Cortex-M3 核特殊指令的指令包裝。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 是一個(gè)位于存中的工作變量, 用來(lái)初始化一個(gè)或者多個(gè)外設(shè) PPP。2. 為變量 PPP_InitStr

28、ucture 的各個(gè)結(jié)構(gòu)成員填入允許的值??梢圆捎靡韵?種方式: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 */ 以上步驟可以合并在同一行里,用以優(yōu)化代碼大小:PPP_InitTypeDef PPP_InitStructure = val1, val2,., valN b)僅設(shè)置結(jié)構(gòu)體中的部分成員:這種情況下,用戶應(yīng)

29、當(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ù) PPP_Init(.) 來(lái)初始化外設(shè) PPP。4. 在這一步,外設(shè) PPP已

30、被初始化。可以調(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_APB1Periph_PPPx, ENABLE);2. 可以調(diào)用函數(shù)

31、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 )Cortex? -M3 存儲(chǔ)器映像包括兩個(gè)位段 (bit-ban

32、d) 區(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)位段訪問(wèn)的描述。2.4.1 映射公式映射公式給出 了 別名區(qū)中的每個(gè)字是如何對(duì)應(yīng)位帶區(qū)的相應(yīng)位的,公式如下: bit_word_offset = (byte_offset x 32) +

33、(bit_number4) 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

34、-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_OFFSE

35、T (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) /* Enable PL

36、L */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è)宏。它

37、可以檢查輸入?yún)?shù)是否在 允許的圍之。例:函數(shù) PWR_ClearFlag stm32f10x_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

38、(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*

39、Descriptio n : 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.

40、* If 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 或者其他用戶 C文件:#i

41、fdef DEBUG/* 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

42、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í)使用。 建議在用戶應(yīng)用 代碼的開(kāi)發(fā)和調(diào)試階段使用運(yùn)行時(shí)間檢查, 在最終的代碼中去掉

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

44、P )5.1 BKP 寄存器結(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ù)10 通用輸入 /輸出( GPIO)GPIO驅(qū)動(dòng)可以用作多個(gè)用途,包括管腳設(shè)置,單位設(shè)置/ 重置,鎖定機(jī)制,從端口管腳讀入或者向端口管腳寫(xiě)入數(shù)據(jù)。Section 10.1 GPIO寄存器結(jié)構(gòu)描述了固

45、件函數(shù)庫(kù)所使用的數(shù)據(jù)結(jié)構(gòu), Section 10.2 固件庫(kù)函 數(shù)介紹了函數(shù)庫(kù)里的所有函數(shù)。10.1 GPIO 寄存器結(jié)構(gòu)GPIO寄存器結(jié)構(gòu), GPIO_TypeDef 和AFIO_TypeDef ,在文件 “ stm32f10x_map.h 中”定義如 下:typedef structvu32 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.例舉了 GPI

46、O 所有寄存器。Table 178. GPIO 寄存器寄存器描述CRL端口配置低寄存器CRH端口配置高寄存器IDR端口輸入數(shù)據(jù)寄存器ODR端口輸出數(shù)據(jù)寄存器BSRR端口位設(shè)置 / 復(fù)位寄存器BRR端口位復(fù)位寄存器LCKR端口配置鎖定寄存器EVCR事件控制寄存器MAPR復(fù)用重映射和調(diào)試 I/O 配置寄存器EXTICR外部中斷線路 0-15 配置寄存器五個(gè) GPIO 外設(shè)聲明于文件 “stm32f10x_map.h”:#define PERIPH_BASE (u32)0x40000000)#define APB1PERIPH_BASE PERIPH_BASE#define APB2PERIPH_B

47、ASE (PERIPH_BASE + 0x10000) #define AHBPERIPH_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

48、) #define GPIOE_BASE (APB2PERIPH_BASE + 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 GPI

49、OC (GPIO_TypeDef *) GPIOC_BASE)#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 _AFIOEXT AFIO_TypeDef *AFIO;#endif /*_AFIO */#ifdef _GPIOAEXT GPIO_TypeDef *GPIOA

50、;#endif /*_GPIOA */#ifdef _GPIOBEXT GPIO_TypeDef *GPIOB; #endif /*_GPIOB */ #ifdef _GPIOCEXT GPIO_TypeDef *GPIOC;#endif /*_GPIOC */#ifdef _GPIODEXT GPIO_TypeDef *GPIOD;#endif /*_GPIOD */#ifdef _GPIOEEXT GPIO_TypeDef *GPIOE; #endif /*_GPIOE */ #endif使用 Debug模式時(shí),初始化指針 AFIO, GPIOA, GPIOB, GPIOC, GPIOD和

51、GPIOE 于文件“ stm32f10x_lib.c : ”#ifdef _GPIOAGPIOA = (GPIO_TypeDef *) GPIOA_BASE;#endif /*_GPIOA */#ifdef _GPIOBGPIOB = (GPIO_TypeDef *) GPIOB_BASE;#endif /*_GPIOB */#ifdef _GPIOCGPIOC = (GPIO_TypeDef *) GPIOC_BASE;#endif /*_GPIOC */#ifdef _GPIODGPIOD = (GPIO_TypeDef *) GPIOD_BASE;#endif /*_GPIOD */#i

52、fdef _GPIOEGPIOE = (GPIO_TypeDef *) GPIOE_BASE;#endif /*_GPIOE */#ifdef _AFIOAFIO = (AFIO_TypeDef *) AFIO_BASE;#endif /*_AFIO */為了訪問(wèn) GPIO寄存器, , _GPIO, _AFIO, _GPIOA, _GPIOB, _GPIOC, _GPIOD 和 _GPIOE 必須在文件 “ stm32f10x_conf.h 中”定義如下:#define _GPIO#define _GPIOA#define _GPIOB#define _GPIOC#define _GPIOD#

53、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_ReadInp

54、utData讀取指定的 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 PinLockConfig鎖定 GPIO 管腳設(shè)置寄存器GPIO EventOutputConfig選擇 GPIO 管腳用作事件輸出GPIO EventOutputCmd使能或者失能事件輸出GPIO_PinRemapConfig改變指定管腳的映射GPIO EXTILineConfig選擇 GPIO 管腳用作外部中斷線路10.2.1 函數(shù) GPIO_DeIni

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論