STM32固件庫使用手冊簿地中文翻譯_第1頁
STM32固件庫使用手冊簿地中文翻譯_第2頁
STM32固件庫使用手冊簿地中文翻譯_第3頁
STM32固件庫使用手冊簿地中文翻譯_第4頁
STM32固件庫使用手冊簿地中文翻譯_第5頁
已閱讀5頁,還剩61頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

2、I (application programming interface 應(yīng)用編程界面 )驅(qū)動, API 對該驅(qū)動程序的 結(jié)構(gòu),函數(shù)和參數(shù)名稱都進行了標準化。所有的驅(qū)動源代碼都符合 “Strict ANSI-C”標準(項目于例文件符合擴充 ANSI-C 標準)。我 們已經(jīng)把驅(qū)動源代碼文檔化,他們同時兼容 MISRA-C 2004標準(根據(jù)需要,我們可以提 供兼容矩陣)。由于整個固態(tài)函數(shù)庫按照“Strict ANSI -C”標準編寫,它不受不同開發(fā)環(huán)境的影響。僅對話啟動文件取決于開發(fā)環(huán)境。該固態(tài)函數(shù)庫通過校驗所有庫函數(shù)的輸入值來實現(xiàn)實時錯誤檢測。 該動態(tài)校驗提高了軟件的 魯棒性。 實時檢測適合于

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

4、外設(shè)的函數(shù)。STM32F101xx 和STM32F103xx 在整個文檔中被寫作 STM32F101x 。1. 文檔和庫規(guī)本用戶手冊和固態(tài)函數(shù)庫按照以下章節(jié)所描述的規(guī)編寫。1.1縮寫Table 1. 本文檔所有縮寫定義縮寫外設(shè) /單元ADC模數(shù)轉(zhuǎn)換器BKP備份寄存器CAN控制器局域網(wǎng)模塊DMA直接存存取控制器EXTI外部中斷事件控制器FLASH閃存存儲器GPIO通用輸入輸出I2C部集成電路IWDG獨立看門狗NVIC嵌套中斷向量列表控制器PWR電源 /功耗控制RCC復(fù)位與時鐘控制器RTC實時時鐘SPI串行外設(shè)接口SysTick系統(tǒng)嘀嗒定時器TIM通用定時器TIM1高級控制定時器USART通用同步

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

6、ata 。在函數(shù)名中,只允許存在一個下劃線,用以分隔外設(shè)縮寫 和函數(shù)名的其它部分。名為PPP_Init 的函數(shù),其功能是根據(jù) PPP_InitTypeDef 中指定的參數(shù),初始化外設(shè) PPP,例 如TIM_Init .名為PPP_DeInit 的函數(shù),其功能為復(fù)位外設(shè) PPP的所有寄存器至缺省值,例如 TIM_DeInit名為 PPP_StructInit 的函數(shù),其功能為通過設(shè)置 PPP_InitTypeDef 結(jié)構(gòu)中的各種參數(shù)來定義 外設(shè)的功能,例如: USART_StructInit.名為 PPP_Cmd的函數(shù),其功能為使能或者失能外設(shè) PPP,例如: SPI_Cmd .名為 PPP_I

7、TConfig 的函數(shù),其功能為使能或者失能來自外設(shè)PPP某中斷源,例如:RCC_ITConfig .名為 PPP_DMAConfig 的函數(shù),其功能為使能或者失能外設(shè)PPP的 DMA 接口,例如:TIM1_DMAConfig .用以配置外設(shè)功能的函數(shù),總是以字符串“Config 結(jié)”尾,例如 GPIO_PinRemapConfig .名為 PPP_GetFlagStatus 的函數(shù),其功能為檢查外設(shè)PPP某標志位被設(shè)置與否,例如:I2C_GetFlagStatus .名為 PPP_ClearFlag 的函數(shù),其功能為清除外設(shè) PPP標志位,例如: I2C_ClearFlag .名為 PPP_

8、GetITStatus 的函數(shù),其功能為判斷來自外設(shè)PPP的中斷發(fā)生與否,例如:I2C_GetITStatus .名為 PPP_ClearITPendingBit 的函數(shù),其功能為清除外設(shè) PPP中斷待處理標志位,例如: I2C_ClearITPendingBit .1.3編碼規(guī)則本章節(jié)描述了固態(tài)函書庫的編碼規(guī)則。1.3.1變量固態(tài)函數(shù)庫定義了 24個變量類型,他們的類型和大小是固定的。在文件 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 標志位狀態(tài)類型在文件 stm32f10x_type.h中,我們定義標志位類型( FlagStatus type)的2個可能值為 “設(shè)置 ” 與“重置 ”(SET or RESET )。typedef enumRESET = 0,SET = !RESET FlagStatus;1.3.4 功能狀態(tài)類型 在文件 stm32f10x_type.h 中,我們定義功能狀態(tài)類

13、型( FunctionalState type)的 2個可能值 為“使能”與“失能”( ENABLE or DISABLE )。typedef enumDISABLE = 0,ENABLE = !DISABLE FunctionalState;1.3.5 錯誤狀態(tài)類型在文件 stm32f10x_type.h 中,我們錯誤狀態(tài)類型類型( ErrorStatus type)的 2個可能值為 “成 功”與“出錯”(SUCCESS or ERROR )。Typedef enumERROR = 0,SUCCESS = !ERROR ErrorStatus;1.3.6 外設(shè)用戶可以通過指向各個外設(shè)的指針訪

14、問各外設(shè)的控制寄存器。 這些指針所指向的數(shù)據(jù)結(jié)構(gòu) 與各個外設(shè)的控制寄存器布局一一對應(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é)的寄存器縮寫命名規(guī)則。RESERVEDi ( i為一個整數(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 標簽。通 過 定 義 標 簽_SPIn ,用 戶 可 以 訪 問外 設(shè) SPIn 的 寄 存 器 。例 如 , 用 戶 必 須 在 文 件 stm32f10x_conf.h 中 定 義 標 簽 _SPI2 , 否 則 是 不 能 訪 問 SPI2 的 寄 存 器 的 。 在 文 件 stm32f10x_conf.h 中,用戶可以按照下例定義標簽 _SPI 和_SPIn 。#define _SPI#define _SPI1#define _SPI2每個外設(shè)都有若干寄存器專門分配給標志位。我們按照相應(yīng)的結(jié)構(gòu)定義這些寄存器。標志 位的命名,同樣遵循上節(jié)的外設(shè)縮寫規(guī),以 PPP_

18、FLAG_ 開始。對于不同的外設(shè),標志位 都被定義在相應(yīng)的文件 stm32f10x_ppp.h 中。用戶想要進入除錯 (DEBUG )模式的話,必須在文件 stm32f10x_conf.h 中定義標簽 DEBUG 。 這樣會在 SRAM 的外設(shè)結(jié)構(gòu)部分創(chuàng)建一個指針。因此我們可以簡化除錯過程,并且通過轉(zhuǎn) 儲外設(shè)獲得來獲得所有寄存器的狀態(tài)。在所有情況下, SPI2 都是一個指向外設(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 當用戶選擇 DEBUG 模式,宏 assert_param被擴展,同時運行時間檢查功能也在固 態(tài)函數(shù)庫代碼中被激活。2 進入 DEBUG 模式會增大代碼的尺寸,降低代碼的運行效率。因此,我們強烈建議僅僅在除錯的時候使用相應(yīng)代碼,在最終的應(yīng)用程序中,刪除它們。2. 固件函數(shù)庫2.1壓縮包描述STM32F10x 固件函數(shù)庫被壓縮在一個 zip 文件中。解壓該文件會產(chǎn)生一個文件夾:STM32F10xFWLibFWLib

20、,包含如下所示的子文件夾:Figure 1 : 固件函數(shù)庫文件夾結(jié)構(gòu)2.1.1 文件夾 Examples文件夾 Examples,對應(yīng)每一個 STM32 外設(shè),都包含一個子文件夾。這些子文件夾包含了整 套文件,組成典型的例子,來示如何使用對應(yīng)外設(shè)。這些文件有:readme.txt :每個例子的簡單描述和使用說明。stm32f10x_conf.h :該頭文件設(shè)置了所有使用到的外設(shè),由不同的“ DEFINE”語句組成。stm32f10x_it.c :該源文件包含了所有的中斷處理程序(如果未使用中斷,則所有的函數(shù)體 都為空)。stm32f10x.it.h :該頭文件包含了所有的中斷處理程序的原形。

21、main.c :例程代碼。注:所有的例程的使用,都不受不同軟件開發(fā)環(huán)境的影響。2.1.2 文件夾 Library文件夾 Library 包含組成固件函數(shù)庫核心的所有子文件夾和文件: 子文件夾 inc 包含了固件函數(shù)庫所需的頭文件,用戶無需修改該文件夾: -stm32f10x_type.h :所有其他文件使用的通用數(shù)據(jù)類型和枚舉。- stm32f10x_map.h :外設(shè)存儲器映像和寄存器數(shù)據(jù)結(jié)構(gòu)。- stm32f10x_lib.h :主頭文件夾,包含了其他頭文件。- stm32f10x_ppp.h :每個外設(shè)對應(yīng)一個頭文件,包含了該外設(shè)使用的函數(shù)原形,數(shù)據(jù) 結(jié)構(gòu)和枚舉。- cortexm3_m

22、acro.h : 文件 cortexm3_macro.s 對應(yīng)的頭文件。 子文件夾 src包含了固件函數(shù)庫所需的源文件,用戶無需修改該文件夾: -stm32f10x_ppp.c :每個外設(shè)對應(yīng)一個源文件,包含了該外設(shè)使用的函數(shù)體。- stm32f10x_lib.c :初始化所有外設(shè)的指針。注:所有代碼都按照 Strict ANSI-C 標準書寫,都不受不同軟件開發(fā)環(huán)境的影響。2.1.3 文件夾 Project文件夾 Project 包含了一個標準的程序項目模板,包括庫文件的編譯和所有用戶可修改的文 件,可用以建立新的工程。- stm32f10x_conf.h :項目配置頭文件,默認為設(shè)置了所有

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

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

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

26、作用。stm32f10x_lib.c Debug 模式初始化文件。 它包括多個指針的定義,每個指針指向特定外設(shè)的首地址,以及在 Debug 模式被 使能時,被調(diào)用的函數(shù)的定義。stm32f10x_map.h 該文件包含了存儲器映像和所有寄存器物理地址的聲明,既可以用于 Debug 模式 也可以用于 release 模式。所有外設(shè)都使用該文件。stm32f10x_type.h 通用聲明文件。包含所有外設(shè)驅(qū)動使用的通用類型和常數(shù)。stm32f10x_ppp.c 由 C 語言編寫的外設(shè) PPP 的驅(qū)動源程序文件。stm32f10x_ppp.h 外設(shè) PPP的頭文件。包含外設(shè) PPP 函數(shù)的定義,和這

27、些函數(shù)使用的變量。 cortexm3_macro.h 文件 cortexm3_macro.s 的頭文件 cortexm3 macro.s Cortex-M3 核特殊指令的指令包裝。Figure 2. 固件函數(shù)庫文件體系結(jié)構(gòu)2.3 外設(shè)的初始化和設(shè)置本節(jié)按步驟描述了如何初始化和設(shè)置任意外設(shè)。這里PPP代表任意外設(shè)。1. 在主應(yīng)用文件中,聲明一個結(jié)構(gòu) PPP_InitTypeDef ,例如:PPP_InitTypeDef PPP_InitStructure;這里 PPP_InitStructure 是一個位于存中的工作變量, 用來初始化一個或者多個外設(shè) PPP。2. 為變量 PPP_InitStr

28、ucture 的各個結(jié)構(gòu)成員填入允許的值??梢圆捎靡韵?種方式:a)按照如下程序設(shè)置整個結(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)化代碼大?。篜PP_InitTypeDef PPP_InitStructure = val1, val2,., valN b)僅設(shè)置結(jié)構(gòu)體中的部分成員:這種情況下,用戶應(yīng)

29、當首先調(diào)用函數(shù)PPP_SturcInit(.) 來初始化變量 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(.) 來初始化外設(shè) PPP。4. 在這一步,外設(shè) PPP已

30、被初始化??梢哉{(diào)用函數(shù) PPP_Cmd(.)來使能之。PPP_Cmd(PPP, ENABLE); 可以通過調(diào)用一系列函數(shù)來使用外設(shè)。每個外設(shè)都擁有各自的功能函數(shù)。更多細節(jié)參閱Section3 外設(shè)固件概述。注: 1. 在設(shè)置一個外設(shè)前,必須調(diào)用以下一個函數(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(.) 來把外設(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 存儲器映像包括兩個位段 (bit-ban

32、d) 區(qū)。這兩個位段區(qū)將別名存儲器區(qū)中的每 個字映射到位段存儲器區(qū)的一個位, 在別名存儲區(qū)寫入一個字具有對位段區(qū)的目標位執(zhí) 行 讀-改-寫操作的相同效果。所有 STM32F10x 外設(shè)寄存器都被映射到一個位段 (bit-band)區(qū)。 這個特性在各個函數(shù)中對單個比特進行置1/置 0操作時被大量使用, 用以減小和優(yōu)化代碼尺寸。Section 2.4.1和Section 2.4.2 給出了外設(shè)固件函數(shù)庫中如何實現(xiàn)位段訪問的描述。2.4.1 映射公式映射公式給出 了 別名區(qū)中的每個字是如何對應(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 是目標位在存取器位段區(qū)中的位置。bit_word_addr 是別名存儲器區(qū)中字的地址,它映射到某個目標位。bit_band_base 是別名區(qū)的起始地址。byte_offset 是包含目標位的字節(jié)在位段 里 的序號。bit_number 是目標位所在位置( 0-31 )。2.4.2 應(yīng)用實例下例展現(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)編寫一個使能 /失能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 運行時間檢測固件函數(shù)庫通過檢查庫函書的輸入來實現(xiàn)運行時間錯誤偵測。通過使用宏 assert_param 來 實現(xiàn)運行時間檢測。所有要求輸入?yún)?shù)的函數(shù)都使用這個宏。它

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 并返回被錯誤調(diào)用的函數(shù) 所在的文件名和行數(shù)。如果傳給宏 assert_param 的參數(shù)為 true,則無返回值。宏 assert_param編寫于文件 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 編寫于文件 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注:運行時間檢查, 即宏 assert_param 應(yīng)當只在庫在 Debug模式下編譯時使用。 建議在用戶應(yīng)用 代碼的開發(fā)和調(diào)試階段使用運行時間檢查, 在最終的代碼中去掉

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

44、P )5.1 BKP 寄存器結(jié)構(gòu)5.2 BKP 庫函數(shù)6 控制器局域網(wǎng)( CAN )6.1 CAN 寄存器結(jié)構(gòu)6.2 CAN 庫函數(shù)7 DMA 控制器( DMA )7.1 DMA 寄存器結(jié)構(gòu)7.2 DMA 庫函數(shù)8 外部中斷 / 事件控制器( EXTI )8.1 EXTI 寄存器結(jié)構(gòu)8.2 EXTI 庫函數(shù)9 FLASH 存儲器 (FLASH)9.1 FLASH 寄存器結(jié)構(gòu)9.2 FLASH 庫函數(shù)10 通用輸入 /輸出( GPIO)GPIO驅(qū)動可以用作多個用途,包括管腳設(shè)置,單位設(shè)置/ 重置,鎖定機制,從端口管腳讀入或者向端口管腳寫入數(shù)據(jù)。Section 10.1 GPIO寄存器結(jié)構(gòu)描述了固

45、件函數(shù)庫所使用的數(shù)據(jù)結(jié)構(gòu), Section 10.2 固件庫函 數(shù)介紹了函數(shù)庫里的所有函數(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 配置寄存器五個 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模式時,初始化指針 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 */為了訪問 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 庫函數(shù)Table 179. 例舉了 GPIO 的庫函數(shù)Table 179. GPIO 庫函數(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 中的每一個參數(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ù)端口寫入數(shù)據(jù)GPIO PinLockConfig鎖定 GPIO 管腳設(shè)置寄存器GPIO EventOutputConfig選擇 GPIO 管腳用作事件輸出GPIO EventOutputCmd使能或者失能事件輸出GPIO_PinRemapConfig改變指定管腳的映射GPIO EXTILineConfig選擇 GPIO 管腳用作外部中斷線路10.2.1 函數(shù) GPIO_DeIni

溫馨提示

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

最新文檔

評論

0/150

提交評論