版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
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ù)庫,無需進(jìn)一步掌握細(xì)節(jié),用戶也可以輕松應(yīng)用每一個外設(shè)。因此,使用本固態(tài)函數(shù)庫可以大大減少用戶的程序編寫時間,進(jìn)而減少開發(fā)成本。每個外設(shè)驅(qū)動都由一組函數(shù)組成,這組函數(shù)覆蓋了該外設(shè)所有功能。每個器件的開發(fā)都由一個通用API(applicationprogramminginterface應(yīng)用編程界面)驅(qū)動,API對該驅(qū)動程序的結(jié)構(gòu),函數(shù)和參數(shù)名稱都進(jìn)行了標(biāo)準(zhǔn)化。所有的驅(qū)動源代碼都符合“StrictANSI-C”標(biāo)準(zhǔn)(項目于范例文獻(xiàn)符合擴充ANSI-C標(biāo)準(zhǔn))。我們已經(jīng)把驅(qū)動源代碼文檔化,他們同時兼容MISRA-C2023標(biāo)準(zhǔn)(根據(jù)需要,我們可以提供兼容矩陣)。由于整個固態(tài)函數(shù)庫按照“StrictANSI-C”標(biāo)準(zhǔn)編寫,它不受不同開發(fā)環(huán)境的影響。僅對話啟動文獻(xiàn)取決于開發(fā)環(huán)境。該固態(tài)函數(shù)庫通過校驗所有庫函數(shù)的輸入值來實現(xiàn)實時錯誤檢測。該動態(tài)校驗提高了軟件的魯棒性。實時檢測適合于用戶應(yīng)用程序的開發(fā)和調(diào)試。但這會增長了成本,可以在最終應(yīng)用程序代碼中移去,以優(yōu)化代碼大小和執(zhí)行速度。想要了解更多細(xì)節(jié),請參閱Section2.5。由于該固件庫是通用的,并且涉及了所有外設(shè)的功能,所以應(yīng)用程序代碼的大小和執(zhí)行速度也許不是最優(yōu)的。對大多數(shù)應(yīng)用程序來說,用戶可以直接使用之,對于那些在代碼大小和執(zhí)行速度方面有嚴(yán)格規(guī)定的應(yīng)用程序,該固件庫驅(qū)動程序可以作為如何設(shè)立外設(shè)的一份參考資料,根據(jù)實際需求對其進(jìn)行調(diào)整。此份固件庫用戶手冊的整體架構(gòu)如下:定義,文檔約定和固態(tài)函數(shù)庫規(guī)則。固態(tài)函數(shù)庫概述(包的內(nèi)容,庫的架構(gòu)),安裝指南,庫使用實例。固件庫具體描述:設(shè)立架構(gòu)和每個外設(shè)的函數(shù)。STM32F101xx和STM32F103xx在整個文檔中被寫作STM32F101x。1.文檔和庫規(guī)范本用戶手冊和固態(tài)函數(shù)庫按照以下章節(jié)所描述的規(guī)范編寫??s寫Table1.本文檔所有縮寫定義縮寫外設(shè)/單元ADC模數(shù)轉(zhuǎn)換器BKP備份寄存器CAN控制器局域網(wǎng)模塊DMA直接內(nèi)存存取控制器EXTI外部中斷事件控制器FLASH閃存存儲器GPIO通用輸入輸出I2C內(nèi)部集成電路IWDG獨立看門狗NVIC嵌套中斷向量列表控制器PWR電源/功耗控制RCC復(fù)位與時鐘控制器RTC實時時鐘SPI串行外設(shè)接口SysTick系統(tǒng)嘀嗒定期器TIM通用定期器TIM1高級控制定期器USART通用同步異步接受發(fā)射端WWDG窗口看門狗命名規(guī)則固態(tài)函數(shù)庫遵從以下命名規(guī)則:PPP表達(dá)任一外設(shè)縮寫,例如:ADC。更多縮寫相關(guān)信息參閱章節(jié)1.1縮寫。系統(tǒng)、源程序文獻(xiàn)和頭文獻(xiàn)命名都以“stm32f10x_”作為開頭,例如:stm32f10x_conf.h。常量僅被應(yīng)用于一個文獻(xiàn)的,定義于該文獻(xiàn)中;被應(yīng)用于多個文獻(xiàn)的,在相應(yīng)頭文獻(xiàn)中定義。所有常量都由英文字母大寫書寫。寄存器作為常量解決。他們的命名都由英文字母大寫書寫。在大多數(shù)情況下,他們采用與縮寫規(guī)范與本用戶手冊一致。外設(shè)函數(shù)的命名以該外設(shè)的縮寫加下劃線為開頭。每個單詞的第一個字母都由英文字母大寫書寫,例如:SPI_SendData。在函數(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_ITConfig的函數(shù),其功能為使能或者失能來自外設(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ù),其功能為判斷來自外設(shè)PPP的中斷發(fā)生與否,例如:I2C_GetITStatus.名為PPP_ClearITPendingBit的函數(shù),其功能為清除外設(shè)PPP中斷待解決標(biāo)志位,例如:I2C_ClearITPendingBit.編碼規(guī)則本章節(jié)描述了固態(tài)函書庫的編碼規(guī)則。1.3.1變量固態(tài)函數(shù)庫定義了24個變量類型,他們的類型和大小是固定的。在文獻(xiàn)stm32f10x_type.h中我們定義了這些變量:typedefsignedlongs32;typedefsignedshorts16;typedefsignedchars8;typedefsignedlongconstsc32;/*ReadOnly*/typedefsignedshortconstsc16;/*ReadOnly*/typedefsignedcharconstsc8;/*ReadOnly*/typedefvolatilesignedlongvs32;typedefvolatilesignedshortvs16;typedefvolatilesignedcharvs8;typedefvolatilesignedlongconstvsc32;/*ReadOnly*/typedefvolatilesignedshortconstvsc16;/*ReadOnly*/typedefvolatilesignedcharconstvsc8;/*ReadOnly*/typedefunsignedlongu32;typedefunsignedshortu16;typedefunsignedcharu8;typedefunsignedlongconstuc32;/*ReadOnly*/typedefunsignedshortconstuc16;/*ReadOnly*/typedefunsignedcharconstuc8;/*ReadOnly*/typedefvolatileunsignedlongvu32;typedefvolatileunsignedshortvu16;typedefvolatileunsignedcharvu8;typedefvolatileunsignedlongconstvuc32;/*ReadOnly*/typedefvolatileunsignedshortconstvuc16;/*ReadOnly*/typedefvolatileunsignedcharconstvuc8;/*ReadOnly*/1.3.2布爾型在文獻(xiàn)stm32f10x_type.h中,布爾形變量被定義如下:Typedefenum{FALSE=0,TRUE=!FALSE}bool;1.3.3標(biāo)志位狀態(tài)類型在文獻(xiàn)stm32f10x_type.h中,我們定義標(biāo)志位類型(FlagStatustype)的2個也許值為“設(shè)立”與“重置”(SETorRESET)。typedefenum{RESET=0,SET=!RESET}FlagStatus;1.3.4功能狀態(tài)類型在文獻(xiàn)stm32f10x_type.h中,我們定義功能狀態(tài)類型(FunctionalStatetype)的2個也許值為“使能”與“失能”(ENABLEorDISABLE)。typedefenum{DISABLE=0,ENABLE=!DISABLE}FunctionalState;1.3.5錯誤狀態(tài)類型在文獻(xiàn)stm32f10x_type.h中,我們錯誤狀態(tài)類型類型(ErrorStatustype)的2個也許值為“成功”與“犯錯”(SUCCESSorERROR)。Typedefenum{ERROR=0,SUCCESS=!ERROR}ErrorStatus;1.3.6外設(shè)用戶可以通過指向各個外設(shè)的指針訪問各外設(shè)的控制寄存器。這些指針?biāo)赶虻臄?shù)據(jù)結(jié)構(gòu)與各個外設(shè)的控制寄存器布局一一相應(yīng)。外設(shè)控制寄存器結(jié)構(gòu)文獻(xiàn)stm32f10x_map.h包含了所有外設(shè)控制寄存器的結(jié)構(gòu),下例為SPI寄存器結(jié)構(gòu)的聲明:/*--------------------------------SerialPeripheralInterface-----------------------------*/typedefstruct{vu16CR1;u16RESERVED0;vu16CR2;u16RESERVED1;vu16SR;u16RESERVED2;vu16DR;u16RESERVED3;vu16CRCPR;u16RESERVED4;vu16RXCRCR;u16RESERVED5;vu16TXCRCR;u16RESERVED6;}SPI_TypeDef;寄存器命名遵循上節(jié)的寄存器縮寫命名規(guī)則。RESERVEDi(i為一個整數(shù)索引值)表達(dá)被保存區(qū)域。外設(shè)聲明文獻(xiàn)stm32f10x_map.h包含了所有外設(shè)的聲明,下例為SPI外設(shè)的聲明:#ifndefEXT#DefineEXTextern#endif......#definePERIPH_BASE((u32)0x40000000)#defineAPB1PERIPH_BASEPERIPH_BASE#defineAPB2PERIPH_BASE(PERIPH_BASE+0x10000)....../*SPI2BaseAddressdefinition*/#defineSPI2_BASE(APB1PERIPH_BASE+0x3800)....../*SPI2peripheraldeclaration*/#ifndefDEBUG......#ifdef_SPI2#defineSPI2((SPI_TypeDef*)SPI2_BASE)#endif/*_SPI2*/......#else/*DEBUG*/…...#ifdef_SPI2EXTSPI_TypeDef*SPI2;#endif/*_SPI2*/…...#endif/*DEBUG*/假如用戶希望使用外設(shè)SPI,那么必須在文獻(xiàn)stm32f10x_conf.h中定義_SPI標(biāo)簽。通過定義標(biāo)簽_SPIn,用戶可以訪問外設(shè)SPIn的寄存器。例如,用戶必須在文獻(xiàn)stm32f10x_conf.h中定義標(biāo)簽_SPI2,否則是不能訪問SPI2的寄存器的。在文獻(xiàn)stm32f10x_conf.h中,用戶可以按照下例定義標(biāo)簽_SPI和_SPIn。#define_SPI#define_SPI1#define_SPI2每個外設(shè)都有若干寄存器專門分派給標(biāo)志位。我們按照相應(yīng)的結(jié)構(gòu)定義這些寄存器。標(biāo)志位的命名,同樣遵循上節(jié)的外設(shè)縮寫規(guī)范,以‘PPP_FLAG_’開始。對于不同的外設(shè),標(biāo)志位都被定義在相應(yīng)的文獻(xiàn)stm32f10x_ppp.h中。用戶想要進(jìn)入除錯(DEBUG)模式的話,必須在文獻(xiàn)stm32f10x_conf.h中定義標(biāo)簽DEBUG。這樣會在SRAM的外設(shè)結(jié)構(gòu)部分創(chuàng)建一個指針。因此我們可以簡化除錯過程,并且通過轉(zhuǎn)儲外設(shè)獲得來獲得所有寄存器的狀態(tài)。在所有情況下,SPI2都是一個指向外設(shè)SPI2首地址的指針。變量DEBUG可以仿照下例定義:#defineDEBUG1可以初始化DEBUG模式與文獻(xiàn)stm32f10x_lib.c中如下:#ifdefDEBUGvoiddebug(void){......#ifdef_SPI2SPI2=(SPI_TypeDef*)SPI2_BASE;#endif/*_SPI2*/......}#endif/*DEBUG*/Note:1當(dāng)用戶選擇DEBUG模式,宏assert_param被擴展,同時運營時間檢查功能也在固態(tài)函數(shù)庫代碼中被激活。2進(jìn)入DEBUG模式會增大代碼的尺寸,減少代碼的運營效率。因此,我們強烈建議僅僅在除錯的時候使用相應(yīng)代碼,在最終的應(yīng)用程序中,刪除它們。固件函數(shù)庫壓縮包描述STM32F10x固件函數(shù)庫被壓縮在一個zip文獻(xiàn)中。解壓該文獻(xiàn)會產(chǎn)生一個文獻(xiàn)夾:STM32F10xFWLib\FWLib,包含如下所示的子文獻(xiàn)夾:Figure1:固件函數(shù)庫文獻(xiàn)夾結(jié)構(gòu)文獻(xiàn)夾Examples文獻(xiàn)夾Examples,相應(yīng)每一個STM32外設(shè),都包含一個子文獻(xiàn)夾。這些子文獻(xiàn)夾包含了整套文獻(xiàn),組成典型的例子,來示范如何使用相應(yīng)外設(shè)。這些文獻(xiàn)有:readme.txt:每個例子的簡樸描述和使用說明。stm32f10x_conf.h:該頭文獻(xiàn)設(shè)立了所有使用到的外設(shè),由不同的“DEFINE”語句組成。stm32f10x_it.c:該源文獻(xiàn)包含了所有的中斷解決程序(假如未使用中斷,則所有的函數(shù)體都為空)。stm32f10x.it.h:該頭文獻(xiàn)包含了所有的中斷解決程序的原形。main.c:例程代碼。注:所有的例程的使用,都不受不同軟件開發(fā)環(huán)境的影響。文獻(xiàn)夾Library文獻(xiàn)夾Library包含組成固件函數(shù)庫核心的所有子文獻(xiàn)夾和文獻(xiàn):子文獻(xiàn)夾inc包含了固件函數(shù)庫所需的頭文獻(xiàn),用戶無需修改該文獻(xiàn)夾:-stm32f10x_type.h:所有其他文獻(xiàn)使用的通用數(shù)據(jù)類型和枚舉。-stm32f10x_map.h:外設(shè)存儲器映像和寄存器數(shù)據(jù)結(jié)構(gòu)。-stm32f10x_lib.h:主頭文獻(xiàn)夾,包含了其他頭文獻(xiàn)。-stm32f10x_ppp.h:每個外設(shè)相應(yīng)一個頭文獻(xiàn),包含了該外設(shè)使用的函數(shù)原形,數(shù)據(jù)結(jié)構(gòu)和枚舉。-cortexm3_macro.h:文獻(xiàn)cortexm3_macro.s相應(yīng)的頭文獻(xiàn)。子文獻(xiàn)夾src包含了固件函數(shù)庫所需的源文獻(xiàn),用戶無需修改該文獻(xiàn)夾:-stm32f10x_ppp.c:每個外設(shè)相應(yīng)一個源文獻(xiàn),包含了該外設(shè)使用的函數(shù)體。-stm32f10x_lib.c:初始化所有外設(shè)的指針。注:所有代碼都按照StrictANSI-C標(biāo)準(zhǔn)書寫,都不受不同軟件開發(fā)環(huán)境的影響。文獻(xiàn)夾Project文獻(xiàn)夾Project包含了一個標(biāo)準(zhǔn)的程序項目模板,涉及庫文獻(xiàn)的編譯和所有用戶可修改的文獻(xiàn),可用以建立新的工程。-stm32f10x_conf.h:項目配置頭文獻(xiàn),默認(rèn)為設(shè)立了所有的外設(shè)。-stm32f10x_it.c:該源文獻(xiàn)包含了所有的中斷解決程序(所有的函數(shù)體默認(rèn)為空)。stm32f10x_it.h:該頭文獻(xiàn)包含了所有的中斷解決程序的原形。main.c:主函數(shù)體文獻(xiàn)夾EWARM,RVMDK,RIDE:用于不同開發(fā)環(huán)境使用,詳情查詢各文獻(xiàn)夾下的文獻(xiàn)readme.txt。固件函數(shù)庫文獻(xiàn)描述Table2列舉和描述了固件函數(shù)庫使用的所有文獻(xiàn)。固件函數(shù)庫的體系和文獻(xiàn)互相涉及的聯(lián)系表達(dá)在Figure2中。每一個外設(shè)都有一個相應(yīng)的源文獻(xiàn):stm32f10x_ppp.c和一個相應(yīng)的頭文獻(xiàn):stm32f10x_ppp.h。文獻(xiàn)stm32f10x_ppp.c包含了使用外設(shè)PPP所需的所有固件函數(shù)。提供所有外設(shè)一個存儲器映像文獻(xiàn)stm32f10x_map.h。它包含了所有寄存器的聲明,既可以用于Debug模式也可以用于release模式。頭文獻(xiàn)stm32f10x_lib.h包含了所有外設(shè)頭文獻(xiàn)的頭文獻(xiàn)。它是唯一一個用戶需要涉及在自己應(yīng)用中的文獻(xiàn),起到應(yīng)用和庫之間界面的作用。文獻(xiàn)stm32f10x_conf.h是唯一一個需要由用戶修改的文獻(xiàn)。它作為應(yīng)用和庫之間的界面,指定了一系列參數(shù)。Table2.固件函數(shù)庫文獻(xiàn)描述文獻(xiàn)名描述stm32f10x_conf.h參數(shù)設(shè)立文獻(xiàn),起到應(yīng)用和庫之間界面的作用。
用戶必須在運營自己的程序前修改該文獻(xiàn)。
用戶可以運用模板使能或者失能外設(shè)。也可以修改外部晶振的參數(shù)。
也可以是用該文獻(xiàn)在編譯前使能Debug或者release模式。main.c主函數(shù)體示例。stm32f10x_it.h頭文獻(xiàn),包含所有中斷解決函數(shù)原形。stm32f10x_it.c外設(shè)中斷函數(shù)文獻(xiàn)。
用戶可以加入自己的中斷程序代碼。對于指向同一個中斷向量的多個不同中斷請
求,可以運用函數(shù)通過判斷外設(shè)的中斷標(biāo)志位來擬定準(zhǔn)確的中斷源。固件函數(shù)庫
提供了這些函數(shù)的名稱。stm32f10x_lib.h包含了所有外設(shè)的頭文獻(xiàn)的頭文獻(xiàn)。
它是唯一一個用戶需要涉及在自己應(yīng)用中的文獻(xiàn),起到應(yīng)用和庫之間界面的作用。stm32f10x_lib.cDebug模式初始化文獻(xiàn)。
它涉及多個指針的定義,每個指針指向特定外設(shè)的首地址,以及在Debug模式被
使能時,被調(diào)用的函數(shù)的定義。stm32f10x_map.h該文獻(xiàn)包含了存儲器映像和所有寄存器物理地址的聲明,既可以用于Debug模式
也可以用于release模式。所有外設(shè)都使用該文獻(xiàn)。stm32f10x_type.h通用聲明文獻(xiàn)。
包含所有外設(shè)驅(qū)動使用的通用類型和常數(shù)。stm32f10x_ppp.c由C語言編寫的外設(shè)PPP的驅(qū)動源程序文獻(xiàn)。stm32f10x_ppp.h外設(shè)PPP的頭文獻(xiàn)。包含外設(shè)PPP函數(shù)的定義,和這些函數(shù)使用的變量。cortexm3_macro.h文獻(xiàn)cortexm3_macro.s的頭文獻(xiàn)cortexm3_macro.sCortex-M3內(nèi)核特殊指令的指令包裝。Figure2.固件函數(shù)庫文獻(xiàn)體系結(jié)構(gòu)2.3外設(shè)的初始化和設(shè)立本節(jié)按環(huán)節(jié)描述了如何初始化和設(shè)立任意外設(shè)。這里PPP代表任意外設(shè)。1.在主應(yīng)用文獻(xiàn)中,聲明一個結(jié)構(gòu)PPP_InitTypeDef,例如:PPP_InitTypeDefPPP_InitStructure;這里PPP_InitStructure是一個位于內(nèi)存中的工作變量,用來初始化一個或者多個外設(shè)PPP。2.為變量PPP_InitStructure的各個結(jié)構(gòu)成員填入允許的值??梢圆捎靡韵?種方式:a)按照如下程序設(shè)立整個結(jié)構(gòu)體PPP_InitStructure.member1=val1;PPP_InitStructure.member2=val2;PPP_InitStructure.memberN=valN;/*whereNisthenumberofthestructuremembers*/以上環(huán)節(jié)可以合并在同一行里,用以優(yōu)化代碼大小:PPP_InitTypeDefPPP_InitStructure={val1,val2,..,valN}b)僅設(shè)立結(jié)構(gòu)體中的部提成員:這種情況下,用戶應(yīng)當(dāng)一方面調(diào)用函數(shù)PPP_SturcInit(..)來初始化變量PPP_InitStructure,然后再修改其中需要修改的成員。這樣可以保證其他成員的值(多為缺省值)被對的填入。PPP_StructInit(&PPP_InitStructure);PP_InitStructure.memberX=valX;PPP_InitStructure.memberY=valY;/*whereXandYarethememberstheuserwantstoconfigure*/3.調(diào)用函數(shù)PPP_Init(..)來初始化外設(shè)PPP。4.在這一步,外設(shè)PPP已被初始化??梢哉{(diào)用函數(shù)PPP_Cmd(..)來使能之。PPP_Cmd(PPP,ENABLE);可以通過調(diào)用一系列函數(shù)來使用外設(shè)。每個外設(shè)都擁有各自的功能函數(shù)。更多細(xì)節(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ù)PPP_Deinit(..)來把外設(shè)PPP的所有寄存器復(fù)位為缺省值:PPP_DeInit(PPP)3.在外設(shè)設(shè)立完畢以后,繼續(xù)修改它的一些參數(shù),可以參照如下環(huán)節(jié):PPP_InitStucture.memberX=valX;PPP_InitStructure.memberY=valY;/*whereXandYaretheonlymembersthatuserwantstomodify*/PPP_Init(PPP,&PPP_InitStructure);2.4位段(Bit-Banding)Cortex?-M3存儲器映像涉及兩個位段(bit-band)區(qū)。這兩個位段區(qū)將別名存儲器區(qū)中的每個字映射到位段存儲器區(qū)的一個位,在別名存儲區(qū)寫入一個字具有對位段區(qū)的目的位執(zhí)行讀-改-寫操作的相同效果。所有STM32F10x外設(shè)寄存器都被映射到一個位段(bit-band)區(qū)。這個特性在各個函數(shù)中對單個比特進(jìn)行置1/置0操作時被大量使用,用以減小和優(yōu)化代碼尺寸。Section2.4.1和Section2.4.2給出了外設(shè)固件函數(shù)庫中如何實現(xiàn)位段訪問的描述。2.4.1映射公式映射公式給出了別名區(qū)中的每個字是如何相應(yīng)位帶區(qū)的相應(yīng)位的,公式如下:bit_word_offset=(byte_offsetx32)+(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應(yīng)用實例下例展現(xiàn)了如何把寄存器RCC_CR的PLLON[24]位,映射到別名區(qū):/*Peripheralbaseaddressinthebit-bandregion*/#definePERIPH_BASE((u32)0x40000000)/*Peripheraladdressinthealiasregion*/#definePERIPH_BB_BASE((u32)0x42023000)/*-----RCCregistersbitaddressinthealiasregion------*/#defineRCC_OFFSET(RCC_BASE-PERIPH_BASE)/*---CRRegister---*//*AliaswordaddressofPLLONbit*/#defineCR_OFFSET(RCC_OFFSET+0x00)#definePLLON_BitNumber0x18#defineCR_PLLON_BB(PERIPH_BB_BASE+(CR_OFFSET*32(PLLON_BitNumber*4))編寫一個使能/失能PLL的函數(shù),環(huán)節(jié)如下:...#defineCR_PLLON_Set((u32)0x01000000)#defineCR_PLLON_Reset((u32)0xFEFFFFFF)...voidRCC_PLLCmd(FunctionalStateNewState){if(NewState!=DISABLE){/*EnablePLL*/RCC->CR|=CR_PLLON_Set;}else{/*DisablePLL*/RCC->CR&=CR_PLLON_Reset;}}Usingbit-bandaccessthisfunctionwillbecodedasfollows:voidRCC_PLLCmd(FunctionalStateNewState){*(vu32*)CR_PLLON_BB=(u32)NewState;}2.5運營時間檢測固件函數(shù)庫通過檢查庫函書的輸入來實現(xiàn)運營時間錯誤偵測。通過使用宏assert_param來實現(xiàn)運營時間檢測。所有規(guī)定輸入?yún)?shù)的函數(shù)都使用這個宏。它可以檢查輸入?yún)?shù)是否在允許的范圍之內(nèi)。例:函數(shù)PWR_ClearFlagstm32f10x_pwr.c:voidPWR_ClearFlag(u32PWR_FLAG){/*Checktheparameters*/assert_param(IS_PWR_CLEAR_FLAG(PWR_FLAG));PWR->CR|=PWR_FLAG<<2;}stm32f10x_pwr.h:/*PWRFlag*/#definePWR_FLAG_WU((u32)0x00000001)#definePWR_FLAG_SB((u32)0x00000002)#definePWR_FLAG_PVDO((u32)0x00000004)#defineIS_PWR_CLEAR_FLAG(FLAG)((FLAG==PWR_FLAG_WU)||(FLAG==PWR_FLAG_SB)假如傳給宏assert_param的參數(shù)為false,則調(diào)用函數(shù)assert_failed并返回被錯誤調(diào)用的函數(shù)所在的文獻(xiàn)名和行數(shù)。假如傳給宏assert_param的參數(shù)為true,則無返回值。宏assert_param編寫于文獻(xiàn)stm32f10x_conf.h中:/*Exportedmacro------------------------------------------------------------*/#ifdefDEBUG/*********************************************************************************MacroName:assert_param*Description:Theassert_parammacroisusedforfunction'sparameterscheck.*ItisusedonlyifthelibraryiscompiledinDEBUGmode.*Input:-expr:Ifexprisfalse,itcallsassert_failedfunction.*whichreportsthenameofthesourcefileandthesource*linenumberofthecallthatfailed.*Ifexpristrue,itreturnsnovalue.*Return:None*******************************************************************************/#defineassert_param(expr)((expr)?(void)0:assert_failed((u8*)__FILE__,__LINE__))/*Exportedfunctions-------------------------------------------------------*/voidassert_failed(u8*file,u32line);#else#defineassert_param(expr)((void)0)#endif/*DEBUG*/函數(shù)assert_failed編寫于文獻(xiàn)main.c或者其他用戶C文獻(xiàn):#ifdefDEBUG/*******************************************************************Functionname:assert_failed*Description:Reportsthenameofthesourcefileandthesourcelinenumber.*wheretheassert_paramerrorhasoccurred.*Input:-file:pointertothesourcefilename*-line:assert_paramerrorlinesourcenumber*Output:None*Return:None******************************************************************/voidassert_failed(u8*file,u32line){/*Usercanaddhisownimplementationtoreportthefilenameandlinenumber,ex:printf("Wrongparametersvalue:file%sonline%d\r\n",file,line)*//*Infiniteloop*/while(1){}}#endif注:運營時間檢查,即宏assert_param應(yīng)當(dāng)只在庫在Debug模式下編譯時使用。建議在用戶應(yīng)用代碼的開發(fā)和調(diào)試階段使用運營時間檢查,在最終的代碼中去掉它們以改善代碼尺寸和速度。假如用戶仍然希望在最終的代碼中保存這項功能,可以在調(diào)用庫函數(shù)前,重新使用宏assert_param來測試輸入?yún)?shù)。3.外設(shè)固件概述本節(jié)系統(tǒng)描述了每一個外設(shè)固件函數(shù)庫。完整地描述所有相關(guān)函數(shù)并提供如何使用他們的例子。函數(shù)的描述按如下格式進(jìn)行:Table3.函數(shù)描述格式函數(shù)名外設(shè)函數(shù)的名稱函數(shù)原形原形聲明功能描述簡要解釋函數(shù)是如何執(zhí)行的輸入?yún)?shù){x}輸入?yún)?shù)描述輸出參數(shù){x}輸出參數(shù)描述返回值函數(shù)的返回值先決條件調(diào)用函數(shù)前應(yīng)滿足的規(guī)定被調(diào)用函數(shù)其他被該函數(shù)調(diào)用的庫函數(shù)4.模擬/數(shù)字轉(zhuǎn)換器4.1ADC寄存器結(jié)構(gòu)4.2ADC庫函數(shù)5.備份寄存器(BKP)5.1BKP寄存器結(jié)構(gòu)5.2BKP庫函數(shù)6控制器局域網(wǎng)(CAN)6.1CAN寄存器結(jié)構(gòu)6.2CAN庫函數(shù)7DMA控制器(DMA)7.1DMA寄存器結(jié)構(gòu)7.2DMA庫函數(shù)8外部中斷/事件控制器(EXTI)8.1EXTI寄存器結(jié)構(gòu)8.2EXTI庫函數(shù)9FLASH存儲器(FLASH)9.1FLASH寄存器結(jié)構(gòu)9.2FLASH庫函數(shù)10通用輸入/輸出(GPIO)GPIO驅(qū)動可以用作多個用途,涉及管腳設(shè)立,單位設(shè)立/重置,鎖定機制,從端口管腳讀入或者向端口管腳寫入數(shù)據(jù)。Section10.1GPIO寄存器結(jié)構(gòu)描述了固件函數(shù)庫所使用的數(shù)據(jù)結(jié)構(gòu),Section10.2固件庫函數(shù)介紹了函數(shù)庫里的所有函數(shù)。10.1GPIO寄存器結(jié)構(gòu)GPIO寄存器結(jié)構(gòu),GPIO_TypeDef和AFIO_TypeDef,在文獻(xiàn)“stm32f10x_map.h”中定義如下:typedefstruct{vu32CRL;vu32CRH;vu32IDR;vu32ODR;vu32BSRR;vu32BRR;vu32LCKR;}GPIO_TypeDefTypedefstruct{vu32EVCR;vu32MAPR;vu32EXTICR[4];}AFIO_TypeDef;Table178.例舉了GPIO所有寄存器。Table178.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è)聲明于文獻(xiàn)“stm32f10x_map.h”:...#definePERIPH_BASE((u32)0x40000000)#defineAPB1PERIPH_BASEPERIPH_BASE#defineAPB2PERIPH_BASE(PERIPH_BASE+0x10000)#defineAHBPERIPH_BASE(PERIPH_BASE+0x20230)...#defineAFIO_BASE(APB2PERIPH_BASE+0x0000)#defineGPIOA_BASE(APB2PERIPH_BASE+0x0800)#defineGPIOB_BASE(APB2PERIPH_BASE+0x0C00)#defineGPIOC_BASE(APB2PERIPH_BASE+0x1000)#defineGPIOD_BASE(APB2PERIPH_BASE+0x1400)#defineGPIOE_BASE(APB2PERIPH_BASE+0x1800)#ifndefDEBUG...#ifdef_AFIO#defineAFIO((AFIO_TypeDef*)AFIO_BASE)#endif/*_AFIO*/#ifdef_GPIOA#defineGPIOA((GPIO_TypeDef*)GPIOA_BASE)#endif/*_GPIOA*/#ifdef_GPIOB#defineGPIOB((GPIO_TypeDef*)GPIOB_BASE)#endif/*_GPIOB*/#ifdef_GPIOC#defineGPIOC((GPIO_TypeDef*)GPIOC_BASE)#endif/*_GPIOC*/#ifdef_GPIOD#defineGPIOD((GPIO_TypeDef*)GPIOD_BASE)#endif/*_GPIOD*/#ifdef_GPIOE#defineGPIOE((GPIO_TypeDef*)GPIOE_BASE)#endif/*_GPIOE*/...#else/*DEBUG*/...#ifdef_AFIOEXTAFIO_TypeDef*AFIO;#endif/*_AFIO*/#ifdef_GPIOAEXTGPIO_TypeDef*GPIOA;#endif/*_GPIOA*/#ifdef_GPIOBEXTGPIO_TypeDef*GPIOB;#endif/*_GPIOB*/#ifdef_GPIOCEXTGPIO_TypeDef*GPIOC;#endif/*_GPIOC*/#ifdef_GPIODEXTGPIO_TypeDef*GPIOD;#endif/*_GPIOD*/#ifdef_GPIOEEXTGPIO_TypeDef*GPIOE;#endif/*_GPIOE*/...#endif使用Debug模式時,初始化指針AFIO,GPIOA,GPIOB,GPIOC,GPIOD和GPIOE于文獻(xiàn)“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*/#ifdef_GPIOEGPIOE=(GPIO_TypeDef*)GPIOE_BASE;#endif/*_GPIOE*/#ifdef_AFIOAFIO=(AFIO_TypeDef*)AFIO_BASE;#endif/*_AFIO*/為了訪問GPIO寄存器,,_GPIO,_AFIO,_GPIOA,_GPIOB,_GPIOC,_GPIOD和_GPIOE必須在文獻(xiàn)“stm32f10x_conf.h”中定義如下:#define_GPIO#define_GPIOA#define_GPIOB#define_GPIOC#define_GPIOD#define_GPIOE#define_AFIO10.2GPIO庫函數(shù)Table179.例舉了GPIO的庫函數(shù)Table179.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_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ù)端口寫入數(shù)據(jù)GPIO_PinLockConfig鎖定GPIO管腳設(shè)立寄存器GPIO_EventOutputConfig選擇GPIO管腳用作事件輸出GPIO_EventOutputCmd使能或者失能事件輸出GPIO_PinRemapConfig改變指定管腳的映射GPIO_EXTILineConfig選擇GPIO管腳用作外部中斷線路10.2.1函數(shù)GPIO_DeInitTable180.描述了函數(shù)GPIO_DeInit函數(shù)名GPIO_DeInit函數(shù)原形voidGPIO_DeInit(GPIO_TypeDef*GPIOx)功能描述將外設(shè)GPIOx寄存器重設(shè)為缺省值輸入?yún)?shù)GPIOx:x可以是A,B,C,D或者E,來選擇GPIO外設(shè)輸出參數(shù)無返回值無先決條件無被調(diào)用函數(shù)RCC_APB2PeriphResetCmd()例:/*ResetstheGPIOAperipheralregisterstotheirdefaultresetvalues*/GPIO_DeInit(GPIOA);10.2.2函數(shù)GPIO_AFIODeInitTable181.描述了函數(shù)GPIO_AFIODeInitTable181.函數(shù)GPIO_AFIODeInit函數(shù)名GPIO_AFIODeInit函數(shù)原形voidGPIO_AFIODeInit(void)功能描述將復(fù)用功能(重映射事件控制和EXTI設(shè)立)重設(shè)為缺省值輸入?yún)?shù)無輸出參數(shù)無返回值無先決條件無被調(diào)用函數(shù)RCC_APB2PeriphResetCmd()例:/*ResetstheAlternatefunctionsregisterstotheirdefaultresetvalues*/GPIO_AFIODeInit();10.2.3函數(shù)GPIO_InitTable182.描述了函數(shù)GPIO_InitTable182.函數(shù)GPIO_Init函數(shù)名GPIO_Init函數(shù)原形voidGPIO_Init(GPIO_TypeDef*GPIOx,GPIO_InitTypeDef*GPIO_InitStruct)功能描述根據(jù)GPIO_InitStruct中指定的參數(shù)初始化外設(shè)GPIOx寄存器輸入?yún)?shù)1GPIOx:x可以是A,B,C,D或者E,來選擇GPIO外設(shè)輸入?yún)?shù)2GPIO_InitStruct:指向結(jié)構(gòu)GPIO_InitTypeDef的指針,包含了外設(shè)GPIO的配置信息
參閱Section:GPIO_InitTypeDef查閱更多該參數(shù)允許取值范圍輸出參數(shù)無返回值無先決條件無被調(diào)用函數(shù)無GPIO_InitTypeDefstructureGPIO_InitTypeDef定義于文獻(xiàn)“stm32f10x_gpio.h”:typedefstruct{u16GPIO_Pin;GPIOSpeed_TypeDefGPIO_Speed;GPIOMode_TypeDefGPIO_Mode;}GPIO_InitTypeDefGPIO_Pin該參數(shù)選擇待設(shè)立的GPIO管腳,使用操作符“|”可以一次選中多個管腳。可以使用下表中的任意組合。Table183.GPIO_Pin值GPIO_Pin描述GPIO_Pin_None無管腳被選中GPIO_Pin_0選中管腳0GPIO_Pin_1選中管腳1GPIO_Pin_2選中管腳2GPIO_Pin_3選中管腳3GPIO_Pin_4選中管腳4GPIO_Pin_5選中管腳5GPIO_Pin_6選中管腳6GPIO_Pin_7選中管腳7GPIO_Pin_8選中管腳8GPIO_Pin_9選中管腳9GPIO_Pin_10選中管腳10GPIO_Pin_11選中管腳11GPIO_Pin_12選中管腳12GPIO_Pin_13選中管腳13GPIO_Pin_14選中管腳14GPIO_Pin_15選中管腳15GPIO_Pin_All選中所有管腳GPIO_SpeedGPIO_SpeedGPIO_Speed用以設(shè)立選中管腳的速率。Table184.給出了該參數(shù)可取的值。Table184.GPIO_Speed值GPIO_Speed描述GPIO_Speed_10MHz最高輸出速率10MHzGPIO_Speed_2MHz最高輸出速率2MHzGPIO_Speed_50MHz最高輸出速率50MHzGPIO_ModeGPIO_Mode用以設(shè)立選中管腳的工作狀態(tài)。Table185.給出了該參數(shù)可取的值。Table185.GPIO_Mode值GPIO_Speed描述GPIO_Mode_AIN模擬輸入GPIO_Mode_IN_FLOATING浮空輸入GPIO_Mode_IPD下拉輸入GPIO_Mode_IPU上拉輸入GPIO_Mode_Out_OD開漏輸出GPIO_Mode_Out_PP推挽輸出GPIO_Mode_AF_OD復(fù)用開漏輸出GPIO_Mode_AF_PP復(fù)用推挽輸出注意:當(dāng)某管腳設(shè)立為上拉或者下拉輸入模式,使用寄存器Px_BSRR和PxBRRGPIO_Mode允許同時設(shè)立GPIO方向(輸入/輸出)和相應(yīng)的輸入/輸出設(shè)立,:位[7:4]相應(yīng)GPIO方向,位[4:0]相應(yīng)配置。GPIO方向有如下索引-GPIO輸入模式=0x00-GPIO輸出模式=0x01Table186.給出了所有GPIO_Mode的索引和編碼Table186.GPIO_Mode的索引和編碼GPIO方向索引模式設(shè)立模式代碼GPIOInput0x00GPIO_Mode_AIN0x000x00GPIO_Mode_IN_FLOATING0x040x04GPIO_Mode_IPD0x080x28GPIO_Mode_IPU0x080x48GPIOOutput0x01GPIO_Mode_Out_OD0x040x14GPIO_Mode_Out_PP0x000x10GPIO_Mode_AF_OD0x0C0x1CGPIO_Mode_AF_PP0x080x18例:/*ConfigurealltheGPIOAinInputFloatingmode*/GPIO_InitTypeDefGPIO_InitStructure;GPIO_InitStructure.GPIO_Pin=GPIO_Pin_All;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOA,&GPIO_InitStructure);10.2.4函數(shù)GPIO_StructInitTable187.描述了函數(shù)GPIO_StructInitTable187.函數(shù)GPIO_StructInit函數(shù)名GPIO_StructInit函數(shù)原形voidGPIO_StructInit(GPIO_InitTypeDef*GPIO_InitStruct)功能描述把GPIO_InitStruct中的每一個參數(shù)按缺省值填入輸入?yún)?shù)GPIO_InitStruct:指向結(jié)構(gòu)GPIO_InitTypeDef的指針,待初始化輸出參數(shù)無返回值無先決條件無被調(diào)用函數(shù)無Table188.給出了GPIO_InitStruct各個成員的缺省值Table188.GPIO_InitStruct缺省值成員缺省值GPIO_PinGPIO_Pin_AllGPIO_SpeedGPIO_Speed_2MHzGPIO_ModeGPIO_Mode_IN_FLOATING例:/*InitializetheGPIOInitStructureparameters*/GPIO_InitTypeDefGPIO_InitStructure;GPIO_StructInit(&GPIO_InitStructure);10.2.5函數(shù)GPIO_ReadInputDataBitTable189.描述了函數(shù)GPIO_ReadInputDataBitTable189.函數(shù)GPIO_ReadInputDataBit函數(shù)名GPIO_ReadInputDataBit函數(shù)原形u8GPIO_ReadInputDataBit(GPIO_TypeDef*GPIOx,u16GPIO_Pin)功能描述讀取指定端口管腳的輸入輸入?yún)?shù)1GPIOx:x可以是A,B,C,D或者E,來選擇GPIO外設(shè)輸入?yún)?shù)2GPIO_Pin:待讀取的端口位
參閱Section:GPIO_Pin查閱更多該參數(shù)允許取值范圍輸出參數(shù)無返回值輸入端口管腳值先決條件無被調(diào)用函數(shù)無例:/*ReadstheseventhpinoftheGPIOBandstoreitinReadValuevariable*/u8ReadValue;ReadValue=GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_7);10.2.6函數(shù)GPIO_ReadInputDataTable190.描述了函數(shù)GPIO_ReadInputDataTable190.函數(shù)GPIO_ReadInputData函數(shù)名GPIO_ReadInputData函數(shù)原形u16GPIO_ReadInputData(GPIO_TypeDef*GPIOx)功能描述讀取指定的GPIO端口輸入輸入?yún)?shù)GPIOx:x可以是A,B,C,D或者E,來選擇GPIO外設(shè)輸出參數(shù)無返回值GPIO輸入數(shù)據(jù)端口值先決條件無被調(diào)用函數(shù)無例:/*ReadtheGPIOCinputdataportandstoreitinReadValuevariable*/u16ReadValue;ReadValue=GPIO_ReadInputData(GPIOC);10.2.7函數(shù)GPIO_ReadOutputDataBitTable191.描述了GPIO_ReadOutputDataBitTable191.函數(shù)GPIO_ReadOutputDataBit函數(shù)名GPIO_ReadOutputDataBit函數(shù)原形u8GPIO_ReadOutputDataBit(GPIO_TypeDef*GPIOx,u16GPIO_Pin)功能描述讀取指定端口管腳的輸出輸入?yún)?shù)1GPIOx:x可以是A,B,C,D或者E,來選擇GPIO外設(shè)輸入?yún)?shù)2GPIO_Pin:待讀取的端口位
參閱Section:GPIO_Pin查閱更多該參數(shù)允許取值范圍輸出參數(shù)無返回值輸出端口管腳值先決條件無被調(diào)用函數(shù)無例:/*ReadstheseventhpinoftheGPIOBandstoreitinReadValuevariable*/u8ReadValue;ReadValue=GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_7);10.2.8函數(shù)GPIO_ReadOutputDataTable192.描述了函數(shù)GPIO_ReadOutputDataTable192.函數(shù)GPIO_ReadOutputData函數(shù)名GPIO_ReadOutputData函數(shù)原形u16GPIO_ReadOutputData(GPIO_TypeDef*GPIOx)功能描述讀取指定的GPIO端口輸出輸入?yún)?shù)GPIOx:x可以是A,B,C,D或者E,來選擇GPIO外設(shè)輸出參數(shù)無返回值GPIO輸出數(shù)據(jù)端口值先決條件無被調(diào)用函數(shù)無例:/*ReadtheGPIOCoutputdataportandstoreitinReadValuevariable*/u16ReadValue;ReadValue=GPIO_ReadOutputData(GPIOC);10.2.9函數(shù)GPIO_SetBitsTable193.描述了GPIO_SetBitsTable193.函數(shù)GPIO_SetBits函數(shù)名GPIO_SetBits函數(shù)原形voidGPIO_SetBits(GPIO_TypeDef*GPIOx,u16GPIO_Pin)功能描述設(shè)立指定的數(shù)據(jù)端口位輸入?yún)?shù)1GPIOx:x可以是A,B,C,D或者E,來選擇GPIO外設(shè)輸入?yún)?shù)2GPIO_Pin:待設(shè)立的端口位
該參數(shù)可以取GPIO_Pin_x(x可以是0-15)的任意組合
參閱Section:GPIO_Pin查閱更多該參數(shù)允許取值范圍輸出參數(shù)無返回值無先決條件無被調(diào)用函數(shù)無例:/*SettheGPIOAportpin10andpin15*/GPIO_SetBits(GPIOA,GPIO_Pin_10|GPIO_Pin_15);10.2.10函數(shù)GPIO_ResetBitsTable194.描述了GPIO_ResetBitsTable194.函數(shù)GPIO_ResetBits函數(shù)名GPIO_ResetBits函數(shù)原形voidGPIO_ResetBits(GPIO_TypeDef*GPIOx,u16GPIO_Pin)功能描述清除指定的數(shù)據(jù)端口位輸入?yún)?shù)1GPIOx:x可以是A,B,C,D或者E,來選擇GPIO外設(shè)輸入?yún)?shù)2GPIO_Pin:待清除的端口位
該參數(shù)可以取GPIO_Pin_x(x可以是0-15)的任意組合
參閱Section:GPIO_Pin查閱更多該參數(shù)允許取值范圍輸出參數(shù)無返回值無先決條件無被調(diào)用函數(shù)無例:/*ClearstheGPIOAportpin10andpin15*/GPIO_ResetBits(GPIOA,GPIO_Pin_10|GPIO_Pin_15);10.2.11函數(shù)GPIO_WriteBitTable195.描述了GPIO_WriteBitTable195.函數(shù)GPIO_WriteBit函數(shù)名GPIO_WriteBit函數(shù)原形voidGPIO_WriteBit(GPIO_TypeDef*GPIOx,u16GPIO_Pin,BitActionBitVal)功能描述設(shè)立或者清除指定的數(shù)據(jù)端口位輸入?yún)?shù)1GPIOx:x可以是A,B,C,D或者E,來選擇GPIO外設(shè)輸入?yún)?shù)2GPIO_Pin:待設(shè)立或者清除指的端口位
該參數(shù)可以取GPIO_Pin_x(x可以是0-15)的任意組合
參閱Section:GPIO_Pin查閱更多該參數(shù)允許取值范圍輸入?yún)?shù)3BitVal:該參數(shù)指定了待寫入的值
該參數(shù)必須取枚舉BitAction的其中一個值
Bit_RESET:清除數(shù)據(jù)端口位
Bit_SET:設(shè)立數(shù)據(jù)端口位輸出參數(shù)無返回值無先決條件無被調(diào)用函數(shù)無例:/*SettheGPIOAportpin15*/GPIO_WriteBit(GPIOA,GPIO_Pin_15,Bit_SET);10.2.12函數(shù)GPIO_WriteTable196.描述了GPIO_WriteTable196.函數(shù)GPIO_Write函數(shù)名GPIO_Write函數(shù)原形voidGPIO_Write(GPIO_TypeDef*GPIOx,u16PortVal)功能描述向指定GPIO數(shù)據(jù)端口寫入數(shù)據(jù)輸入?yún)?shù)1GPIOx:x可以是A,B,C,D或者E,來選擇GPIO外設(shè)輸入?yún)?shù)2PortVal:待寫入端口數(shù)據(jù)寄存器的值輸出參數(shù)無返回值無先決條件無被調(diào)用函數(shù)無例:/*WritedatatoGPIOAdataport*/GPIO_Write(GPIOA,0x1101);10.2.13函數(shù)GPIO_PinLockConfigTable197.描述了GPIO_PinLockConfigTable197.函數(shù)GPIO_PinLockConfig函數(shù)名GPIO_PinLockConfig函數(shù)原形voidGPIO_PinLockConfig(GPIO_TypeDef*GPIOx,u16GPIO_Pin)功能描述鎖定GPIO管腳設(shè)立寄存器輸入?yún)?shù)1GPIOx:x可以是A,B,C,D或者E,來選擇GPIO外設(shè)輸入?yún)?shù)2GPIO_Pin:待鎖定的端口位
該參數(shù)可以取GPIO_Pin_x(x可以是0-15)的任意組合
參閱Section:GPIO_Pin查閱更多該參數(shù)允許取值范圍輸出參數(shù)無返回值無先決條件無被調(diào)用函數(shù)無例:/*LockGPIOAPin0andPin1*/GPIO_PinLockConfig(GPIOA,GPIO_Pin_0|GPIO_Pin_1);10.2.14函數(shù)GPIO_EventOutputConfigTable198.描述了GPIO_EventOutputConfigTable198.函數(shù)GPIO_EventOutputConfig函數(shù)名GPIO_EventOutputConfig函數(shù)原形voidGPIO_EventOutputConfig(u8GPIO_PortSource,u8GPIO_PinSource)功能描述選擇GPIO管腳用作事件輸出輸入?yún)?shù)1GPIO_PortSource:選擇用作事件輸出的GPIO端口
參閱Section:GPIO_PortSource查閱更多該參數(shù)允許取值范圍輸入?yún)?shù)2GPIO_PinSource:事件輸出的管腳
該參數(shù)可以取GPIO_PinSourcex(x可以是0-15)輸出參數(shù)無返回值無先決條件無被調(diào)用函數(shù)無GPIO_PortSourceGPIO_PortSource用以選擇用作事件輸出的GPIO端口。Table199.給出了該參數(shù)可取的值Table199.GPIO_PortSource值GPIO_PortSource描述GPIO_PortSourceGPIOA選擇GPIOAGPIO_PortSourceGPIOB選擇GPIOBGPIO_PortSourceGPIOC選擇GPIOCGPIO_PortSourceGPIOD選擇GPIODGPIO_PortSourceGPIOE選擇GPIOE例:/*SelectstheGPIOEpin5forEVENToutput*/GPIO_EventOutputConfig(GPIO_PortSourceGPIOE,GPIO_PinSource5);10.2.15函數(shù)GPIO_EventOutputCmdTable200.描述了GPIO_EventOutputCmdTable200.函數(shù)GPIO_EventOutputCmd函數(shù)名GPIO_EventOutputCmd函數(shù)原形voidGPIO_EventOutputCmd(FunctionalStateNewState)功能描述使能或者失能事件輸出輸入?yún)?shù)1NewState:事件輸出的新狀態(tài)
這個參數(shù)可以?。篍NABLE或者DISABLE輸出參數(shù)無返回值無先決條件無被調(diào)用函數(shù)無例:/*EnableEventOuputtotheGPIOCpin6*/GPIO_EventOutputConfig(GPIO_PortSourceGPIOC,GPIO_PinSource6);GPIO_EventOutputCmd(ENABLE);10.2.16函數(shù)GPIO_PinRemapConfigTable201.描述了GPIO_PinRemapConfigTable201.函數(shù)GPIO_PinRemapConfig函數(shù)名GPIO_PinRemapConfig函數(shù)原形voidGPIO_PinRemapConfig(u32GPIO_Remap,FunctionalStateNewState)功能描述改變指定管腳的映射輸入?yún)?shù)1GPIO_Remap:選擇重映射的管腳
參閱Section:GPIO_Remap查閱更多該參數(shù)允許取值范圍輸入?yún)?shù)2NewState:管腳重映射的新狀態(tài)
這個參數(shù)可以?。篍NABLE或者DISABLE輸出參數(shù)無返回值無先決條件無被調(diào)用函數(shù)無GPIO_RemapGPIO_Remap用以選擇用作事件輸出的GPIO端口。Table202.給出了該參數(shù)可取的值Table202.GPIO_Remap值GPIO_Remap描述GPIO_Remap_SPI1SPI1復(fù)用功能映射GPIO_Remap_I2C1I2C1復(fù)用功能映射GPIO_Remap_USART1USART1復(fù)用功能映射GPIO_PartialRemap_USART3USART2復(fù)用功能映射GPIO_FullRemap_USART3USART3復(fù)用功能完全映射GPIO_PartialRemap_TIM1USART3復(fù)用功能部分映射GPIO_FullRemap_TIM1TIM1復(fù)用功能完全映射GPIO_PartialRemap1_TIM2TIM2復(fù)用功能部分映射1GPIO_PartialRemap2_TIM2TIM2復(fù)用功能部分映射2GPIO_FullRemap_TIM2TIM2復(fù)用功能完全映射GPIO_PartialRemap_TIM3TIM3復(fù)用功能部分映射GPIO_FullRemap_TIM3TIM3復(fù)用功能完全映射GPIO_Remap_TIM4TIM4復(fù)用功能映射GPIO_Remap1_CANCAN復(fù)用功能映射1GPIO_Remap2_CANCAN復(fù)用功能映射2GPIO_Remap_PD01PD01復(fù)用功能映射GPIO_Remap_SWJ_NoJTRST除JTRST外SWJ完全使能(JTAG+SW-DP)GPIO_Remap_SWJ_JTAGDisableJTAG-DP失能+SW-DP使能GPIO_Remap_SWJ_DisableSWJ完全失能(JTAG+SW-DP)例:/*I2C1_SCLonPB.08,I2C1_SDAonPB.09*/GPIO_PinRemapConfig(GPIO_Remap_I2C1,ENABLE);10.2.17函數(shù)GPIO_EXTILineConfigTable203.描述了GPIO_EXTILineConfigTable203.函數(shù)GPIO_EXTILineConfig函數(shù)名GPIO_EXTILineConfig函數(shù)原形voidGPIO_EXTILineConfig(u8GPIO_PortSource,u8GPIO_PinSource)功能描述選擇GPIO管腳用作外部中斷線路輸入?yún)?shù)1GPIO_PortSource:選擇用作外部中斷線源的GPIO端口
參閱Section:GPIO_PortSource查閱更多該參數(shù)允許取值范圍輸入?yún)?shù)2GPIO_PinSource:待設(shè)立的外部中斷線路
該參數(shù)可以取GPIO_PinSourcex(x可以是0-15)輸出參數(shù)無返回值無先決條件無被調(diào)用函數(shù)無例:/*SelectsPB.08asEXTILine8*/GPIO_EXTILineConfig(GPIO_PortSource_GPIOB,GPIO_PinSource8);11內(nèi)部集成電路(I2C)11.1I2C寄存器結(jié)構(gòu)11.2I2C庫函數(shù)12獨立看門狗(IWDG)12.1IWDG寄存器結(jié)構(gòu)12.2IWDG庫函數(shù)13嵌套向量中斷控制器(NVIC)NVIC驅(qū)動有多種用途:例如使能或者失能IRQ中斷,使能或者失能單獨的IRQ通道,改變IRQ通道的優(yōu)先級等等。Section13.1NVIC寄存器結(jié)構(gòu)描述了固件函數(shù)庫所使用的數(shù)據(jù)結(jié)構(gòu),Section13.2固件庫函數(shù)介紹了函數(shù)庫里的所有函數(shù)。13.1NVIC寄存器結(jié)構(gòu)NVIC寄存器結(jié)構(gòu),NVIC_TypeDeff,在文獻(xiàn)“stm32f10x_map.h”中定義如下:typedefstruct{vu32Enable[2];u32RESERVED0[30];vu32Disable[2];u32RSERVED1[30];vu32Set[2];u32RESERVED2[30];vu32Clear[2];u32RESERVED3[30];vu32Active[2];u32RESERVED4[62];vu32Priority[11];}NVIC_TypeDef;/*NVICStructure*/typedefstruct{vu32CPUID;vu32IRQControlState;vu32ExceptionTableOffset;vu32AIRC;vu32SysCtrl;vu32ConfigCtrl;vu32SystemPriority[3];vu32SysHandlerCtrl;vu32ConfigFaultStatus;vu32HardFaultStatus;vu32DebugFaultStatus;vu32MemoryManageFaultAddr;vu32BusFaultAddr;}SCB_TypeDef;/*SystemControlBlockStructure*/Table265.例舉了NVIC所有寄存器Table265.NVIC寄存器寄存器描述Enable中斷設(shè)立使能寄存器Disable中斷清除使能寄存器Set中斷設(shè)立待解決寄存器Clear中斷清除待解決寄存器Active
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 質(zhì)量管理體系實施指導(dǎo)手冊
- 財稅籌劃與風(fēng)險管理手冊(標(biāo)準(zhǔn)版)
- 辦公室員工培訓(xùn)效果跟蹤報告制度
- 辦公室內(nèi)部溝通與協(xié)作制度
- 養(yǎng)老院老人休閑娛樂設(shè)施維護(hù)制度
- 2026年遂寧市中心醫(yī)院醫(yī)療衛(wèi)生輔助崗項目人員補招募備考題庫及參考答案詳解
- 養(yǎng)老院興趣小組制度
- 2026年猴嘴街道殘疾人專職委員招聘備考題庫含答案詳解
- 2026年閩侯縣振興一鄉(xiāng)村集團(tuán)有限公司第二次公開招聘6人備考題庫及1套參考答案詳解
- 中國信達(dá)山東分公司2026年校園招聘備考題庫完整參考答案詳解
- 中醫(yī)治療黃褐斑課件
- 四川省融媒體中心歷年招聘考試真題庫
- 股東代為出資協(xié)議書
- 消防管道拆除合同協(xié)議
- 青少年交通安全法規(guī)
- 《數(shù)據(jù)統(tǒng)計分析課件》
- OWASP LLM人工智能網(wǎng)絡(luò)安全與治理清單(中文版)
- 鉆機檢驗表格
- GB/T 44143-2024科技人才評價規(guī)范
- 河南省洛陽市2023-2024學(xué)年高二上學(xué)期期末考試英語試題(解析版)
- JGT124-2017 建筑門窗五金件 傳動機構(gòu)用執(zhí)手
評論
0/150
提交評論