版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
UM04歷7UM0427用戶(hù)手冊(cè)32位基于ARM微控制器STM32F101xx與STM32F103xx固件函數(shù)庫(kù)介紹本手冊(cè)介紹了32位基于ARM微控制器STM32F101xx與STM32F103xx的固件函數(shù)庫(kù)。該函數(shù)庫(kù)是一個(gè)固件函數(shù)包,它由程序、數(shù)據(jù)結(jié)構(gòu)和宏組成,包括了微控制器所有外設(shè)的性能特征。該函數(shù)庫(kù)還包括每一個(gè)外設(shè)的驅(qū)動(dòng)描述和應(yīng)用實(shí)例。通過(guò)使用本固件函數(shù)庫(kù),無(wú)需深入掌握細(xì)節(jié),用戶(hù)也可以輕松應(yīng)用每一個(gè)外設(shè)。因此,使用本固態(tài)函數(shù)庫(kù)可以大大減少用戶(hù)的程序編寫(xiě)時(shí)間,進(jìn)而降低開(kāi)發(fā)成本。每個(gè)外設(shè)驅(qū)動(dòng)都由一組函數(shù)組成,這組函數(shù)覆蓋了該外設(shè)所有功能。每個(gè)器件的開(kāi)發(fā)都由一個(gè)通用API(applicationprogaamminginterface應(yīng)用編程界面)驅(qū)動(dòng),API對(duì)該驅(qū)動(dòng)程序的結(jié)構(gòu),函數(shù)和參數(shù)名稱(chēng)都進(jìn)行了標(biāo)準(zhǔn)化。所有的驅(qū)動(dòng)源代碼都符合“StrictANSI—C'標(biāo)準(zhǔn)(項(xiàng)目于范例文件符合擴(kuò)充ANSI-C標(biāo)準(zhǔn))。我們已經(jīng)把驅(qū)動(dòng)源代碼文檔化,他們同時(shí)兼容MISRA-C2004標(biāo)準(zhǔn)(根據(jù)需要,我們可以提供兼容矩陣)。由于整個(gè)固態(tài)函數(shù)庫(kù)按照‘StrictANSI-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è)適合于用戶(hù)應(yīng)用程序的開(kāi)發(fā)和調(diào)試。但這會(huì)增加了成本,可以在最終應(yīng)用程序代碼中移去,以?xún)?yōu)化代碼大小和執(zhí)行速度。想要了解更多細(xì)節(jié),請(qǐng)參閱Sect1on2.5。因?yàn)樵摴碳?kù)是通用的,并且包括了所有外設(shè)的功能,所以應(yīng)用程序代碼的大小和執(zhí)行速度可能不是最優(yōu)的。對(duì)大多數(shù)應(yīng)用程序來(lái)說(shuō),用戶(hù)可以直接使用之,對(duì)于那些在代碼大小和執(zhí)行速度方面有嚴(yán)格要求的應(yīng)用程序,該固件庫(kù)驅(qū)動(dòng)程序可以作為如何設(shè)置外設(shè)的一份參考資料根據(jù)實(shí)際需求對(duì)其進(jìn)行調(diào)整。此份固件庫(kù)用戶(hù)手冊(cè)的整體架構(gòu)如下:由定義,文檔約定和固態(tài)函數(shù)庫(kù)規(guī)則。,庫(kù)使用實(shí)例。固態(tài)函數(shù)庫(kù)概述(包的內(nèi)容,庫(kù)的架構(gòu)),安裝指南,庫(kù)使用實(shí)例。STM32F101xx和STM32F103xx在整個(gè)文檔中被寫(xiě)作STM32F101x。.文檔和庫(kù)規(guī)范本用戶(hù)手冊(cè)和固態(tài)函數(shù)庫(kù)按照以下章節(jié)所描述的規(guī)范編寫(xiě)。縮寫(xiě)Table1.本文檔所有縮寫(xiě)定義縮寫(xiě)外設(shè)/單元ADC模數(shù)轉(zhuǎn)換器BKP備份寄存器CAN控制器局域網(wǎng)模塊DMA直接內(nèi)存存取控制器EXTI外部中斷事件控制器FLASH閃存存何命GPIO通用輸入輸出I2C內(nèi)部集成電路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通用同步異步接收發(fā)射端WWDG窗口看門(mén)狗命名規(guī)則固態(tài)函數(shù)庫(kù)遵從以下命名規(guī)則:PPP表示任一外設(shè)縮寫(xiě),例如:ADC。更多縮寫(xiě)相關(guān)信息參閱章節(jié)1.1縮寫(xiě)。系統(tǒng)、源程序文件和頭文件命名都以“stm32f10x_”作為開(kāi)頭,例如:stm32f10x_conf.ho常量?jī)H被應(yīng)用于一個(gè)文件的,定義于該文件中;被應(yīng)用于多個(gè)文件的,在對(duì)應(yīng)頭文件中定義。所有常量都由英文字母大寫(xiě)書(shū)寫(xiě)。寄存器作為常量處理。他們的命名都由英文字母大寫(xiě)書(shū)寫(xiě)。在大多數(shù)情況下,他們采用與縮寫(xiě)規(guī)范與本用戶(hù)手冊(cè)一致。外設(shè)函數(shù)的命名以該外設(shè)的縮寫(xiě)加下劃線為開(kāi)頭。每個(gè)單詞的第一個(gè)字母都由英文字母大寫(xiě)書(shū)寫(xiě),例如:SPI_SendData。在函數(shù)名中,只允許存在一個(gè)下劃線,用以分隔外設(shè)縮寫(xiě)和函數(shù)名的其它部分。名為PPP_Init的函數(shù),其功能是根據(jù)PPP_InitTypeDef中指定的參數(shù),初始化外設(shè)PPP,例如TIM_Init.名為PPPDeInit的函數(shù),其功能為復(fù)位外設(shè)PPP的所有寄存器至缺省值,例如TIM—Delnit.名為PPP_StructInit的函數(shù),其功能為通過(guò)設(shè)置PPP_InitTypeDef結(jié)構(gòu)中的各種參數(shù)來(lái)定義外設(shè)的功能,例如:USART_StructInit.名為PPP_Cmd的函數(shù),其功能為使能或者失能外設(shè)PPP,例如:SPI_Cmd.名為PPP_ITConfig的函數(shù),其功能為使能或者失能來(lái)自外設(shè)PPP某中斷源,例如:RCC_ITConfig.名為PPP_DMAConfig的函數(shù),其功能為使能或者失能外設(shè)PPP的DMA接口,例如:TIM1_DMAConfig.用以配置外設(shè)功能的函數(shù),總是以字符串“Csfig”結(jié)尾,例如GPIO_PinRemapConfig.名為PPP_GetFlagStatus的函數(shù),其功能為檢查外設(shè)PPP某標(biāo)志位被設(shè)置與否,例如:I2C_GetFlagStatus.名為PPP_ClearFlag的函數(shù),其功能為清除外設(shè)PP刖志位,例如:I2C_ClearFlag.名為PPP_GetITStatus的函數(shù),其功能為判斷來(lái)自外設(shè)PPP的中斷發(fā)生與否,例如:I2C_GetITStatus.名為PPP_ClearITPendingBit的函數(shù),其功能為清除外設(shè)PPP中斷待處理標(biāo)志位,例如:I2C_ClearITPendingBit.編碼規(guī)則本章節(jié)描述了固態(tài)函書(shū)庫(kù)的編碼規(guī)則。.1變量固態(tài)函數(shù)庫(kù)定義了24個(gè)變量類(lèi)型,他們的類(lèi)型和大小是固定的。在文件stm32f10x_t應(yīng)
ype.h中我們定義了這些變量typedefsignedlongs32;typedefsignedshorts16;typedefsignedchars8;typedefsignedlongconstsc32;/*ReadOnly*/typedefsignedshortconstsc16;/*ReadOnly*/typedefsignedcharconstsc8;/*ReadOnly*/typedefvo1ati1esignedlongvs32;typedefvolatilesignedshortvs16;typedefvolatilesignedcharvs8;typedefvo1ati1esignedlongconstvsc32;/*ReadOnly*/typedefvolatilesignedshortconstvsc16;/*ReadOnly*/typedefvolatilesignedcharconstvsc8;/*ReadOnly*/typedefunsigned10ngu32;typedefunsignedshortu16;typedefunsignedcharu8;/*ReadOnly*/Only*/typedefunsignedlongconstuc32/*ReadOnly*/Only*/typedefunsignedshortconstuc16;/*Readtypedefunsignedcharconstuc8;/*ReadOnly*/typedefvolati1eunsignedlongvu32;typedefvolatileunsignedshortvu16;typedeftypedefvo1atileunsignedcharvu8;typedefvo1atileunsignedlongconstvuc32;/*ReadOnly*/typedefvo1atileunsignedlongconstvuc32;/*ReadOnly*/typedefvo1atileunsignedshortconstvuc16;/*ReadOnly*/typedefvo1atileunsignedshortconstvuc16;/*ReadOnly*/typedefvo1atileunsignedcharconstvuc8typedefvo1atileunsignedcharconstvuc8; /*ReadOnly*/1.3.2布爾型在文件stm32f10x_type.h中,布爾形變量被定義如下:Typedefenum{FALSE=0,TRUE=!FALSE}boo1;1.3.3標(biāo)志位狀態(tài)類(lèi)型在文件stm32f10x_type.h中,我們定義標(biāo)志位類(lèi)型(FlagStatustype)的2個(gè)可能值為設(shè)置”與重置"(SETorRESET)。typedefenum{RESET=0,SET=!RESET}FlagStatus;1.3.4功能狀態(tài)類(lèi)型在文件stm32fl0x_type.h中,我們定義功能狀態(tài)類(lèi)型(Functiona1Statetype)的2個(gè)可能值為使能"與失能"(ENABLEorDISABLE)。typedefenum{DISABLE=0,ENABLE=!DISABLE}Functiona1State;5錯(cuò)誤狀態(tài)類(lèi)型在文件stm32f10x_type.h中,我們錯(cuò)誤狀態(tài)類(lèi)型類(lèi)型(ErrorStatustype)的2個(gè)可能值為成功”與出錯(cuò)”(SUCCESSorERROR)。Typedefenum{ERROR=0,SUCCESS=!ERROR}ErrorStatus;1.3.6外設(shè)用戶(hù)可以通過(guò)指向各個(gè)外設(shè)的指針訪問(wèn)各外設(shè)的控制寄存器。這些指針?biāo)赶虻臄?shù)據(jù)結(jié)構(gòu)與各個(gè)外設(shè)的控制寄存器布局一一對(duì)應(yīng)。外設(shè)控制寄存器結(jié)構(gòu)文件stm32fl0x_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é)的寄存器縮寫(xiě)命名規(guī)則。RESERVEDi(i為一個(gè)整數(shù)索引值)表示被保留區(qū)域。外設(shè)聲明文件stm32f10x_map.h包含了所有外設(shè)的聲明,下例為SPI外設(shè)的聲明:ifndefEXTDefineEXTexternendif#definePERIPH_BASE((u32)0x40000000)defineAPB1PERIPH_BASEPERIPH_BASEdefineAPB2PERIPH_BASE(PERIPH_BASE+0x10000)?????/*SPI2BaseAddressdefinition*/#defineSPI2_BASE(APB1PERIPH_BASE+0x3800)■..■■./*SPI2peripheraldeclaration*/ifndefDEBUG.■■...ifdefSPI2#defineSPI2((SPI_TypeDef*)SPI2BASE)endif/*_SPI2*/■■.■..else/*DEBUG*/….一ifdefSPI2EXTSPI_TypeDef*SPI2;tendif/*_SPI2*/…...endif/*DEBUG*/如果用戶(hù)希望使用外設(shè)SPI,那么必須在文件stm32f10x_conf.h中定義_SPI標(biāo)簽。通過(guò)定義標(biāo)簽—SPIn,用戶(hù)可以訪問(wèn)外設(shè)SPIn的寄存器。例如,用戶(hù)必須在文件stm32f10x_conf.h中定義標(biāo)簽_SPI2,否則是不能訪問(wèn)SPI2的寄存器的。在文件stm32fl0x_conf.h中,用戶(hù)可以按照下例定義標(biāo)簽_SPI和—SPIn。應(yīng)define_SPIdefine_SPI1define_SPI2每個(gè)外設(shè)都有若干寄存器專(zhuān)門(mén)分配給標(biāo)志位。我們按照相應(yīng)的結(jié)構(gòu)定義這些寄存器。標(biāo)志位的命名,同樣遵循上節(jié)的外設(shè)縮寫(xiě)規(guī)范,以‘PP_FLAG」開(kāi)始。對(duì)于不同的外設(shè),標(biāo)志位都被定義在相應(yīng)的文件stm32f10x_ppp.h中。用戶(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)。在所有f#況下,SPI2都是一個(gè)指向外設(shè)SPI2首地址的指針。變量DEBUG可以仿照下例定義:#defineDEBUG1可以初始化DEBUG模式與文件stm32f10x_lib.c中如下:#ifdefDEBUGvoiddebug(void){■■■...#ifdef_SPI2SPI2=(SPITypeDef*)SPI2_BASE;#endif/*SPI2*/■■....}#endif/*DEBUG*/Note:1當(dāng)用戶(hù)選擇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)用程序中,刪除它們。S1
2.固件函數(shù)庫(kù)壓縮包描述STM32F10x固件函數(shù)庫(kù)被壓縮在一個(gè)zip文件中。解壓該文件會(huì)產(chǎn)生一個(gè)文件夾:STM32F10xFWLib\FWLib,包含如下所示的子文件夾:Figure1:固件函數(shù)庫(kù)文件夾結(jié)構(gòu)-__?FWLib;-i,enjmplesy_jAL>C*二BI;P一口CXNj_jCor肉對(duì)以?_IDEOLJirHnDHh/一jEXTIt(_)FLASHk二GT。_J區(qū)/1WDS?二JN謫匚/FV/HHi口R兀一nRT「?qsfi?」立々Tifrkd._jTIM±,_jTlM1tUSAPITe,二jXA"\a/Dt?-,_Jibrarv*值㈤'narc-」piuidtTT,-j;I回ITT,-j;I回I回<一:main.csbn32F1O)ccdffkstnn32f10w_bt.c-4tn32H0x_4h文件夾Examples文件夾Examples,對(duì)應(yīng)每一個(gè)STM32外設(shè),都包含一個(gè)子文件夾。這些子文件夾包含了整套文件,組成典型的例子,來(lái)示范如何使用對(duì)應(yīng)外設(shè)。這些文件有:readme.txt:每個(gè)例子的簡(jiǎn)單描述和使用說(shuō)明。stm32f1Ox_conf.h:該頭文件設(shè)置了所有使用到的外設(shè),由不同的“DE1INE”語(yǔ)句組成。stm32f10x_it.c:該源文件包含了所有的中斷處理程序(如果未使用中斷,則所有的函數(shù)體都為空)。stm32f10x.it.h:該頭文件包含了所有的中斷處理程序的原形。main.c:例程代碼。后注:所有的例程的使用,都不受不同軟件開(kāi)發(fā)環(huán)境的影響。文件夾Library文件夾Library包含組成固件函數(shù)庫(kù)核心的所有子文件夾和文件:子文件夾inc包含了固件函數(shù)庫(kù)所需的頭文件,用戶(hù)無(wú)需修改該文件夾:stm32f10x_type.h:所有其他文件使用的通用數(shù)據(jù)類(lèi)型和枚舉。stm32f10x_map.h:外設(shè)存儲(chǔ)器映像和寄存器數(shù)據(jù)結(jié)構(gòu)。stm32fl0x_lib.h:主頭文件夾,包含了其他頭文件。stm32f10x_ppp.h:每個(gè)外設(shè)對(duì)應(yīng)一個(gè)頭文件,包含了該外設(shè)使用的函數(shù)原形,數(shù)據(jù)結(jié)構(gòu)和枚舉。cortexm3_macro.h:文件cortexm3_macro.s對(duì)應(yīng)的頭文件。子文件夾src包含了固件函數(shù)庫(kù)所需的源文件,用戶(hù)無(wú)需修改該文件夾:stm32f10x_ppp.c:每個(gè)外設(shè)對(duì)應(yīng)一個(gè)源文件,包含了該外設(shè)使用的函數(shù)體。stm32f10x_1ib.c:初始化所有外設(shè)的指針。注:所有代碼都按照StrictANSI—C標(biāo)準(zhǔn)書(shū)寫(xiě),都不受不同軟件開(kāi)發(fā)環(huán)境的影響。文件夾Project文件夾Project包含了一個(gè)標(biāo)準(zhǔn)的程序項(xiàng)目模板,包括庫(kù)文件的編譯和所有用戶(hù)可修改的文件,可用以建立新的工程。-stm32f10x_conf.h:項(xiàng)目配置頭文件,默認(rèn)為設(shè)置了所有的外設(shè)。-stm32f10x_it.c:該源文件包含了所有的中斷處理程序(所有的函數(shù)體默認(rèn)為空)。stm32f10x_it.h:該頭文件包含了所有的中斷處理程序的原形。main.c:主函數(shù)體文件夾EWARM,RVMDK,RIDE:用于不同開(kāi)發(fā)環(huán)境使用,詳情查詢(xún)各文件夾下的文件readme.txt。2.2固件函數(shù)庫(kù)文件描述Table2列舉和描述了固件函數(shù)庫(kù)使用的所有文件。固件函數(shù)庫(kù)的體系和文件相互包括的聯(lián)系表示在Figure2中。每一個(gè)外設(shè)都有一個(gè)對(duì)應(yīng)的源文件:stm32f10x_ppp.c和一個(gè)對(duì)應(yīng)的頭文件:stm32f10x_ppp.h。文件stm32f10x_ppp.c包含了使用外設(shè)PPP所需的所有固件函數(shù)。提供所有外設(shè)一個(gè)存儲(chǔ)器映像文件stm32f10x_map.ho它包含了所有寄存器的聲明,既可以用于Debug模式也可以用于release1^。頭文件stm32f10x_lib.h包含了所有外設(shè)頭文件的頭文件。它是唯個(gè)用戶(hù)需要包括在自己應(yīng)用中的文件,起到應(yīng)用和庫(kù)之間界面的作用。文件stm32f10x_conf.h是唯一一個(gè)需要由用戶(hù)修改的文件。它作為應(yīng)用和庫(kù)之間的界面,指定了一系列參數(shù)。應(yīng)Tab1e2.固件函數(shù)庫(kù)文件描述.stm32f10x_參數(shù)設(shè)置文件,起到應(yīng)用和庫(kù)之間界面的作用。conf.h用戶(hù)必須在運(yùn)行自己的程序前修改該文件。?用戶(hù)可以利用模板使能或者失能外設(shè)。也可以修改外部晶振的參數(shù)。?也可以是用該文件在編譯前使能Debug或者re1ease模式。main.c主函數(shù)體示例。stm32f10x_it.h頭文件,包含所有中斷處理函數(shù)原形。stm32f10x_it.c外設(shè)中斷函數(shù)文件。用戶(hù)可以加入自己的中斷程序代碼。對(duì)于指向同一個(gè)中斷向量的多個(gè)不同中斷請(qǐng)?求,可以利用函數(shù)通過(guò)判斷外設(shè)的中斷標(biāo)志位來(lái)確定準(zhǔn)確的中斷源。固件函數(shù)庫(kù)?提供了這些函數(shù)的名稱(chēng)。stm32f10x_包含了所有外設(shè)的頭文件的頭文件。?它是唯一一個(gè)用戶(hù)需要包括在自己應(yīng)用中的1ib.h文件,起到應(yīng)用和庫(kù)之間界面的作用。stm32f10x_liDebug模式初始化文件。b.c它包括多個(gè)指針的定義,每個(gè)指針指向特定外設(shè)的首地址,以及在Debug模式被?使能時(shí),被調(diào)用的函數(shù)的定義。stm32該文件包含了存儲(chǔ)器映像和所有寄存器物理地址的聲明,既可以用于Debug模式?f10x_map.h也可以用于release模式。所有外設(shè)都使用該文件。stm32f10x_t通用聲明文件。ype.h包含所有外設(shè)驅(qū)動(dòng)使用的通用類(lèi)型和常數(shù)。stm32f10x_p由C語(yǔ)言編寫(xiě)的外設(shè)PPP的驅(qū)動(dòng)源程序文件。Pp.cstm32f10x_p外設(shè)PPP的頭文件。包含外設(shè)PPP函數(shù)的定義,和這些函數(shù)使用的變量。pp.hcortexm3_m文件cortexm3_macro.s的頭文件acro.hcortexCortex-M3內(nèi)核特殊指令的指令包裝。m3macro.s
Figure2.固件函數(shù)庫(kù)文件體系結(jié)構(gòu)apipliication.c10K_md|0.hWin32f1(?_t^pehstm3ai0x_ppp_hrcc.hAppli££KionLayerfIFigure2.固件函數(shù)庫(kù)文件體系結(jié)構(gòu)apipliication.c10K_md|0.hWin32f1(?_t^pehstm3ai0x_ppp_hrcc.hAppli££KionLayerfIUmDttl.C.?,??*?1LiSomeRCCroutinesareused:1-InPFP_pelnitMictiantoresetthepenpherBl-Togettinebusdoclfrequencyonwhichthetcrriperipheralarewnnecttsd2.3外設(shè)的初始化和設(shè)置本節(jié)按步驟描述了如何初始化和設(shè)置任意外設(shè)。這里PPPR表任意外設(shè)。.在主應(yīng)用文件中,聲明一個(gè)結(jié)構(gòu)PPP_InitTypeDef,例如:PPP_InitTypeDefPPP_InitStructure;這里PPP_InitStructure是一個(gè)位于內(nèi)存中的工作變量,用來(lái)初始化一個(gè)或者多個(gè)外設(shè)PPP。.為變量PPP_InitStructurc的各個(gè)結(jié)構(gòu)成員填入允許的值??梢圆捎靡韵?種方式:a)按照如下程序設(shè)置整個(gè)結(jié)構(gòu)體PPP_InitStructure.member1=val1;PPP_InitStructure.member2=val2;PPP_InitStructure.memberN=valN;/*whereNisthenumberofthestructuremembers*/以上步驟可以合并在同一行里用以?xún)?yōu)化代碼大?。篜PP_InitTypeDefPPP_InitStructure={va11,val2,..,valN}b)僅設(shè)置結(jié)構(gòu)體中的部分成員:這種情況下,用戶(hù)應(yīng)當(dāng)首先調(diào)用函數(shù)PPP_SturcInit(.來(lái)初始化變量PPP_InitStructure,然后再修改其中需要修改的成員。這樣可以保證其他成員的值(多為缺省值)被正確填入。.)由.)PPP_StructInit(&PPP_InitStructure);PP_InitStructure.memberX=valX;PPPInitStructure.memberY=valY;/*whereXandYarethememberstheuserwantstoconfigure*/.調(diào)用函數(shù)PPP_Init(..)來(lái)初始化外設(shè)PPP。.在這一步,外設(shè)PPP已被初始化??梢哉{(diào)用函數(shù)PPP_Cmd(..)來(lái)使能之。PPP_Cmd(PPP,ENABLE);可以通過(guò)調(diào)用一系列函數(shù)來(lái)使用外設(shè)。每個(gè)外設(shè)都擁有各自的功能函數(shù)。更多細(xì)節(jié)參閱Section3外設(shè)固件概述。注:1.在設(shè)置一個(gè)外設(shè)前,必須調(diào)用以下一個(gè)函數(shù)來(lái)使能它的時(shí)鐘:RCC_AHBPeriphClockCmd(RCCAHBPeriph_PPPx,ENABLE);RCCAPB2PeriphC1ockCmd(RCC_APB2Periph_PPPx,ENABLE);RCC_APB1PeriphClockCmd(RCCAPB1Periph_PPPx,ENABLE);.可以調(diào)用函數(shù)PPP_Deinit(..)來(lái)把外設(shè)PPP勺所有寄存器復(fù)位為缺省值:PPPDeInit(PPP).在外設(shè)設(shè)置完成以后,繼續(xù)修改它的一些參數(shù),可以參照如下步驟:PPPInitStucture.memberX=valX;PPP_InitStructure.memberY=valY;/*whereXandYaretheonlymembersthatuserwantstomodify*/PPP_Init(PPP,&PPP_InitStructure);2.4位段(Bit-Banding)Cortex?-M3存儲(chǔ)器映像包括兩個(gè)位段(bit-band)區(qū)。這兩個(gè)位段區(qū)將別名存儲(chǔ)器區(qū)中的每個(gè)字映射到位段存儲(chǔ)器區(qū)的一個(gè)位,在別名存儲(chǔ)區(qū)寫(xiě)入一個(gè)字具有對(duì)位段區(qū)的目標(biāo)位執(zhí)行讀—改-寫(xiě)操作的相同效果。所有STM32F10x外設(shè)寄存器都被映射到一個(gè)位段(bit-band)區(qū)。這個(gè)特性在各個(gè)函數(shù)中對(duì)單個(gè)比特進(jìn)行置1/置0操作時(shí)被大量使用,用以減小和優(yōu)化代碼尺寸。Section2.4.1和Section2.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_offsetx32)+(bit—numberX4)bitwordaddr=bitbandbase+bitwordoffset其中:bit_word_offset是目標(biāo)位在存取器位段區(qū)中的位置。應(yīng)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應(yīng)用實(shí)例下例展現(xiàn)了如何把寄存器RCC_CR白^PLLON[24]位,映射到別名區(qū):/*Peripheralbaseaddressinthebit-bandregion*/#definePERIPH_BASE((u32)0x40000000)/*Peripheraladdressinthealiasregion*/#definePERIPH_BBBASE((u32)0x42000000)/*—----RCCregistersbitaddressinthealiasregion------*/#defineRCC_OFFSET(RCC_BASE—PERIPH_BASE)/*---CRRegister---*//*A1iaswordaddressofPLLONbit*/#defineCR_OFFSET(RCCOFFSET+0x00)#definePLLONBitNumber0x18#defineCR_PLLON_BB(PERIPH_BBBASE+(CR_OFFSET*32(PLLON_BitNumber*4))編寫(xiě)一個(gè)使能/失能PLL的函數(shù),步驟如下:...#defineCRPLLON_Set((u32)0x01000000)#defineCRPLLON_Reset((u32)0xFEFFFFFF)?voidRCC_PLLCmd(FunctionalStateNewState){if(NewState!=DISABLE){/*EnablePLL*/RCC->CR|=CR_PLLON_Set;}else{/*Disab1ePLL*/RCC->CR&=CR_PLLONReset;}}Usingbit-bandaccessthisfunctionwillbecodedasfo1lows:voidRCCPLLCmd(FunctionalStateNewState){*(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è)宏。它可以檢查輸入?yún)?shù)是否在允許的范圍之內(nèi)。例:函數(shù)PWR_ClearFlagstm32f10x_pwr.c:VoidPWR_ClearFlag(u32PWR_FLAG)/*Checktheparameters*/assertparam(IS_PWR_CLEAR_FLAG(PWR_FLAG));PWR->CR|=PWR_FLAG<<2;}stm32f10x/*PWRFl#defineag*/PWRFLAGWU/*PWRFl#defineag*/PWRFLAGWU((u32)0x00000001)#definePWR_FLAG_SB((unePWRFLAGPVD2)0x00000002)#definePWR_FLAG_SB((unePWRFLAGPVD2)0x00000002)((u32)0x00000004)#defineISPWRCLEARFLAG(FLAG)((FLAGPWR_FLAG_WU)||(FLAGPWR_FLAG_SB)#defineISPWRCLEARFLAG(FLAG)((FLAGPWR_FLAG_WU)||(FLAGPWR_FLAG_SB)如果傳給宏如果傳給宏assert_param的參數(shù)為fa1se,則調(diào)用函數(shù)assettfailed并返回被錯(cuò)誤調(diào)用的函數(shù)所在的文件名和行數(shù)。如果傳給宏宏asscrt_paaam編寫(xiě)于文件stm32f10x_cssert_param的參數(shù)為true,onf.h中:則無(wú)返回值。/*Exportedmacro一—--*/#ifdefDEBUG/***************************************************用的函數(shù)所在的文件名和行數(shù)。如果傳給宏宏asscrt_paaam編寫(xiě)于文件stm32f10x_cssert_param的參數(shù)為true,onf.h中:則無(wú)返回值。/*Exportedmacro一—--*/#ifdefDEBUG/****************************************************************************MacroNameassert_param*Description:Theassert^parammacrosusedforfunction/spaameterscheck.*ItisusedonlyifthelicompiledinDEBUGmode.*Input:-expr:Ifexpritcallsassertfai1eameterscheck.*ItisusedonlyifthelicompiledinDEBUGmode.*Input:-expr:Ifexpritcallsassertfai1edfunction.*whichreportsthenameofthesourcefileandthesource*whichreportsthenameofthesourcefileandthesource*linenumberofthecallthatfai*Ifexpristrue,itreturnsnovalue.*linenumberofthecallthatfai*Ifexpristrue,itreturnsnovalue.*ReturnNone**********************************************************************#defineassert_param(expr)((expr)?(void)。:ssertfai1ed((u8*ReturnNone**********************************************************************#defineassert_param(expr)((expr)?(void)。:ssertfai1ed((u8*)FILEINE))/*Exportedfunctions*/voidassert_failed(u8*file,u32line);#elsevoidassert_failed(u8*file,u32line);#else#defineassert_param(expr)((void)0)#endif/*DEBUG*/函數(shù)assert_fai1ed編寫(xiě)于文件main.c或者其他用戶(hù)C文彳:#ifdefDEBUG/******************************************************************Functionname:assert_failedDescription:Reportsthenameofthesourcefileandthesourcelinenumber.wheretheassert_paramerrorhasoccurred.Input:-fi1e:pointertothesourcefi1ename-line:assert_paramerrorlinesourcenumberOutput:NoneReturn:None******************************************************************/voidassert_failed(u8*file,u32line){/*Usercanaddhisownimp1ementationtoreportthefilenameandlinenumber,ex:printf("Wrongparametersvalue:file%sonline%d\r\n",fi1e,line)*//*Infiniteloop*/while⑴{}}#endif注:運(yùn)行時(shí)間檢查,即宏assert_param應(yīng)當(dāng)只在庫(kù)在Debug模式下編譯時(shí)使用。建議在用戶(hù)應(yīng)用代碼的開(kāi)發(fā)和調(diào)試階段使用運(yùn)行時(shí)間檢查,在最終的代碼中去掉它們以改進(jìn)代碼尺寸和速度。如果用戶(hù)仍然希望在最終的代碼中保留這項(xiàng)功能,可以在調(diào)用庫(kù)函數(shù)前,重新使用宏assert—param來(lái)測(cè)試輸入?yún)?shù)。.外設(shè)固件概述本節(jié)系統(tǒng)描述了每一個(gè)外設(shè)固件函數(shù)庫(kù)。完整地描述所有相關(guān)函數(shù)并提供如何使用他們的例子。函數(shù)的描述按如下格式進(jìn)行:Table3.函數(shù)描述格式函數(shù)名外設(shè)函數(shù)的名稱(chēng)函數(shù)原形原形聲明功能描述簡(jiǎn)要解釋函數(shù)是如何執(zhí)行的輸入?yún)?shù){x}輸入?yún)?shù)描述輸出參數(shù){X}輸出參數(shù)描述返回值函數(shù)的返回值先決條件調(diào)用函數(shù)前應(yīng)滿(mǎn)足的要求被調(diào)用函數(shù)其他被該函數(shù)調(diào)用的庫(kù)函數(shù).模擬/數(shù)字轉(zhuǎn)換器ADC寄存器結(jié)構(gòu)ADC庫(kù)函數(shù).備份寄存器(BKP).1BKP寄存器結(jié)構(gòu).2BKP庫(kù)函數(shù)6控制器局域網(wǎng)(CAN).1CAN寄存器結(jié)構(gòu).2CAN庫(kù)函數(shù)DMA控制器(DMA)DMA寄存器結(jié)構(gòu)DMA庫(kù)函數(shù)8外部中斷/事件控制器(EXTI)EXTI寄存器結(jié)構(gòu)EXTI庫(kù)函數(shù)9FLASH存儲(chǔ)器(FLASH)1FLASH寄存器結(jié)構(gòu)2FLASH庫(kù)函數(shù)10通用輸入/輸出(GPIO)GPIO驅(qū)動(dòng)可以用作多個(gè)用途,包括管腳設(shè)置,單位設(shè)置/重置,鎖定機(jī)制,從端口管腳讀入或者向端口管腳寫(xiě)入數(shù)據(jù)。Section10.1GPIO寄存器結(jié)構(gòu)描述了固件函數(shù)庫(kù)所使用的數(shù)據(jù)結(jié)構(gòu),Section10.2固件庫(kù)函數(shù)介紹了函數(shù)庫(kù)里的所有函數(shù)。1GPIO寄存器結(jié)構(gòu)GPIO寄存器結(jié)構(gòu),GPIO_TypeDef和AFIO_TypeDef,在文件“丈m32f10x_map.h”中定義如下:typedefstruct{vu32CRL;vu32CRH;vu32IDR;vu32ODR;vu32BSRR;vu32BRR;vu32LCKR;}GPIO_TypeDefTypedefstruct{vu32EVCR;vu32MAPR;vu32EXTICR[4];}AFIOTypeDef;Table178.例舉了GPIO所有寄存器。Tab1e178.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è)聲明于文件“stm32fl0x_map.h":.?definePERIPH_BASE((u32)0x40000000)defineAPB1PERIPH_BASEPERIPH_BASEdefineAPB2PERIPH_BASE(PERIPH_BASE+0x10000)defineAHBPERIPHBASE(PERIPH_BASE+0x20000)...defineAFIOBASE(APB2PERIPHBASE+0x0000)defineGPIOABASE(APB2PERIPH_BASE+0x0800)defineGPIOB_BASE(APB2PERIPH_BASE+0x0C00)defineGPIOCBASE(APB2PERIPH_BASE+0x1000)defineGPIODBASE(APB2PERIPH_BASE+0x1400)defineGPIOE_BASE(APB2PERIPH_BASE+0x1800)#ifndefDEBUG...ifdef_AFIOdefineAFIO((AFIOTypeDef*)AFIOBASE)endif/*_AFIO*/ifdef_GPIOAdefineGPIOA((GPIO_TypeDef*)GPIOA_BASE)endif/*_GPIOA*/ifdef_GPIOBdefineGPIOB((GPIO_TypeDef*)GPIOBBASE)endif/*_GPIOB*/ifdefGPIOCdefineGPIOC((GPIO_TypeDef*)GPIOC_BASE)endif/*GPIOC*/ifdef_GPIOD#defineGPIOD((GPIO_TypeDef*)GPIOD_BASE)endif/*_GPIOD*/ifdef_GPIOEdefineGPIOE((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_GPIOCEXTGPIOTypeDef*GPIOC;#endif/*_GPIOC*/#ifdef_GPIODEXTGPIOTypeDef*GPIOD;#endif/*_GPIOD*/#ifdef_GPIOEEXTGPIO_TypeDef*GPIOE;#endif/*_GPIOE*/#endif使用Debug模式時(shí),初始化指針AFIO,GPIOA,GPIOB,GPIOC,GPIOD和GPIOE于文件“stm32f10x_1ib.c:#ifdef_GPIOAGPIOA=(GPIOTypeDef*)GPIOABASE;#endif/*_GPIOA*/#ifdef_GPIOBGPIOB=(GPIOTypeDef*)GPIOB_BASE;#endif/*_GPIOB*/#ifdef_GPIOCGPIOC=(GPIO_TypeDef*)GPIOC_BASE;#endif/*_GPIOC*/#ifdefGPIODGPIOD=(GPIO_TypeDef*)GPIOD_BASE;#endif/*GPIOD*/#ifdef_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#defineGPIOAdefineGPIOBdefine_GPIOC#defineGPIOD#defineGPIOE#define_AFIO10.2GPIO庫(kù)函數(shù)Table179.例舉了GPIO的庫(kù)函數(shù)Table179.GPIO庫(kù)函數(shù)GPIO_Delnit將外設(shè)GPIOx寄存器重設(shè)為缺省值GPIO_AFIODeInit將復(fù)用功能(重映射事件控制和EXTI設(shè)置)重設(shè)為缺省值GPIO_Init根據(jù)GPIO_InitStruct中指定的參數(shù)初始化外設(shè)GPIOx寄存器GPIO_StructInit把GPIO_InitStruct中的每一個(gè)參數(shù)按缺省值填入GPIO_ReadInputDataB讀取指定端口管腳的輸入itGPIO_ReadInputData讀取指定的GPIO端口輸入GPIO_ReadOutputData讀取指定端口管腳的輸出BitGPIO_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_EventOutputC選才iGPIO管腳用作事件輸出onfigGPIO_EventOutputCm使能或者失能事件輸出dGPIO_PinRemapCon改變指定管腳的映射figGPIO_EXTILin選才GGPI。管腳用作外部中斷線路eConfig函數(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,來(lái)選擇GPIO外設(shè)輸出參數(shù)無(wú)返回值無(wú)先決條件無(wú)被調(diào)用函數(shù)RCC_APB2PeriphResetCmd()例:/*ResetstheGPIOAperiphera1registerstotheirdefau1tresetvalues*/GPIODelnit(GPIOA);10.2.2函數(shù)GPIO_AFIODeInitTable181.描述了函數(shù)GPIO_AFIODelnitTab1e181.函數(shù)GPIO_AFIODelnit函數(shù)名GPIO_AFIODeInit函數(shù)原形voidGPIO_AFIODeInit(void)功能描述將復(fù)用功能(重映射事件控制和EXTI設(shè)置)重設(shè)為缺省值TOC\o"1-5"\h\z輸入?yún)?shù)無(wú)輸出參數(shù)無(wú)返回值無(wú)先決條件無(wú)被調(diào)用函數(shù)RCC—APB2PeriphResetCmd()例:/*ResetstheA1ternatefunctionsregisterstotheirdefaultresetvalues*/GPIO_AFIODeInit();10.2.3函數(shù)GPIO_InitTab1e182.描述了函數(shù)GPIO_InitTable182.函數(shù)GPIO_Init函數(shù)名GPIO_Init函數(shù)原形voidGPIO_Init(GPIO_TypeDef*GPIOx,GPIO_InitTypcDef*GPIO_InitStruct)功能描述根據(jù)GPIO_InitStruct中指定的參數(shù)初始化外設(shè)GPIOx寄存器輸入?yún)?shù)1GPIOx:x可以是A,B,C,D或者E,來(lái)選擇GPIO外設(shè)輸入?yún)?shù)2GPIO_InitStruct:指向結(jié)構(gòu)GPIO_InitTypeDef的指針,包含了外設(shè)GPIO的配置信息參閱Section:GPIO_InitTypeDef查閱更多該參數(shù)允許取值范圍輸出參數(shù)無(wú)返回值無(wú)先決條件無(wú)被調(diào)用函數(shù)無(wú)GPIO_InitTypeDefstructure布IGPIO_InitTypeDef定義于文件“stm32f10x_gpio.h":typedefstruct{u16GPIO_Pin;GPIOSpeed_TypeDefGPIO_Speed;GPIOMode_TypeDefGPIO_Mode;}GPIO_InitTypeDefGPIO_Pin該參數(shù)選擇待設(shè)置的GPIO管腳,使用操作符“國(guó)以一次選中多個(gè)管腳。可以使用下表中的任意組合。Table183.GPIO—Pin值GPIO_Pin描述GPIOPinNone無(wú)管腳被選中GPIOPin0選中管腳0GPIO_Pin_1選中管腳1GPIO_Pin_2選中管腳2GPIO_Pin_3選中管腳3GPIO_Pin_4選中管腳4GPIO_Pin_5選中管腳5GPIOPin6選中管腳6GPIO_Pin_7選中管腳7GPIO_Pin_8選中管腳8GPIO—Pin—9選中管腳9GPIO_Pin_10選中管腳10GPIOPin11選中管腳11GPIOPin12選中管腳12GPIO_Pin_13選中管腳13GPIOPin14選中管腳14GPIO_Pin_15選中管腳15GPIO_Pin_Al1選中全部管腳GPIO_SpeedGPIO_SpecdGPIO_Speed用以設(shè)置選中管腳的速率。Table184.給出了該參數(shù)可取的值。Table184.GPIO_Speed值GPIO_SpeedGPIO_Spe_1MHz最高輸出速率10MHzGPIO__Speed_2MHz最高輸出速率2MHzGPIO_Specd_50MHz50MHzGPIO_ModeGPIO_Mode用以設(shè)置選中管腳的工作狀態(tài)。Table185.給出了該參數(shù)可取的值。
Table185.GPIO_Mode值GPIO_Speed描述GPIO_Mode_AIN模擬輸入GPIOModeINFLOATING浮空輸入GPIO_Mode」PD下拉輸入GPIO_Mode_IPU上拉輸入GPIO_Mode_Out_OD開(kāi)漏輸出GPIOModeOutPP推挽輸出GPIO_Mode_AF_OD復(fù)用開(kāi)漏輸出GPIOModeAFPP復(fù)用推挽輸出汪后:當(dāng)某管腳設(shè)置為上拉或者下拉輸入模式,使用寄存器Px_BSRR和PxBRRGPIO_Mode允許同時(shí)設(shè)置GPIO方向(輸入/輸出)和對(duì)應(yīng)的輸入/輸出設(shè)置,:位[7:4]對(duì)應(yīng)GPIO方向,位[4:0]對(duì)應(yīng)配置。GPIO方向有如下索引-GPIO輸入模式=0x00-GPIO輸出模式=0x01Tab1e186.給出了所有GPIO_Mode的索引和編碼Table186.GPIO_Mode的索引和編碼GPIO力向索引模式設(shè)置模式代碼GPIOInput0x00GPIO_Mode_AIN0x000x00GPIOModeINFLOATI0x040x04NGGPIO_Mode_IPD0x080x28GPIO_Mode_IPU0x080x48GPIOOut0x01GPIOModeOutOD0x040x14putGPIOModeOutPP0x000x10GPIO_Mode_AF_OD0x0C0x1CGPIO_Mode_AF_PP0x080x18例:/*ConfigurealltheGPIOAinInputFloatingmode*/GPIO_InitTypeDefGPIO_InitStructure;GPIO_InitStructure.GPIO_Pin=GPIOPinAll;GPIO_InitStructure.GPIOSpeed=GPIOSpeed_10MHz;GPIO_InitStructure.GPIOMode=GPIO_Mode_IN_FLOATING;GPIOInit(GPIOA,&GPIO_InitStructure);10.2,4函數(shù)GPIO_StructInitTab1e187.描述了函數(shù)GPIO_StructInitTable187.函數(shù)GPIO_StructInit
函數(shù)名GPIO_StructInit函數(shù)原形voidGPIO_Structlnit(GPIO_InitTypeDef*GPIO_InitStruct)功能描述把GPIO_InitStruct中的每一個(gè)參數(shù)按缺省值填入輸入?yún)?shù)GPIO_InitStruct:指向結(jié)構(gòu)GPIO_InitTypeDef的指針彳寺初始化輸出參數(shù)無(wú)返回值無(wú)先決條件無(wú)被調(diào)用函數(shù)無(wú)Table188.給出了GPIOInitStruct各個(gè)成員的缺省值Table188.GPIO_InitStruct缺省值-51缺省值GPIO_PiGPIO_Pin_AllnGPIO_SpeGPIO_Speed_2MHzedGPIO_GPIOModeINFLOATINGMode例:/*Initia1izetheGPIOInitStructureparameters*/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,來(lái)選擇GPIO外設(shè)輸入?yún)?shù)2GPIO_Pin:待讀取的端口位修閱Section:GPIO_Pin查閱更多該參數(shù)允許取值范圍輸出參數(shù)無(wú)返回值輸入端口管腳值先決條件無(wú)被調(diào)用函數(shù)無(wú)例:/*ReadstheseventhpinoftheGPIOBandstoreitinReadVa1uevariable*/u8ReadValue;ReadVa1ue=GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_7);10.2.6函數(shù)GPIO_ReadInputDataTable190.描述了函數(shù)GPIO_ReadInputDataTable190.函數(shù)GPIO_ReadInputData函數(shù)名GPIO_ReadInputData函數(shù)原形u16GPIO_RcadInputData(GPIO__TypeDef*GPIOx)功能描述讀取指定的GPIO端口輸入輸入?yún)?shù)GPlOx:x可以是A,B,C,D或者E,來(lái)選擇GPIO外設(shè)輸出參數(shù)無(wú)返回值GPIO輸入數(shù)據(jù)端口值先決條件無(wú)被調(diào)用函數(shù)無(wú)例:/*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ù)1GPlOx:x可以是A,B,C,D或者E,來(lái)選擇GPIO外設(shè)輸入?yún)?shù)2GPIO_Pin:待讀取的端口位參閱Section:GPIO_Pin查閱更多該參數(shù)允許取值范圍輸出參數(shù)無(wú)返回值輸出端口管腳值先決條件無(wú)被調(diào)用函數(shù)無(wú)例:/*ReadstheseventhpinoftheGPIOBandstoreitinReadValuevariab1e*/u8ReadValue;ReadValue=GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin7);1028函數(shù)GPIO_RcadOutputDataTable192.描述了函數(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,來(lái)選擇GPIO外設(shè)輸出參數(shù)無(wú)返回值GPIO輸出數(shù)據(jù)端口值先決條件無(wú)被調(diào)用函數(shù)無(wú)例:/*ReadtheGPIOCoutputdataportandstoreitinReadValuevariable*/u16ReadValue;ReadValue=GPIO_ReadOutputData(GPIOC);10.2.9函數(shù)GPIO_SetBitsTable193.描述了GPIO_SetBitsTable193.函數(shù)GPIO_SetBitsGPO_eBit函數(shù)原形voidGPIO_SetBits(GPIO_TypeDef*GPIOx,u16GPIO__Pin)功能描述設(shè)置指定的數(shù)據(jù)端口位輸入?yún)?shù)1GPIOx:x可以是A,B,C,D或者E,來(lái)選擇GPIO外設(shè)輸入?yún)?shù)2GPIO_Pin:待設(shè)置的端口位2亥參數(shù)可以取GPlO_Pin_x(x可以是0-15)的任意組合參閱Section:GPIO_Pin查閱更多該參數(shù)允許取值范圍TOC\o"1-5"\h\z輸出參數(shù)無(wú)返回值無(wú)先決條件無(wú)被調(diào)用函數(shù)無(wú)例:/*SettheGPIOAportpin10andpin15*/GPIO_SetBits(GPIOA,GPIO_Pin_10|GPIOPin_15);10.2.10函數(shù)GPIO_ResetBitsTable194.描述了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,來(lái)選擇GPIO外設(shè)輸入?yún)?shù)2GPIO_Pin:待清除的端口位?i亥參數(shù)可以取GPIO_Pin_x(x可以是0-15)的任意組合參閱Section:GPIO_Pin查閱更多該參數(shù)允許取值范圍輸出參數(shù)無(wú)返回值無(wú)先決條件無(wú)被調(diào)用函數(shù)無(wú)函數(shù)GPIO_ResetBitsTable194.例:/*ClearstheGPlOAportpin10andpin15*/GPIOResetBits(GPIOA,GPIO_Pin_10|GPIO_Pin15);10.2.11函數(shù)GPIO_WriteBitTable195.描述了GPIO_WriteBitTable195.函數(shù)GPIO_WriteBitGPIO__WriteBit函數(shù)原形voidGPIO_WriteBit(GPIO_TypeDef*GPIOx,u16GPIO_Pin,BitActionBitVal)功能描述設(shè)置或者清除指定的數(shù)據(jù)端口位輸入?yún)?shù)1GPIOx:x可以是A,B,C,D或者E,來(lái)選擇GPIO外設(shè)輸入?yún)?shù)2GPIO_Pin:待設(shè)置或者清除指的端口位2亥參數(shù)可以取GPIO_Pin_x(x可以是0-15)的任意組合參閱Section:GPIO_Pin查閱更多該參數(shù)允許取值范圍輸入?yún)?shù)3BitVa1:該參數(shù)指定了待寫(xiě)入的值該參數(shù)必須取枚舉BitAction的其中一個(gè)值Bit_RESET:清除數(shù)據(jù)端口位?Bit_SET:設(shè)置數(shù)據(jù)端口位TOC\o"1-5"\h\z輸出參數(shù)無(wú)返回值無(wú)先決條件無(wú)被調(diào)用函數(shù)無(wú)例:/*SettheGPIOAportpin15*/GPIO_WriteBit(GPIOA,GPIOPin_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ù)端口寫(xiě)入數(shù)據(jù)輸入?yún)?shù)1GPIOx:x可以是A,B,C,D或者E,來(lái)選擇GPIO外設(shè)輸入?yún)?shù)2PortVal:待寫(xiě)入端口數(shù)據(jù)寄存器的值輸出參數(shù)無(wú)返回值無(wú)先決條件無(wú)被調(diào)用函數(shù)無(wú)例:/*WritedatatoGPIOAdataport*/GPIO_Write(GPIOA,0x1101);10.2.13函數(shù)GPIO_PinLockConfigTab1e197.描述了GPIO_PinLockConfigTable197.函數(shù)GPIO_PinLockConfig
函數(shù)名GPIO_PinLockConfig函數(shù)原形voidGPIO_PinLockConfig(GPIO_TypcDcf*GPIOx,u16GPIO—Pin)功能描述鎖定GPIO管腳設(shè)置寄存器輸入?yún)?shù)1GPIOx:x可以是A,B,C,D或者E,來(lái)選擇GPIO外設(shè)輸入?yún)?shù)2GPIO_Pin:待鎖定的端口位?該參數(shù)可以取GPIO_Pin_x(x可以是0—15)的任意組合參閱Section:GPIO_Pin查閱更多該參數(shù)允許取值范圍TOC\o"1-5"\h\z輸出參數(shù)無(wú)返回值無(wú)先決條件無(wú)被調(diào)用函數(shù)無(wú)而/*LockGPIOAPin0andPin1*/GPIOPinLockConfig(GPIOA,GPIO_Pin_0|GPIOPin_1);10.2.14函數(shù)GPIO_EventOutputConfigTable198.描述了GPIO_EventOutputConfigTab1e198.函數(shù)GPIO_EventOutputConfig函數(shù)名GPIO_EventOutputConfig函數(shù)原形voidGPIO_EventOutputConfig(u8GPIO_PortSource,PIO_PinSource)u8G功能描述選擇GPIO管腳用作事件輸出輸入?yún)?shù)1GPIO_PortSource:選擇用作事彳^輸出的GPIO端口修閱SGPIO_PortSource查閱更多該參數(shù)允許取值范圍ection:輸入?yún)?shù)2GPIO_PinSource:事件輸出的管腳?!亥參數(shù)可以取GPIO_Pinrcex(x可以是0-15)Sou輸出參數(shù)無(wú)返回值無(wú)先決條件無(wú)被調(diào)用函數(shù)無(wú)GPIO_PortSourceGPIO_PortSource用以選擇用作事件輸出的GPIO端口。Tabie199.給出了該參數(shù)可取的值Table199.GPIO_PortSource值GPIOPortSource描述GPIO_PortSourceGP選擇GPIOAIOAGPIO_PortSourc選才GGPIOBeGPIOBGPIO_PortSource選擇GPIOCGPIOCGPIO_PortSourc選才舉GPIODeGPIODGPIO_PortSourc選擇GPIOEeGPIOE/*SelectstheGPIOEpin5forEVENToutput*/GPIO_EventOutputConfig(GPIOPortSourceGPIOE,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īng)顟B(tài)LE?這個(gè)參數(shù)可以?。篍NABLE或者DISAB輸出參數(shù)無(wú)返回值無(wú)先決條件無(wú)被調(diào)用函數(shù)無(wú)例:/*EnableEventOuputtotheGPIOCpin6*/GPIO_EventOutputConfig(GPIOPortSourceGPIOC,GPIO_PinSource6);GPIO_EventOutputCmd(ENABLE);10.2.16函數(shù)GPIO_PinRemapConfigTable201.描述了GPIO_PinRemapConfigTable201.函數(shù)GPIO_PinRemapConfigPO_PnRemponfig函數(shù)原形voidGPIOPinRemapConfig(u32GPIORemap,Fun
ctionalStateNewState)功能描述改變指定管腳的映射輸入?yún)?shù)1GPIO_Remap:選擇重映射的管腳?參閱Section:GPIO_Remap查閱更多該參數(shù)允許取值范圍輸入?yún)?shù)2NewState:管腳重映射的新?tīng)顟B(tài)這個(gè)參數(shù)可以?。篍NABLE或者DISABLE輸出參數(shù)無(wú)返回值無(wú)先決條件無(wú)被調(diào)用函數(shù)無(wú)GPIO_RemapGPIO_Remap用以選擇用作事件輸出的GPIO端口。Table202.給出了該參數(shù)可取的值Table202.GPIO_Remap值GPIO_Remap描述GPIO_Remap_SPI1SPI1復(fù)用功能映射GPIO_Remap」2C1I2C1復(fù)用功能映射GPIO_Remap_USART1USART1復(fù)用功能映射GPIO_Partia1Remap—USART3USART2復(fù)用功能映射GPIO_Ful1Remap_USART3USART3復(fù)用功能完全映射GPIO_PartialRemap_TIM1USART3復(fù)用功能部分映射GPIO_FullRemap_TIM1TIM1復(fù)用功能完全映射GPIO_PartialRemap1_TIM2TIM2復(fù)用功能部分映射1GPIO_PartialRemap2_TIM2TIM2復(fù)用功能部分映射2GPIO_Ful1Remap_TIM2TIM2復(fù)用功能完全映射GPIO_PartialRemap_TIM3TIM3復(fù)用功能部分映射GPIO_Ful1Remap_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*/GPIOPinRemapConfig(GPIO_Remap_I2C1,ENABLE);10.2.17函數(shù)GPIO_EXTILineConfigTab1e203.描述了GPIO_EXTILineConfigTab1e203.函數(shù)GPIO_EXTILineConfig函數(shù)名GPIO_EXTILineConfig函數(shù)原形voidGPIO_EXTILineConfig(u8GPIO_PortSource,u8GPIO_PinSource)功能描述會(huì)擇GPIO管腳用作外部中斷線路輸入?yún)?shù)1GPIO_PortSource:選擇用作外部中斷線源的GPIO端口參閱Section:GPIO_PortSource查閱更多該參數(shù)允許取值范圍輸入?yún)?shù)2GPIO_PinSource:待設(shè)置的外部中斷線路?該參數(shù)可以取GPIO_PinSourcex(x可以是0-15)輸出參數(shù)無(wú)返回值無(wú)先決條件無(wú)被調(diào)用函數(shù)無(wú)例:/*Se1ectsPB.08asEXTILine8*/GPIO_EXTILineConfig(GPIO_PortSource_GPIOB,GPIOPinSource8);11內(nèi)部集成電路(I2C)11.1I2C寄存器結(jié)構(gòu)11.2I2C庫(kù)函數(shù)12獨(dú)立看門(mén)狗(IWDG)IWDG寄存器結(jié)構(gòu)IWDG庫(kù)函數(shù)13嵌套向量中斷控制器(NVIC)NVIC驅(qū)動(dòng)有多種用途:例如使能或者失能IRQ中斷,使能或者失能單獨(dú)的IRQ通道,改變IRQ通道的優(yōu)先級(jí)等等。Section13.1NVIC寄存器結(jié)構(gòu)描述了固件函數(shù)庫(kù)所使用的數(shù)據(jù)結(jié)構(gòu),Section13.2固件庫(kù)函數(shù)介紹了函數(shù)庫(kù)里的所有函數(shù)。13.1NVIC寄存器結(jié)構(gòu)NVIC寄存器結(jié)構(gòu),NVIC_TypeDeff,在文件“stm32f10x_map.h”中定義如下typedefstruct{vu32Enable[2];u32RESERVED0[30];vu32Disable[2];u32RSERVEDI[30];vu32Set[2];u32RESERVED2[30];vu32Clear[2];u32RESERVED3[30];vu32Active[2];u32RESERVED4[62];vu32Priority[11];}NVICTypeDef;/*NVICStructure*/typedefstruct{vu32CPUID;vu32IRQControlState;vu32ExceptionTab1eOffset;vu32AIRC;vu32SysCtrl;vu32ConfigCtr1;vu32SystemPriority[3];vu32SysHand1erCtrl;vu32ConfigFaultStatus;vu32HardFaultStatus;vu32DebugFaultStatus;vu32MemoryManageFaultAddr;vu32BusFau1tAddr;}SCB_TypeDef;/*SystemControlBlockStructure*/Table265.例舉了NVIC所有寄存器Table265.NVIC寄存器寄存器描述Enable中斷設(shè)置使能寄存器Disab1e中斷清除使能寄存器Set
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度文化傳媒內(nèi)容制作合同
- 2024年大型活動(dòng)保障車(chē)輛租賃合同
- 2024年上海房屋裝修工程分包合同
- 2024年廉潔承諾函:雙方誠(chéng)信自律協(xié)議
- 教育工作者主要先進(jìn)事跡(5篇)
- 中學(xué)生讀書(shū)演講稿
- 2024年度質(zhì)量控制合同:MLB棒球帽正品知識(shí)分享
- 2024年工程監(jiān)測(cè)與檢測(cè)合同
- 2024室內(nèi)外演唱會(huì)舞臺(tái)安全檢測(cè)合同
- 2024年國(guó)際商貿(mào)合同的科學(xué)與藝術(shù)
- 《初中英語(yǔ)寫(xiě)作》課件
- DB37-T 5202-2021 建筑與市政工程基坑支護(hù)綠色技術(shù)標(biāo)準(zhǔn)
- 牙科手機(jī)的清洗消毒、滅菌及保養(yǎng)課件
- 人音版二年級(jí)下冊(cè)音樂(lè)《小蜜蜂》課件
- 打印版醫(yī)師執(zhí)業(yè)注冊(cè)健康體檢表(新版)
- 湘教版八年級(jí)美術(shù)上冊(cè)工作計(jì)劃
- 高滲性非酮癥糖尿病昏迷培訓(xùn)課件
- 國(guó)開(kāi)成本會(huì)計(jì)第15章綜合練習(xí)試題及答案
- 2022年陜西投資集團(tuán)有限公司招聘筆試題庫(kù)及答案解析
- 醫(yī)院產(chǎn)后出血的應(yīng)急演練腳本
- 基于實(shí)驗(yàn)驗(yàn)證并發(fā)現(xiàn)以太
評(píng)論
0/150
提交評(píng)論