版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、UM0427用戶手冊32位基于ARM微控制器STM32F101xx與STM32F103xx固件函數(shù)庫介紹本手冊介紹了32位基于ARM微控制器STM32F101xx與STM32F103xx的固件函數(shù)庫。該函數(shù)庫是一個固件函數(shù)包,它由程序、數(shù)據(jù)結構和宏組成,包括了微控制器所有外設的性能特征。該函數(shù)庫還包括每一個外設的驅動描述和應用實例。通過使用本固件函數(shù)庫,無需深入掌握細節(jié),用戶也可以輕松應用每一個外設。因此,使用本固態(tài)函數(shù)庫可以大大減少用戶的程序編寫時間,進而降低開發(fā)成本。每個外設驅動都由一組函數(shù)組成,這組函數(shù)覆蓋了該外設所有功能。每個器件的開發(fā)都由一個通用API (application pr
2、ogramming interface 應用編程界面)驅動,API對該驅動程序的結構,函數(shù)和參數(shù)名稱都進行了標準化。所有的驅動源代碼都符合“Strict ANSI-C”標準(項目于范例文件符合擴充ANSI-C標準)。我們已經(jīng)把驅動源代碼文檔化,他們同時兼容MISRA-C 2004標準(根據(jù)需要,我們可以提供兼容矩陣)。由于整個固態(tài)函數(shù)庫按照“Strict ANSI-C”標準編寫,它不受不同開發(fā)環(huán)境的影響。僅對話啟動文件取決于開發(fā)環(huán)境。該固態(tài)函數(shù)庫通過校驗所有庫函數(shù)的輸入值來實現(xiàn)實時錯誤檢測。該動態(tài)校驗提高了軟件的魯棒性。實時檢測適合于用戶應用程序的開發(fā)和調試。但這會增加了成本,可以在最終應用程
3、序代碼中移去,以優(yōu)化代碼大小和執(zhí)行速度。想要了解更多細節(jié),請參閱。因為該固件庫是通用的,并且包括了所有外設的功能,所以應用程序代碼的大小和執(zhí)行速度可能不是最優(yōu)的。對大多數(shù)應用程序來說,用戶可以直接使用之,對于那些在代碼大小和執(zhí)行速度方面有嚴格要求的應用程序,該固件庫驅動程序可以作為如何設置外設的一份參考資料,根據(jù)實際需求對其進行調整。此份固件庫用戶手冊的整體架構如下:n 定義,文檔約定和固態(tài)函數(shù)庫規(guī)則。 n 固態(tài)函數(shù)庫概述(包的內容,庫的架構),安裝指南,庫使用實例。n 固件庫具體描述:設置架構和每個外設的函數(shù)。 STM32F101xx和STM32F103xx在整個文檔中被寫作STM32F10
4、1x。1.文檔和庫規(guī)范本用戶手冊和固態(tài)函數(shù)庫按照以下章節(jié)所描述的規(guī)范編寫。1.1 縮寫Table 1. 本文檔所有縮寫定義縮寫外設/單元ADC模數(shù)轉換器BKP備份寄存器CAN控制器局域網(wǎng)模塊DMA直接內存存取控制器EXTI外部中斷事件控制器FLASH閃存存儲器GPIO通用輸入輸出I2C內部集成電路IWDG獨立看門狗NVIC嵌套中斷向量列表控制器PWR電源/功耗控制RCC復位與時鐘控制器RTC實時時鐘SPI串行外設接口SysTick系統(tǒng)嘀嗒定時器TIM通用定時器TIM1高級控制定時器USART通用同步異步接收發(fā)射端WWDG窗口看門狗1.2 命名規(guī)則固態(tài)函數(shù)庫遵從以下命名規(guī)則:PPP表示任一外設縮
5、寫,例如:ADC。更多縮寫相關信息參閱章節(jié)1.1 縮寫。系統(tǒng)、源程序文件和頭文件命名都以“stm32f10x_”作為開頭,例如:。常量僅被應用于一個文件的,定義于該文件中;被應用于多個文件的,在對應頭文件中定義。所有常量都由英文字母大寫書寫。寄存器作為常量處理。他們的命名都由英文字母大寫書寫。在大多數(shù)情況下,他們采用與縮寫規(guī)范與本用戶手冊一致。外設函數(shù)的命名以該外設的縮寫加下劃線為開頭。每個單詞的第一個字母都由英文字母大寫書寫,例如:SPI_SendData。在函數(shù)名中,只允許存在一個下劃線,用以分隔外設縮寫和函數(shù)名的其它部分。名為PPP_Init的函數(shù),其功能是根據(jù)PPP_InitTypeD
6、ef中指定的參數(shù),初始化外設PPP,例如TIM_Init.名為PPP_DeInit的函數(shù),其功能為復位外設PPP的所有寄存器至缺省值,例如TIM_DeInit.名為PPP_StructInit的函數(shù),其功能為通過設置PPP_InitTypeDef 結構中的各種參數(shù)來定義外設的功能,例如:USART_StructInit.名為PPP_Cmd的函數(shù),其功能為使能或者失能外設PPP,例如:SPI_Cmd.名為PPP_ITConfig的函數(shù),其功能為使能或者失能來自外設PPP某中斷源,例如:RCC_ITConfig.名為PPP_DMAConfig的函數(shù),其功能為使能或者失能外設PPP的DMA接口,例如
7、:TIM1_DMAConfig.用以配置外設功能的函數(shù),總是以字符串“Config”結尾,例如GPIO_PinRemapConfig.名為PPP_GetFlagStatus的函數(shù),其功能為檢查外設PPP某標志位被設置與否,例如:I2C_GetFlagStatus.名為PPP_ClearFlag的函數(shù),其功能為清除外設PPP標志位,例如:I2C_ClearFlag.名為PPP_GetITStatus的函數(shù),其功能為判斷來自外設PPP的中斷發(fā)生與否,例如:I2C_GetITStatus.名為PPP_ClearITPendingBit的函數(shù),其功能為清除外設PPP中斷待處理標志位,例如:I2C_Cl
8、earITPendingBit.1.3 編碼規(guī)則本章節(jié)描述了固態(tài)函書庫的編碼規(guī)則。變量固態(tài)函數(shù)庫定義了24個變量類型,他們的類型和大小是固定的。在文件中我們定義了這些變量:typedef signed long s32;typedef signed short s16;typedef signed char s8;typedef signed long const sc32; /* Read Only */typedef signed short const sc16; /* Read Only */typedef signed char const sc8; /* Read Only */t
9、ypedef 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 short const vsc16; /* Read Only */typedef volatile signed char const vsc8; /* Read Only */typedef unsigned long u32;ty
10、pedef 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; /* Read Only */typedef volatile unsigned long vu32;typedef volatile unsigned short vu16;typedef volatile unsigned char
11、 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 */布爾型在文件中,布爾形變量被定義如下:Typedef enumFALSE = 0,TRUE = !FALSE bool;1.3.3 標志位狀態(tài)類型在文件中,我們定義標志位類型(FlagStatus type)的2個可能值為“設置”與“重
12、置”(SET or RESET)。typedef enumRESET = 0, SET = !RESET FlagStatus;1.3.4 功能狀態(tài)類型在文件中,我們定義功能狀態(tài)類型(FunctionalState type)的2個可能值為“使能”與“失能”(ENABLE or DISABLE)。typedef enumDISABLE = 0,ENABLE = !DISABLE FunctionalState;1.3.5 錯誤狀態(tài)類型在文件中,我們錯誤狀態(tài)類型類型(ErrorStatus type)的2個可能值為“成功”與“出錯”(SUCCESS or ERROR)。Typedef enum
13、ERROR = 0,SUCCESS = !ERROR ErrorStatus;1.3.6 外設用戶可以通過指向各個外設的指針訪問各外設的控制寄存器。這些指針所指向的數(shù)據(jù)結構與各個外設的控制寄存器布局一一對應。外設控制寄存器結構文件包含了所有外設控制寄存器的結構,下例為SPI寄存器結構的聲明:/*- Serial Peripheral Interface -*/typedef structvu16 CR1;u16 RESERVED0;vu16 CR2;u16 RESERVED1;vu16 SR;u16 RESERVED2;vu16 DR;u16 RESERVED3;vu16 CRCPR;u16
14、RESERVED4;vu16 RXCRCR;u16 RESERVED5;vu16 TXCRCR;u16 RESERVED6; SPI_TypeDef;寄存器命名遵循上節(jié)的寄存器縮寫命名規(guī)則。RESERVEDi(i為一個整數(shù)索引值)表示被保留區(qū)域。外設聲明文件包含了所有外設的聲明,下例為SPI外設的聲明:#ifndef EXT#DefineEXT extern#endif.#define PERIPH_BASE (u32)0x40000000)#define APB1PERIPH_BASE PERIPH_BASE#define APB2PERIPH_BASE (PERIPH_BASE + 0x1
15、0000)./* SPI2 Base Address 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 _SPI2 EXT SPI_TypeDef *SPI2;#endif /*_SPI2 */.#endif /* DEBUG */如果用戶希望使用外設
16、SPI,那么必須在文件中定義_SPI標簽。通過定義標簽_SPIn,用戶可以訪問外設SPIn的寄存器。例如,用戶必須在文件中定義標簽_SPI2,否則是不能訪問SPI2的寄存器的。在文件中,用戶可以按照下例定義標簽_SPI 和_SPIn。#define _SPI #define _SPI1 #define _SPI2每個外設都有若干寄存器專門分配給標志位。我們按照相應的結構定義這些寄存器。標志位的命名,同樣遵循上節(jié)的外設縮寫規(guī)范,以PPP_FLAG_開始。對于不同的外設,標志位都被定義在相應的文件中。用戶想要進入除錯(DEBUG)模式的話,必須在文件中定義標簽DEBUG。這樣會在SRAM的外設結構
17、部分創(chuàng)建一個指針。因此我們可以簡化除錯過程,并且通過轉儲外設獲得來獲得所有寄存器的狀態(tài)。在所有情況下,SPI2都是一個指向外設SPI2首地址的指針。變量DEBUG可以仿照下例定義:#define DEBUG 1可以初始化DEBUG模式與文件中如下:#ifdef DEBUGvoid debug(void) .#ifdef _SPI2SPI2 = (SPI_TypeDef *) SPI2_BASE;#endif /*_SPI2 */. #endif /* DEBUG*/Note:1 當用戶選擇DEBUG模式,宏assert_param被擴展,同時運行時間檢查功能也在固態(tài)函數(shù)庫代碼中被激活。2 進入
18、DEBUG模式會增大代碼的尺寸,降低代碼的運行效率。因此,我們強烈建議僅僅在除錯的時候使用相應代碼,在最終的應用程序中,刪除它們。2. 固件函數(shù)庫2.1 壓縮包描述STM32F10x固件函數(shù)庫被壓縮在一個zip文件中。解壓該文件會產(chǎn)生一個文件夾:STM32F10xFWLibFWLib,包含如下所示的子文件夾:Figure 1:固件函數(shù)庫文件夾結構2.1.1 文件夾Examples文件夾Examples,對應每一個STM32外設,都包含一個子文件夾。這些子文件夾包含了整套文件,組成典型的例子,來示范如何使用對應外設。這些文件有:每個例子的簡單描述和使用說明。:該頭文件設置了所有使用到的外設,由不
19、同的“DEFINE”語句組成。:該源文件包含了所有的中斷處理程序(如果未使用中斷,則所有的函數(shù)體都為空)。:該頭文件包含了所有的中斷處理程序的原形。:例程代碼。注:所有的例程的使用,都不受不同軟件開發(fā)環(huán)境的影響。2.1.2 文件夾Library文件夾Library包含組成固件函數(shù)庫核心的所有子文件夾和文件:n 子文件夾inc包含了固件函數(shù)庫所需的頭文件,用戶無需修改該文件夾:-:所有其他文件使用的通用數(shù)據(jù)類型和枚舉。- :外設存儲器映像和寄存器數(shù)據(jù)結構。- :主頭文件夾,包含了其他頭文件。- :每個外設對應一個頭文件,包含了該外設使用的函數(shù)原形,數(shù)據(jù)結構和枚舉。- :文件對應的頭文件。n 子文
20、件夾src包含了固件函數(shù)庫所需的源文件,用戶無需修改該文件夾:-:每個外設對應一個源文件,包含了該外設使用的函數(shù)體。- :初始化所有外設的指針。注:所有代碼都按照Strict ANSI-C標準書寫,都不受不同軟件開發(fā)環(huán)境的影響。2.1.3 文件夾Project文件夾Project包含了一個標準的程序項目模板,包括庫文件的編譯和所有用戶可修改的文件,可用以建立新的工程。- :項目配置頭文件,默認為設置了所有的外設。- :該源文件包含了所有的中斷處理程序(所有的函數(shù)體默認為空)。:該頭文件包含了所有的中斷處理程序的原形。:主函數(shù)體文件夾EWARM,RVMDK,RIDE:用于不同開發(fā)環(huán)境使用,詳情查
21、詢各文件夾下的文件。2.2 固件函數(shù)庫文件描述Table 2列舉和描述了固件函數(shù)庫使用的所有文件。固件函數(shù)庫的體系和文件相互包括的聯(lián)系表示在Figure 2中。每一個外設都有一個對應的源文件:和一個對應的頭文件:。文件包含了使用外設PPP所需的所有固件函數(shù)。提供所有外設一個存儲器映像文件。它包含了所有寄存器的聲明,既可以用于Debug模式也可以用于release模式。頭文件包含了所有外設頭文件的頭文件。它是唯一一個用戶需要包括在自己應用中的文件,起到應用和庫之間界面的作用。文件是唯一一個需要由用戶修改的文件。它作為應用和庫之間的界面,指定了一系列參數(shù)。Table 2. 固件函數(shù)庫文件描述文件名
22、描述參數(shù)設置文件,起到應用和庫之間界面的作用。用戶必須在運行自己的程序前修改該文件。 用戶可以利用模板使能或者失能外設。也可以修改外部晶振的參數(shù)。也可以是用該文件在編譯前使能Debug或者release模式。主函數(shù)體示例。頭文件,包含所有中斷處理函數(shù)原形。外設中斷函數(shù)文件。用戶可以加入自己的中斷程序代碼。對于指向同一個中斷向量的多個不同中斷請求,可以利用函數(shù)通過判斷外設的中斷標志位來確定準確的中斷源。固件函數(shù)庫提供了這些函數(shù)的名稱。包含了所有外設的頭文件的頭文件。它是唯一一個用戶需要包括在自己應用中的文件,起到應用和庫之間界面的作用。Debug模式初始化文件。它包括多個指針的定義,每個指針指向
23、特定外設的首地址,以及在Debug模式被使能時,被調用的函數(shù)的定義。該文件包含了存儲器映像和所有寄存器物理地址的聲明,既可以用于Debug模式也可以用于release模式。所有外設都使用該文件。通用聲明文件。包含所有外設驅動使用的通用類型和常數(shù)。由C語言編寫的外設PPP的驅動源程序文件。外設PPP的頭文件。包含外設PPP函數(shù)的定義,和這些函數(shù)使用的變量。Cortex-M3內核特殊指令的指令包裝。Figure 2. 固件函數(shù)庫文件體系結構2.3 外設的初始化和設置本節(jié)按步驟描述了如何初始化和設置任意外設。這里PPP代表任意外設。1.在主應用文件中,聲明一個結構PPP_InitTypeDef,例如
24、:PPP_InitTypeDef PPP_InitStructure;這里PPP_InitStructure是一個位于內存中的工作變量,用來初始化一個或者多個外設PPP。2.為變量PPP_InitStructure的各個結構成員填入允許的值??梢圆捎靡韵?種方式:a)按照如下程序設置整個結構體PPP_InitStructure.member1=val1; PPP_InitStructure.member2 = val2;PPP_InitStructure.memberN = valN;/* where N is the number of the structure members */以上步
25、驟可以合并在同一行里,用以優(yōu)化代碼大?。篜PP_InitTypeDef PPP_InitStructure = val1, val2,., valNb)僅設置結構體中的部分成員:這種情況下,用戶應當首先調用函數(shù)PPP_SturcInit(.)來初始化變量PPP_InitStructure,然后再修改其中需要修改的成員。這樣可以保證其他成員的值(多為缺省值)被正確填入。PPP_StructInit(&PPP_InitStructure);PP_InitStructure.memberX = valX;PPP_InitStructure.memberY = valY;/*where X and Y
26、 are the members the user wants to configure*/3. 調用函數(shù)PPP_Init(.)來初始化外設PPP。4. 在這一步,外設PPP已被初始化。可以調用函數(shù)PPP_Cmd(.)來使能之。PPP_Cmd(PPP, ENABLE);可以通過調用一系列函數(shù)來使用外設。每個外設都擁有各自的功能函數(shù)。更多細節(jié)參閱Section3 外設固件概述。注:1.在設置一個外設前,必須調用以下一個函數(shù)來使能它的時鐘:RCC_AHBPeriphClockCmd(RCC_AHBPeriph_PPPx,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB
27、2Periph_PPPx, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_PPPx, ENABLE);2. 可以調用函數(shù)PPP_Deinit(.)來把外設PPP的所有寄存器復位為缺省值:PPP_DeInit(PPP)3.在外設設置完成以后,繼續(xù)修改它的一些參數(shù),可以參照如下步驟:PPP_InitStucture.memberX = valX; PPP_InitStructure.memberY = valY; /* where X and Y are the onlymembers that user wants to modify*/PPP_I
28、nit(PPP, &PPP_InitStructure);2.4 位段(Bit-Banding)Cortex-M3存儲器映像包括兩個位段(bit-band)區(qū)。這兩個位段區(qū)將別名存儲器區(qū)中的每個字映射到位段存儲器區(qū)的一個位,在別名存儲區(qū)寫入一個字具有對位段區(qū)的目標位執(zhí)讀-改-寫操作的相同效果。所有STM32F10x外設寄存器都被映射到一個位段(bit-band)區(qū)。這個特性在各個函數(shù)中對單個比特進行置1/置0操作時被大量使用,用以減小和優(yōu)化代碼尺寸。和給出了外設固件函數(shù)庫中如何實現(xiàn)位段訪問的描述。2.4.1 映射公式映射公式給出別名區(qū)中的每個字是如何對應位帶區(qū)的相應位的,公式如下:bit_wo
29、rd_offset = (byte_offset x 32) + (bit_number 4)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 應用實例下例展現(xiàn)了如何把寄存器RCC_CR的PLLON24位,映射到別名區(qū):/* Peripheral
30、 base address in the bit-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
31、PLLON bit */#define CR_OFFSET (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 (NewSt
32、ate != DISABLE) /* Enable 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 運行時間檢測固件函數(shù)庫通過檢查庫函書的輸入來實現(xiàn)運行時間錯誤偵測。通過使用宏assert_param來實
33、現(xiàn)運行時間檢測。所有要求輸入?yún)?shù)的函數(shù)都使用這個宏。它可以檢查輸入?yún)?shù)是否在允許的范圍之內。例:函數(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)0x0000000
34、2) #define PWR_FLAG_PVDO (u32)0x00000004)#define IS_PWR_CLEAR_FLAG(FLAG) (FLAG = PWR_FLAG_WU) | (FLAG = PWR_FLAG_SB)如果傳給宏assert_param的參數(shù)為false,則調用函數(shù)assert_failed并返回被錯誤調用的函數(shù)所在的文件名和行數(shù)。如果傳給宏assert_param的參數(shù)為true,則無返回值。宏assert_param編寫于文件中:/* Exported macro -*/#ifdef DEBUG/* * * Macro Name : assert_param
35、* Description : 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 faile
36、d. * 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編寫于文件或者其他用戶C文件:#ifdef
37、 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
38、assert_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應當只在庫在Debug模式下編譯時使用。建議在用戶應用代碼的開發(fā)和調試階段使用運行時間檢查,在最終的代碼中去掉它們以改
39、進代碼尺寸和速度。如果用戶仍然希望在最終的代碼中保留這項功能,可以在調用庫函數(shù)前,重新使用宏assert_param來測試輸入?yún)?shù)。3. 外設固件概述本節(jié)系統(tǒng)描述了每一個外設固件函數(shù)庫。完整地描述所有相關函數(shù)并提供如何使用他們的例子。函數(shù)的描述按如下格式進行:Table 3.函數(shù)描述格式函數(shù)名外設函數(shù)的名稱函數(shù)原形原形聲明功能描述簡要解釋函數(shù)是如何執(zhí)行的輸入?yún)?shù)x輸入?yún)?shù)描述輸出參數(shù)x輸出參數(shù)描述返回值函數(shù)的返回值先決條件調用函數(shù)前應滿足的要求被調用函數(shù)其他被該函數(shù)調用的庫函數(shù)4. 模擬/數(shù)字轉換器4.1 ADC寄存器結構4.2 ADC庫函數(shù)5. 備份寄存器(BKP)5.1 BKP寄存器結構5
40、.2 BKP庫函數(shù)6控制器局域網(wǎng)(CAN) CAN寄存器結構6.2 CAN庫函數(shù)7 DMA控制器(DMA)7.1 DMA寄存器結構7.2 DMA庫函數(shù)8 外部中斷/事件控制器(EXTI)8.1 EXTI寄存器結構8.2 EXTI庫函數(shù)9 FLASH存儲器(FLASH)9.1 FLASH寄存器結構9.2 FLASH庫函數(shù)10 通用輸入/輸出(GPIO)GPIO驅動可以用作多個用途,包括管腳設置,單位設置/重置,鎖定機制,從端口管腳讀入或者向端口管腳寫入數(shù)據(jù)。Section 10.1 GPIO寄存器結構描述了固件函數(shù)庫所使用的數(shù)據(jù)結構,Section 10.2 固件庫函數(shù)介紹了函數(shù)庫里的所有函數(shù)。
41、10.1 GPIO寄存器結構GPIO寄存器結構,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寄存器寄存器描述CRL端口配置低寄存器CRH端口
42、配置高寄存器IDR端口輸入數(shù)據(jù)寄存器ODR端口輸出數(shù)據(jù)寄存器BSRR端口位設置/復位寄存器BRR端口位復位寄存器LCKR端口配置鎖定寄存器EVCR事件控制寄存器MAPR復用重映射和調試I/O配置寄存器EXTICR外部中斷線路0-15配置寄存器五個GPIO外設聲明于文件“stm32f10x_map.h”:.#define PERIPH_BASE (u32)0x40000000) #define APB1PERIPH_BASE PERIPH_BASE #define APB2PERIPH_BASE (PERIPH_BASE + 0x10000) #define AHBPERIPH_BASE (PE
43、RIPH_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 + 0x1800) #ifn
44、def 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_BASE) #endif /*_
45、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 /*_GPIOA */ #ifdef
46、_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模式時,初始化指針AFIO, GPIOA, GPIOB, GPIOC, GPIOD 和GPIOE 于文件“stm32f10x
47、_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 */#ifdef _GPIOE
48、GPIOE = (GPIO_TypeDef *) GPIOE_BASE; #endif /*_GPIOE */#ifdef _AFIO AFIO = (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#define _GPIO
49、E #define _AFIO10.2 GPIO庫函數(shù)Table 179. 例舉了GPIO的庫函數(shù)Table 179. GPIO庫函數(shù)函數(shù)名描述GPIO_DeInit將外設GPIOx寄存器重設為缺省值GPIO_AFIODeInit將復用功能(重映射事件控制和EXTI設置)重設為缺省值GPIO_Init根據(jù)GPIO_InitStruct中指定的參數(shù)初始化外設GPIOx寄存器GPIO_StructInit把GPIO_InitStruct中的每一個參數(shù)按缺省值填入GPIO_ReadInputDataBit讀取指定端口管腳的輸入GPIO_ReadInputData讀取指定的GPIO端口輸入GPIO_R
50、eadOutputDataBit讀取指定端口管腳的輸出GPIO_ReadOutputData讀取指定的GPIO端口輸出GPIO_SetBits設置指定的數(shù)據(jù)端口位GPIO_ResetBits清除指定的數(shù)據(jù)端口位GPIO_WriteBit設置或者清除指定的數(shù)據(jù)端口位GPIO_Write向指定GPIO數(shù)據(jù)端口寫入數(shù)據(jù)GPIO_PinLockConfig鎖定GPIO管腳設置寄存器GPIO_EventOutputConfig選擇GPIO管腳用作事件輸出GPIO_EventOutputCmd使能或者失能事件輸出GPIO_PinRemapConfig改變指定管腳的映射GPIO_EXTILineConfig
51、選擇GPIO管腳用作外部中斷線路10.2.1 函數(shù)GPIO_DeInitTable 180. 描述了函數(shù)GPIO_DeInit函數(shù)名GPIO_DeInit函數(shù)原形void GPIO_DeInit(GPIO_TypeDef* GPIOx)功能描述將外設GPIOx寄存器重設為缺省值輸入?yún)?shù)GPIOx:x可以是A,B,C,D或者E,來選擇GPIO外設輸出參數(shù)無返回值無先決條件無被調用函數(shù)RCC_APB2PeriphResetCmd()例:/* Resets the GPIOA peripheral registers to their default reset values */ GPIO_DeI
52、nit(GPIOA);10.2.2 函數(shù)GPIO_AFIODeInitTable 181. 描述了函數(shù)GPIO_AFIODeInitTable 181. 函數(shù)GPIO_AFIODeInit函數(shù)名GPIO_AFIODeInit函數(shù)原形void GPIO_AFIODeInit(void)功能描述將復用功能(重映射事件控制和EXTI設置)重設為缺省值輸入?yún)?shù)無輸出參數(shù)無返回值無先決條件無被調用函數(shù)RCC_APB2PeriphResetCmd()例:/* Resets the Alternate functions registers to their default resetvalues */GP
53、IO_AFIODeInit();10.2.3 函數(shù)GPIO_InitTable 182. 描述了函數(shù)GPIO_InitTable 182. 函數(shù)GPIO_Init函數(shù)名GPIO_Init函數(shù)原形void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)功能描述根據(jù)GPIO_InitStruct中指定的參數(shù)初始化外設GPIOx寄存器輸入?yún)?shù)1GPIOx:x可以是A,B,C,D或者E,來選擇GPIO外設輸入?yún)?shù)2GPIO_InitStruct:指向結構GPIO_InitTypeDef的指針,包含了外設GPIO的配置信息參閱Section:GPIO_InitTypeDef查閱更多該參數(shù)允許取值范圍輸出參數(shù)無返回值無先決條件
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 游輪旅游品牌文化傳承與創(chuàng)新-洞察分析
- 陶瓷產(chǎn)業(yè)國際化合作模式-洞察分析
- 音樂舞蹈藝術在文化創(chuàng)意產(chǎn)業(yè)中的角色定位-洞察分析
- 隧道隧道開挖技術-洞察分析
- 輿情話題識別性能評估-洞察分析
- 新風系統(tǒng)能源效率提升-洞察分析
- 音樂家肖像權法律研究-洞察分析
- 二零二五年度智能家居抹灰裝修承包合同4篇
- 一年級數(shù)學(上)計算題專項練習集錦
- 一年級數(shù)學計算題專項練習匯編
- 部編版六年級下冊道德與法治全冊教案教學設計
- 【高空拋物侵權責任規(guī)定存在的問題及優(yōu)化建議7100字(論文)】
- 二年級數(shù)學上冊100道口算題大全 (每日一套共26套)
- 物流無人機垂直起降場選址與建設規(guī)范
- 肺炎臨床路徑
- 外科手術鋪巾順序
- 創(chuàng)新者的窘境讀書課件
- 聚焦任務的學習設計作業(yè)改革新視角
- 移動商務內容運營(吳洪貴)任務三 APP的品牌建立與價值提供
- 電子競技范文10篇
- 食堂服務質量控制方案與保障措施
評論
0/150
提交評論