嵌入式系統(tǒng)原理與應(yīng)用 課件 第6章 基于STM32F103微控制器的嵌入式系統(tǒng)開發(fā)基礎(chǔ)2_第1頁(yè)
嵌入式系統(tǒng)原理與應(yīng)用 課件 第6章 基于STM32F103微控制器的嵌入式系統(tǒng)開發(fā)基礎(chǔ)2_第2頁(yè)
嵌入式系統(tǒng)原理與應(yīng)用 課件 第6章 基于STM32F103微控制器的嵌入式系統(tǒng)開發(fā)基礎(chǔ)2_第3頁(yè)
嵌入式系統(tǒng)原理與應(yīng)用 課件 第6章 基于STM32F103微控制器的嵌入式系統(tǒng)開發(fā)基礎(chǔ)2_第4頁(yè)
嵌入式系統(tǒng)原理與應(yīng)用 課件 第6章 基于STM32F103微控制器的嵌入式系統(tǒng)開發(fā)基礎(chǔ)2_第5頁(yè)
已閱讀5頁(yè),還剩50頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

嵌入式系統(tǒng)設(shè)計(jì)西安郵電大學(xué)計(jì)算機(jī)學(xué)院王忠民2025/11/28本章學(xué)習(xí)目的熟悉并掌握與STM32微控制器開發(fā)相關(guān)的特有C語(yǔ)言基礎(chǔ)知識(shí),這是讀者進(jìn)行基于寄存器或固件庫(kù)開發(fā)的基礎(chǔ)了解基于意法半導(dǎo)體公司的STM32微控制器開發(fā)的四種模式寄存器開發(fā)模式、標(biāo)準(zhǔn)庫(kù)開發(fā)模式、基于STM32Cube平臺(tái)的HAL庫(kù)和LL庫(kù)開發(fā)模式各自的特點(diǎn),重點(diǎn)理解寄存器開發(fā)和庫(kù)函數(shù)開發(fā)實(shí)現(xiàn)的機(jī)理,了解STM32Cube平臺(tái)的特點(diǎn)。理解ARMCortex微控制器軟件接口標(biāo)準(zhǔn)CMSIS(CortexMicrocontrollerSoftwareInterfaceStandard)提出的目的和基本組成,掌握寄存器開發(fā)的基本原理和開發(fā)步驟理解基于標(biāo)準(zhǔn)外設(shè)庫(kù)開發(fā)的基本原理,熟練掌握標(biāo)準(zhǔn)外設(shè)庫(kù)工程的構(gòu)建方法。第6章基于STM32F103微控制器的嵌入式系統(tǒng)開發(fā)基礎(chǔ)---學(xué)習(xí)目的2025/11/28第6章基于STM32F103微控制器的嵌入式系統(tǒng)開發(fā)基礎(chǔ)(1) 6.1微控制器開發(fā)語(yǔ)言基礎(chǔ) 6.2STM32F103嵌入式系統(tǒng)開發(fā)模式 6.2.1寄存器開發(fā)模式 6.2.2標(biāo)準(zhǔn)外設(shè)庫(kù)開發(fā)模式 6.2.3基于STM32Cube平臺(tái)的HAL庫(kù)和LL庫(kù)開發(fā)模式 6.2.3HAL庫(kù)開發(fā)模式 6.2.4LL庫(kù)開發(fā)模式第6章基于STM32F103微控制器的嵌入式系統(tǒng)開發(fā)基礎(chǔ)(2)6.2ARMCortex微控制器軟件接口標(biāo)準(zhǔn)CMSIS 6.2.1CMSIS軟件接口標(biāo)準(zhǔn) 6.2.2STM32F1xx微控制器的軟件包CMSIS下載與安裝 6.3

STM32F1標(biāo)準(zhǔn)外設(shè)庫(kù)

6.4基于標(biāo)準(zhǔn)外設(shè)庫(kù)的工程構(gòu)建 6.5Proteus嵌入式系統(tǒng)仿真與調(diào)試

2025/11/28第6章基于STM32F103微控制器的嵌入式系統(tǒng)開發(fā)基礎(chǔ)---學(xué)習(xí)內(nèi)容目錄第6章基于STM32F103微控制器的嵌入式系統(tǒng)開發(fā)基礎(chǔ)---目錄第6章基于STM32F103微控制器的嵌入式系統(tǒng)開發(fā)基礎(chǔ)(2)6.2ARMCortex微控制器軟件接口標(biāo)準(zhǔn)CMSIS 6.2.1CMSIS軟件接口標(biāo)準(zhǔn) 6.2.2STM32F1xx微控制器的軟件包CMSIS下載與安裝 6.3STM32F1標(biāo)準(zhǔn)外設(shè)庫(kù)

6.4基于標(biāo)準(zhǔn)外設(shè)庫(kù)的工程構(gòu)建 6.5Proteus嵌入式系統(tǒng)仿真與調(diào)試

為了解決不同芯片廠商生產(chǎn)的基于Cortex內(nèi)核的微處理器在軟件上的兼容問題,ARM公司與眾多芯片和軟件廠商共同制定了CMSIS(CortexMicrocontrollerSoftwareInterfaceStandard)標(biāo)準(zhǔn),旨在將所有Cortex內(nèi)核產(chǎn)品的軟件接口標(biāo)準(zhǔn)化。半導(dǎo)體廠商在推出微控制器芯片的同時(shí),基于該標(biāo)準(zhǔn)開發(fā)了相應(yīng)的設(shè)備支持包,這樣就可以方便嵌入式軟件在不同微處理器芯片之間的移植了。第6章基于STM32F103微控制器的嵌入式系統(tǒng)開發(fā)基礎(chǔ)---ARMCortex微控制器軟件接口標(biāo)準(zhǔn)CMSIS2025/11/28CMSIS在Cortex-M3微控制器產(chǎn)業(yè)鏈中的作用

1.

統(tǒng)一軟件接口,降低開發(fā)門檻:不同半導(dǎo)體廠商(如ST、NXP、TI等)生產(chǎn)的Cortex-M3微控制器,硬件外設(shè)和寄存器地址可能存在差異。CMSIS定義了一套標(biāo)準(zhǔn)化的底層硬件抽象接口(如寄存器訪問、中斷處理、系統(tǒng)時(shí)鐘等),開發(fā)者無需深入了解不同廠商的硬件細(xì)節(jié),即可用統(tǒng)一的代碼框架開發(fā)應(yīng)用,大幅減少了學(xué)習(xí)成本和移植工作量。

2.

加速軟件開發(fā)與生態(tài)整合:

基于CMSIS標(biāo)準(zhǔn),工具鏈廠商(如Keil、IAR)可開發(fā)通用的編譯、調(diào)試工具,中間件供應(yīng)商(如RTOS、文件系統(tǒng))也能提供標(biāo)準(zhǔn)化的接口適配。這使得開發(fā)者可以輕松復(fù)用軟件組件,縮短產(chǎn)品開發(fā)周期,推動(dòng)整個(gè)產(chǎn)業(yè)鏈的軟件生態(tài)標(biāo)準(zhǔn)化。

3.

促進(jìn)跨平臺(tái)兼容性與代碼復(fù)用:

例如,一款基于STM32(ST廠商)開發(fā)的程序,若遵循CMSIS標(biāo)準(zhǔn),只需少量修改即可移植到NXP的Cortex-M3芯片上,避免了因硬件差異導(dǎo)致的代碼重寫問題,增強(qiáng)了軟件的跨平臺(tái)兼容性。

4.

推動(dòng)行業(yè)協(xié)作與標(biāo)準(zhǔn)化發(fā)展:CMSIS作為開放標(biāo)準(zhǔn),讓不同廠商的產(chǎn)品在軟件層面具備一致性,有助于行業(yè)內(nèi)的技術(shù)協(xié)作(如聯(lián)合開發(fā)解決方案、共享代碼資源),同時(shí)也降低了用戶的技術(shù)鎖定風(fēng)險(xiǎn),推動(dòng)Cortex-M3微控制器在工業(yè)控制、消費(fèi)電子等領(lǐng)域的規(guī)?;瘧?yīng)用。

簡(jiǎn)而言之,CMSIS就像產(chǎn)業(yè)鏈中的“通用語(yǔ)言”,通過統(tǒng)一軟件接口,解決了不同廠商產(chǎn)品的兼容性問題,加速了開發(fā)效率,最終推動(dòng)了Cortex-M3生態(tài)的繁榮與標(biāo)準(zhǔn)化發(fā)展。第6章基于STM32F103微控制器的嵌入式系統(tǒng)開發(fā)基礎(chǔ)---ARMCortex微控制器軟件接口標(biāo)準(zhǔn)CMSIS2025/11/28基于CMSIS(CortexMicrocontrollerSoftwareInterfaceStandard)標(biāo)準(zhǔn)的軟件架構(gòu)中,CMSIS層扮演著至關(guān)重要的角色;CMSIS向上提供實(shí)時(shí)操作系統(tǒng)內(nèi)核外設(shè)函數(shù)、中間件函數(shù)、片上外設(shè)函數(shù)的用戶程序調(diào)用的接口,實(shí)現(xiàn)了各個(gè)片內(nèi)外設(shè)驅(qū)動(dòng)文件文件名的規(guī)范化和操作函數(shù)的規(guī)范化等;CMSIS向下負(fù)責(zé)與內(nèi)核和各個(gè)外設(shè)直接交互,CMSIS為微控制器(MCU)的硬件層提供了抽象層,這意味著它隱藏了硬件的具體實(shí)現(xiàn)細(xì)節(jié),向上層(RTOS和用戶應(yīng)用程序)提供了一套統(tǒng)一且簡(jiǎn)單的接口;CMSIS通過定義標(biāo)準(zhǔn)化的接口,使得不同芯片廠商生產(chǎn)的基于Cortex-M處理器的微控制器在軟件層面上具有更高的兼容性,這有助于減少因硬件差異而導(dǎo)致的軟件移植問題,降低了開發(fā)成本;CMSIS通過提供內(nèi)核外設(shè)函數(shù)、中間件函數(shù)和片上外設(shè)函數(shù),使得開發(fā)人員能夠更加專注于應(yīng)用程序的開發(fā),而無需深入了解硬件的具體細(xì)節(jié),這大大提高了開發(fā)效率。

第6章基于STM32F103微控制器的嵌入式系統(tǒng)開發(fā)基礎(chǔ)---ARMCortex微控制器軟件接口標(biāo)準(zhǔn)CMSIS2025/11/28意法半導(dǎo)體公司基于CMSIS軟件接口標(biāo)準(zhǔn),為基于CortexM3核的系列微控制器開發(fā)了相應(yīng)的設(shè)備支持包DFP(DeviceFamilyPack)和標(biāo)準(zhǔn)外設(shè)庫(kù)。比如針對(duì)本書選用的STM32F1系列微控制器,就需要使用:(1)Keil.STM32F1xx_DFP.pack設(shè)備支持包---本節(jié)介紹,要集成到MDK5開發(fā)工具中(2)STM32F10x_StdPeriph_Lib_V3.x.x標(biāo)準(zhǔn)外設(shè)庫(kù)---相關(guān)函數(shù)關(guān)聯(lián)到所開發(fā)的工程中。下節(jié)介紹第6章基于STM32F103微控制器的嵌入式系統(tǒng)開發(fā)基礎(chǔ)---STM32F1xx微控制器的設(shè)備支持包下載與安裝2025/11/28設(shè)備支持包的下載:從Keil官網(wǎng)上下載項(xiàng)目所選用的微控制芯片的軟件支持包的具體步驟如下:(1)打開Keil官網(wǎng),在主頁(yè)上點(diǎn)擊“Products”菜單項(xiàng)。(2)在ARM-Keil產(chǎn)品頁(yè)面,找到“ARMDevelopmentTools”選項(xiàng),點(diǎn)擊進(jìn)入armDeveloper頁(yè)面。(3)在armDeveloper頁(yè)面,找到“CMSISpacks”,點(diǎn)擊“CMSIS-Packindex”鏈接,進(jìn)入ARM-Keil支持的各大半導(dǎo)體廠商的CMSISPacks頁(yè)面。(4)在搜索框鍵入“STM32F1”,即可找到STM32F103系列微控制器對(duì)應(yīng)的設(shè)備支持包,目前找到的最新版本為2.4.1(注意,意法半導(dǎo)體公司會(huì)不斷推出新的版本,目前使用較多的是早一些推出的keil.STM32F1xx_DFP.1.0.5.pack)。第6章基于STM32F103微控制器的嵌入式系統(tǒng)開發(fā)基礎(chǔ)---STM32F1xx微控制器的設(shè)備支持包下載與安裝2025/11/28設(shè)備支持包的安裝:(1)確信已安裝了KeilMDK集成開發(fā)環(huán)境。如果未安裝,需要從Keil官網(wǎng)()下載并安裝最新版本的KeilMDK。(2)雙擊下載好的Keil.STM32F1xx_DFP.2.4.1.pack,選擇將其安裝在系統(tǒng)默認(rèn)的KeilMDK5文件夾下,單擊“Next”按鈕開始安裝。安裝完成后,單擊“Finish”按鈕完成設(shè)備支持包的安裝。(3)查看STM32F1系列設(shè)備支持包安裝是否成功。打開KeilMDK集成開發(fā)環(huán)境,點(diǎn)擊Project->Manage->PackInstaller…,彈出如圖6.4所示的對(duì)話框??梢钥闯?,意法半導(dǎo)體公司的STM32F1系列(STM32F100~STM32F107)8子系列的微控制器設(shè)備支持包已安裝,目前安裝的Keil.STM32F1xx_DFP.2.4.1.pack是意法半導(dǎo)體公司2023-05-12推出的,是目前最新的版本??梢钥闯觯琒TM32F103系列共有29款不同的微控制器芯片。STM32F1系列微控制器的支持包Keil.STM32F1xx_DFP.2.4.1.pack下載:/packs/?q=STM32F1&pack-search=STM32F1系列微控制器的設(shè)備支持包安裝完成后,就可以進(jìn)行基于STM32F1系列某款微控制器的工程的構(gòu)建了。這里舉例僅想說明設(shè)備支持包在工程構(gòu)建過程的作用,以及基于設(shè)備支持包生成的相關(guān)工程文件。構(gòu)建一個(gè)完整的工程,不僅需要設(shè)備支持包的支持,同時(shí)還需要標(biāo)準(zhǔn)外設(shè)庫(kù)的支持。1.構(gòu)建存放工程的文件夾假設(shè)我們要構(gòu)建一個(gè)基于STM32F103R6微控制器的工程,首先構(gòu)建一個(gè)空的工程文件夾,這里我們?cè)谧烂嫔蟿?chuàng)建一個(gè)名為321的文件夾,再在該文件夾中創(chuàng)建一個(gè)project子文件夾,用于存放MDK生成的工程文件、過程文件等。2.構(gòu)建工程打開KeilMDK,點(diǎn)擊Project->NewμVisionProject…,在彈出的段畫框中選擇要放置工程的文件夾(桌面上的321\project),輸入工程名321(工程名與文件夾同名),點(diǎn)擊保存,彈出如圖6.5所示的“SlectDeviceforTarget’Target1’…”對(duì)話框,選擇STM32F103R6,點(diǎn)擊OK。3.查看生成的工程文件321.uvprojx為工程文件,該文件在KeilMDK生成STM32F1微控制器工程時(shí)具有至關(guān)重要的作用。默認(rèn)生成的Objects文件夾用于存放編譯過程中產(chǎn)生的中間目標(biāo)文件(ObjectFiles)。默認(rèn)生成的Listing文件夾用于存放編譯器編譯時(shí)產(chǎn)生的列表清單文件(ListingFiles)。第6章基于STM32F103微控制器的嵌入式系統(tǒng)開發(fā)基礎(chǔ)---基于設(shè)備支持包的工程構(gòu)建2025/11/28目錄第6章基于STM32F103微控制器的嵌入式系統(tǒng)開發(fā)基礎(chǔ)---目錄第6章基于STM32F103微控制器的嵌入式系統(tǒng)開發(fā)基礎(chǔ)(2)6.2ARMCortex微控制器軟件接口標(biāo)準(zhǔn)CMSIS 6.2.1CMSIS軟件接口標(biāo)準(zhǔn) 6.2.2STM32F1xx微控制器的軟件包CMSIS下載與安裝 6.3STM32F1標(biāo)準(zhǔn)外設(shè)庫(kù) 6.4基于標(biāo)準(zhǔn)外設(shè)庫(kù)的工程構(gòu)建

6.5Proteus嵌入式系統(tǒng)仿真與調(diào)試

Libraries文件夾(1)CMSIS\CM3文件夾用于存放符合CMSIS標(biāo)準(zhǔn)的文件,具體包括:1)內(nèi)核支持文件文件夾(CoreSupport):包括core_cm3.c和core_cm3.h文件,提供了進(jìn)入Cortex-M3內(nèi)核的接口,是CMSIS標(biāo)準(zhǔn)的核心組成部分。它們由ARM公司提供,用于實(shí)現(xiàn)內(nèi)核級(jí)別的功能,如中斷管理、系統(tǒng)控制等。2)設(shè)備支持文件文件夾(DeviceSupport):這些文件包含了STM32F10x系列微控制器的寄存器定義、中斷向量表以及系統(tǒng)時(shí)鐘配置等。例如,system_stm32f10x.c和system_stm32f10x.h文件用于設(shè)置系統(tǒng)的時(shí)鐘和總線配置,確保微控制器能夠正確運(yùn)行。3)啟動(dòng)文件文件夾(startup):包括高容量、中容量和低容量微控制器的啟動(dòng)文件,如高高容量芯片的啟動(dòng)文件startup_stm32f10x_hd.s。啟動(dòng)文件是用匯編語(yǔ)言編寫的,負(fù)責(zé)在系統(tǒng)復(fù)位后初始化堆棧、設(shè)置中斷向量表、配置系統(tǒng)時(shí)鐘等,為C語(yǔ)言程序的運(yùn)行準(zhǔn)備環(huán)境。第6章基于STM32F103微控制器的嵌入式系統(tǒng)開發(fā)基礎(chǔ)---STM32F1標(biāo)準(zhǔn)外設(shè)庫(kù)2025/11/28STM32F10x系列標(biāo)準(zhǔn)外設(shè)庫(kù):STM32F10x_StdPeriph_Lib_V3.6.0下載:/en/embedded-software/stsw-stm32054.html#get-softwarestm32f10x.h:寄存器定義和基本類型聲明。system_stm32f10x.h/c:系統(tǒng)初始化和時(shí)鐘配置。stm32f10x_conf.h:外設(shè)庫(kù)的配置,選擇需要的外設(shè)。stm32f10x_it.h/c:中斷服務(wù)函數(shù)的實(shí)現(xiàn)。core_cm3.h/c:Cortex-M3內(nèi)核相關(guān)函數(shù)和定義。Libraries文件夾(2)STM32F10x_StdPeriph_Driver文件夾STM32F10x_StdPeriph_Driver文件夾用于存放STM32F10x系列微控制器的外設(shè)驅(qū)動(dòng)文件。這些文件為STM32的各種外設(shè)(如GPIO、ADC、TIM等)提供了底層的驅(qū)動(dòng)程序,使得開發(fā)者可以方便地通過高級(jí)API函數(shù)來操作這些外設(shè),而無需深入了解硬件細(xì)節(jié)。1)Inc文件夾:存放片上外設(shè)的頭文件(如stm32f10x_gpio.h),這些頭文件包含了外設(shè)寄存器的定義、外設(shè)功能的描述以及API函數(shù)的聲明等。2)Src文件夾:存放片上外設(shè)的源文件(如stm32f10x_gpio.c),這些源文件實(shí)現(xiàn)了對(duì)外設(shè)寄存器的直接操作,并為開發(fā)者提供了豐富的API函數(shù),用于實(shí)現(xiàn)各種外設(shè)功能。第6章基于STM32F103微控制器的嵌入式系統(tǒng)開發(fā)基礎(chǔ)---STM32F1標(biāo)準(zhǔn)外設(shè)庫(kù)2025/11/282.Project文件夾:(1)STM32F10x_StdPeriph_Template文件夾

存放官方的標(biāo)準(zhǔn)外設(shè)庫(kù)工程模板。這個(gè)模板為開發(fā)者提供了一個(gè)標(biāo)準(zhǔn)的工程結(jié)構(gòu),包含了創(chuàng)建新項(xiàng)目時(shí)所需的基本文件和配置。通過使用這個(gè)模板,開發(fā)者可以快速啟動(dòng)一個(gè)新的STM32項(xiàng)目,而無需從頭開始搭建工程結(jié)構(gòu)。這大大提高了開發(fā)效率,并減少了因配置錯(cuò)誤而導(dǎo)致的開發(fā)障礙。注意:用戶在構(gòu)建自己的工程時(shí),需要將“STM32F10x_StdPeriph_Template”中的stm32f10x_conf.h、stm32f10x_it.h和stm32f10x_it.c等文件拷貝到自己的工程中去(通常與用戶開發(fā)的程序一起放在文件夾user中),并根據(jù)需要進(jìn)行修改。第6章基于STM32F103微控制器的嵌入式系統(tǒng)開發(fā)基礎(chǔ)---STM32F1標(biāo)準(zhǔn)外設(shè)庫(kù)2025/11/282.Project文件夾:(2)STM32F10x_StdPeriph_Examples文件夾STM32F10x_StdPeriph_Examples文件夾下存放的是ST公司提供的外設(shè)驅(qū)動(dòng)例程。這些例程展示了如何使用STM32F10x系列微控制器的各種外設(shè),如GPIO、ADC、TIM等。第6章基于STM32F103微控制器的嵌入式系統(tǒng)開發(fā)基礎(chǔ)---STM32F1標(biāo)準(zhǔn)外設(shè)庫(kù)2025/11/283.Utilities文件夾:評(píng)估板相關(guān)代碼

存放與STM32評(píng)估板相關(guān)的專用驅(qū)動(dòng)程序和工具代碼,這些代碼通常用于初始化評(píng)估板上的硬件資源或?qū)崿F(xiàn)特定的硬件功能,但對(duì)于非評(píng)估板開發(fā)不是必需的。第6章基于STM32F103微控制器的嵌入式系統(tǒng)開發(fā)基礎(chǔ)---STM32F1標(biāo)準(zhǔn)外設(shè)庫(kù)2025/11/28在構(gòu)建基于標(biāo)準(zhǔn)外設(shè)庫(kù)的工程時(shí),需要將STM32F10x_StdPeriph_Lib_V3.x.x中Libraries文件夾和STM32F10x_StdPeriph_Template文件夾中的相關(guān)文件拷貝到自己構(gòu)建的工程的相關(guān)文件夾下,然后在MDK集成開發(fā)環(huán)境中,再將這些文件關(guān)聯(lián)到工程中去。因此,了解STM32F10x標(biāo)準(zhǔn)庫(kù)中的相關(guān)文件至關(guān)重要。第6章基于STM32F103微控制器的嵌入式系統(tǒng)開發(fā)基礎(chǔ)---基于設(shè)庫(kù)中構(gòu)建工程的思路2025/11/28外設(shè)庫(kù)存放工程的文件夾開發(fā)工程的MDK5環(huán)境在構(gòu)建基于標(biāo)準(zhǔn)外設(shè)庫(kù)的工程時(shí),需要將STM32F10x_StdPeriph_Lib_V3.x.x中Libraries文件夾和STM32F10x_StdPeriph_Template文件夾中的相關(guān)文件拷貝到自己構(gòu)建的工程的相關(guān)文件夾下,然后在MDK集成開發(fā)環(huán)境中,再將這些文件關(guān)聯(lián)到工程中去。因此,了解STM32F10x標(biāo)準(zhǔn)庫(kù)中的相關(guān)文件至關(guān)重要。表6.1給出了工程構(gòu)建時(shí)涉及到的文件及其層次關(guān)系,表中從下往上依次從底層(硬件層)到上層(用戶應(yīng)用程序?qū)樱?。?章基于STM32F103微控制器的嵌入式系統(tǒng)開發(fā)基礎(chǔ)---STM32F10x標(biāo)準(zhǔn)外設(shè)庫(kù)中的文件關(guān)系2025/11/281.內(nèi)核操作文件core_cm3.h/core_cm3.ccore_cm3.h和core_cm3.c共同構(gòu)成了Cortex-M3內(nèi)核的軟件接口層,用于實(shí)現(xiàn)對(duì)Cortex-M3內(nèi)核的訪問和配置。

CMSIS(CortexMicrocontrollerSoftwareInterfaceStandard)提供的Cortex-M3內(nèi)核支持文件,包含:內(nèi)核寄存器定義(如NVIC、SysTick);內(nèi)聯(lián)函數(shù)(如__enable_irq()、__WFI());系統(tǒng)級(jí)操作(如原子訪問、位帶操作);SysTick定時(shí)器配置函數(shù)。工程中的作用:提供與內(nèi)核交互的統(tǒng)一接口,確保代碼可移植性。管理中斷控制器(NVIC)和系統(tǒng)定時(shí)器(SysTick)。

注意:此文件由ARM提供,通常無需修改第6章基于STM32F103微控制器的嵌入式系統(tǒng)開發(fā)基礎(chǔ)---STM32F10x標(biāo)準(zhǔn)外設(shè)庫(kù)中的文件關(guān)系2025/11/282.標(biāo)準(zhǔn)外設(shè)庫(kù)核心頭文件stm32f10x.hstm32f10x.h是STM32F10x系列微控制器標(biāo)準(zhǔn)外設(shè)庫(kù)的核心頭文件。在進(jìn)行STM32開發(fā)時(shí),需要經(jīng)常查看這個(gè)文件中的相關(guān)定義。這個(gè)文件打開可以看到,里面非常多的結(jié)構(gòu)體以及宏定義。主要包含了以下幾個(gè)方面的內(nèi)容:(1)微控制器的寄存器地址映射(如GPIO、USART、TIM等外設(shè)的基地址)(2)外設(shè)基地址映射(宏定義相關(guān)外設(shè)地址)(3)片上外設(shè)結(jié)構(gòu)體類型定義,如GPIO_TypeDef、USART_TypeDef(4)外設(shè)的位定義,如寄存器標(biāo)志位、控制位(5)中斷向量表定義。工程中的作用:

提供對(duì)硬件寄存器的直接訪問,使開發(fā)者無需手動(dòng)計(jì)算地址。例如,通過GPIOA->ODR操作GPIOA的輸出寄存器。必須包含,否則無法操作外設(shè)。第6章基于STM32F103微控制器的嵌入式系統(tǒng)開發(fā)基礎(chǔ)---STM32F10x標(biāo)準(zhǔn)外設(shè)庫(kù)中的文件關(guān)系2025/11/28有了這個(gè)文件,前面介紹的后2種寄存器開發(fā)方式就可以順利進(jìn)行了!2.標(biāo)準(zhǔn)外設(shè)庫(kù)核心頭文件stm32f10x.h(1)數(shù)據(jù)類型定義為了滿足跨平臺(tái)兼容性、可移植性以及標(biāo)準(zhǔn)庫(kù)支持的需要,在stm32f10x.h文件中定義了一系列特有的數(shù)據(jù)類型,如:typedefint32_ts32;typedefint16_ts16;typedefint8_ts8;typedefconstint32_tsc32;/*!<ReadOnly*/typedefconstint16_tsc16;/*!<ReadOnly*/typedefconstint8_tsc8;/*!<ReadOnly*/typedef__IOint32_tvs32;typedef__IOint16_tvs16;typedef__IOint8_tvs8;

第6章基于STM32F103微控制器的嵌入式系統(tǒng)開發(fā)基礎(chǔ)---STM32F10x標(biāo)準(zhǔn)外設(shè)庫(kù)中的文件關(guān)系2025/11/282.標(biāo)準(zhǔn)外設(shè)庫(kù)核心頭文件stm32f10x.h(2)片上外設(shè)結(jié)構(gòu)體類型定義為了方便開發(fā)者訪問和操作STM32的片上外設(shè)的相關(guān)寄存器,stm32f10x.h中定義了各種外設(shè)的結(jié)構(gòu)體類型。這些結(jié)構(gòu)體將外設(shè)的寄存器封裝成一個(gè)整體,使得開發(fā)者可以通過結(jié)構(gòu)體指針來訪問和修改外設(shè)的寄存器值。如對(duì)于GPIO片上外設(shè),stm32f10x.h頭文件中定義了如下所示的一個(gè)名為GPIO_TypeDef的結(jié)構(gòu)體類型,其內(nèi)部成員是GPIO的7個(gè)寄存器。typedefstruct{__IOuint32_tCRL;//GPIO端口配置低寄存器__IOuint32_tCRH;//GPIO端口配置高寄存器__IOuint32_tIDR;//GPIO端口輸入數(shù)據(jù)寄存器__IOuint32_tODR;//GPIO端口輸出數(shù)據(jù)寄存器__IOuint32_tBSRR;//端口位設(shè)置/清除寄存器__IOuint32_tBRR;//端口位清除寄存器__IOuint32_tLCKR;//端口配置鎖定寄存器}GPIO_TypeDef;由于片上外設(shè)的功能是通過其內(nèi)部的寄存器來實(shí)現(xiàn)的,因此,將這些寄存器視為一個(gè)整體,通過C語(yǔ)言的結(jié)構(gòu)體類型變量定義的方式,就可以對(duì)結(jié)構(gòu)體中的成員進(jìn)行操作了。

第6章基于STM32F103微控制器的嵌入式系統(tǒng)開發(fā)基礎(chǔ)---STM32F10x標(biāo)準(zhǔn)外設(shè)庫(kù)中的文件關(guān)系2025/11/282.標(biāo)準(zhǔn)外設(shè)庫(kù)核心頭文件stm32f10x.h(3)外設(shè)變量的聲明所謂的“外設(shè)的聲明”,其實(shí)質(zhì)主要是一些宏定義,宏名就代表了某種外設(shè),如下所示的GPIOA等:#defineGPIOA((GPIO_TypeDef*)GPIOA_BASE)#defineGPIOB((GPIO_TypeDef*)GPIOB_BASE)#defineADC1((ADC_TypeDef*)ADC1_BASE)#defineTIM1((TIM_TypeDef*)TIM1_BASE)……以GPIOA為例,“#defineGPIOA((GPIO_TypeDef*)GPIOA_BASE)”中GPIOA_BASE是一個(gè)宏,它定義了GPIOA端口的基地址(STM32參考手冊(cè)中可以找到;stm32f10x.h頭文件中通過宏也對(duì)其進(jìn)行了定義)。GPIO_TypeDef是一個(gè)結(jié)構(gòu)體類型,當(dāng)GPIOA宏被使用時(shí),它實(shí)際上是將GPIOA_BASE這個(gè)地址轉(zhuǎn)換為一個(gè)GPIO_TypeDef類型的指針。這樣,就可以通過該指針來訪問GPIOA端口的所有寄存器了。例如,要將GPIOA的輸出數(shù)據(jù)寄存器的第0位置1:GPIOA->ODR|=(1<<0);GPIOA引腳0輸出高電平。若該引腳上連接了一個(gè)LED燈,該燈就會(huì)被點(diǎn)亮或熄滅(取決于LED燈的驅(qū)動(dòng)方式)。

第6章基于STM32F103微控制器的嵌入式系統(tǒng)開發(fā)基礎(chǔ)---STM32F10x標(biāo)準(zhǔn)外設(shè)庫(kù)中的文件關(guān)系2025/11/282.標(biāo)準(zhǔn)外設(shè)庫(kù)核心頭文件stm32f10x.h(4)外設(shè)基地址映射STM32F10x系列微控制器芯片的片上外設(shè)被掛載在不同速率的外設(shè)總線APB1、APB2和AHB上,stm32f10x.h頭文件中通過一系列的宏定義實(shí)現(xiàn)了片上外設(shè)基地址的定義。理解這些外設(shè)基地址是如何獲得的,對(duì)于理解如何通過外設(shè)結(jié)構(gòu)體指針實(shí)現(xiàn)對(duì)外設(shè)寄存器的操作是很有幫助的。下面是stm32f10x.h中與外設(shè)基地址相關(guān)的一些宏定義。#definePERIPH_BASE((uint32_t)0x40000000)……#defineAPB1PERIPH_BASEPERIPH_BASE#defineAPB2PERIPH_BASE(PERIPH_BASE+0x10000)#defineAHBPERIPH_BASE(PERIPH_BASE+0x20000)#defineTIM2_BASE(APB1PERIPH_BASE+0x0000)#defineTIM3_BASE(APB1PERIPH_BASE+0x0400)……#defineGPIOA_BASE(APB2PERIPH_BASE+0x0800)#defineGPIOB_BASE(APB2PERIPH_BASE+0x0C00)……GPIOA的基地址是如何基于這些宏定義得到的呢?GPIOA掛載在APB2總線上,它是APB2總線上的第三個(gè)外設(shè)(前兩個(gè)外設(shè)分別為AFIO和EXTI,見圖5.7),每個(gè)外設(shè)被安排占用了1024個(gè)單元,因此,掛在APB2總線上的GPIOA的偏移地址為0x0800,APB2PERIPH_BASE又是基于PERIPH_BASE+0x10000得到的,PERIPH_BASE為0x40000000(STM32F10x不同總線片上外設(shè)地址空間分配見圖5.5),因此,GPIOA_BASE就應(yīng)該為0x40000000+0x10000+0x0800=0x40010800。綜上所述,stm32f10x.h通過定義特定的數(shù)據(jù)類型、片上外設(shè)結(jié)構(gòu)體類型、寄存器地址和位定義以及枚舉等,為STM32F10x系列微控制器的開發(fā)提供了必要的基礎(chǔ)設(shè)施和接口,使得開發(fā)者能夠更加高效、方便地進(jìn)行硬件編程和控制系統(tǒng)設(shè)計(jì)。因此,在用戶使用STM32庫(kù)編寫外設(shè)驅(qū)動(dòng)時(shí),必須將其包含在自己的工程文件中。

第6章基于STM32F103微控制器的嵌入式系統(tǒng)開發(fā)基礎(chǔ)---STM32F10x標(biāo)準(zhǔn)外設(shè)庫(kù)中的文件關(guān)系2025/11/283.系統(tǒng)時(shí)鐘配置文件system_stm32f10x.h/system_stm32f10x.c系統(tǒng)上電復(fù)位時(shí),進(jìn)行系統(tǒng)初始化和時(shí)鐘配置。注意其時(shí)鐘配置功能與rcc.h/.c之間的關(guān)系:?jiǎn)?dòng)流程:1、SystemInit():設(shè)置默認(rèn)時(shí)鐘(如HSI)。2、用戶通過rcc.c中的函數(shù)切換到HSE+PLL以提升性能動(dòng)態(tài)調(diào)整時(shí)鐘:

RCC在運(yùn)行時(shí)切換時(shí)鐘源(如從高速模式切換到低功耗模式)。外設(shè)控制:

所有外設(shè)操作前必須通過RCC使能其時(shí)鐘(否則寄存器訪問無效)。system_stm32f10x.h/.c:?jiǎn)?dòng)時(shí)配置時(shí)鐘;Rcc.h/.c:運(yùn)行時(shí)使能時(shí)鐘或動(dòng)態(tài)調(diào)整時(shí)鐘配置第6章基于STM32F103微控制器的嵌入式系統(tǒng)開發(fā)基礎(chǔ)---STM32F10x標(biāo)準(zhǔn)外設(shè)庫(kù)中的文件關(guān)系2025/11/284.系統(tǒng)啟動(dòng)文件startup_stm32f10x_xx.s啟動(dòng)文件startup_stm32f10x_xx.s是意法半導(dǎo)體公司為STM32F10x系列微控制器提供的。用戶在構(gòu)建工程時(shí),必須導(dǎo)入一個(gè)與工程使用的微控制器容量對(duì)應(yīng)的啟動(dòng)文件。對(duì)于STM32F103系列微控制器來講,主要是用其中3個(gè)啟動(dòng)文件:startup_stm32f10x_ld.s:適用于小容量產(chǎn)品(FLASH≤32K)startup_stm32f10x_md.s:適用于中等容量產(chǎn)品(64K≤FLASH≤128K)startup_stm32f10x_hd.s:適用于大容量產(chǎn)品(256K≤FLASH)第6章基于STM32F103微控制器的嵌入式系統(tǒng)開發(fā)基礎(chǔ)---STM32F10x標(biāo)準(zhǔn)外設(shè)庫(kù)中的文件關(guān)系2025/11/284.系統(tǒng)啟動(dòng)文件startup_stm32f10x_xx.s系統(tǒng)啟動(dòng)文件主要作用是在STM32F10x系列微控制器上電或復(fù)位后,引導(dǎo)程序進(jìn)入主函數(shù)(main函數(shù))之前,執(zhí)行一系列初始化操作。啟動(dòng)文件完成的初始化工作有:(1)初始化堆棧和程序計(jì)數(shù)器:初始化堆棧指針(MSP)和程序計(jì)數(shù)器指針(PC),為程序的執(zhí)行準(zhǔn)備必要的環(huán)境;設(shè)置堆棧大小,并分配相應(yīng)的內(nèi)存空間。(2)設(shè)置異常向量表:設(shè)置中斷向量表,包括復(fù)位處理函數(shù)(Reset_Handler)、非屏蔽中斷處理函數(shù)(NMI_Handler)以及各類異常處理函數(shù)(如硬錯(cuò)誤、內(nèi)存管理錯(cuò)誤、總線錯(cuò)誤等)的入口地址。(3)系統(tǒng)初始化:調(diào)用前面提到的系統(tǒng)初始化函數(shù)SystemInit(),進(jìn)行系統(tǒng)時(shí)鐘和其他硬件的初始化。(4)引導(dǎo)進(jìn)入用戶程序:完成上述初始化工作后,啟動(dòng)文件會(huì)將控制權(quán)轉(zhuǎn)移給C/C++運(yùn)行庫(kù)中的__main函數(shù)(這是C庫(kù)的分支入口,用于進(jìn)行C/C++運(yùn)行環(huán)境的初始化)。最終,__main函數(shù)會(huì)調(diào)用用戶編寫的main函數(shù),從而開始程序的主體執(zhí)行。第6章基于STM32F103微控制器的嵌入式系統(tǒng)開發(fā)基礎(chǔ)---STM32F10x標(biāo)準(zhǔn)外設(shè)庫(kù)中的文件關(guān)系2025/11/285.外設(shè)操作相關(guān)文件stm32f10x_xxx.h/stm32f10x_xxx.c與stm32f10x_conf.h啟動(dòng)文件(1)外設(shè)文件stm32f10x_xxx.h/stm32f10x_xxx.c文件名中的“xxx”對(duì)應(yīng)某種外設(shè),如GPIO,相應(yīng)的外設(shè)文件就是stm32f10x_gpio.h和stm32f10x_gpio.c。因此,STM32F10x系列芯片上有多少種外設(shè),就相應(yīng)有多少個(gè)這樣的外設(shè)文件。這類文件中定義和實(shí)現(xiàn)了針對(duì)相應(yīng)外設(shè)功能的各種操作,如初始化、讀/寫數(shù)據(jù)寄存器、中斷控制等。(2)外設(shè)配置文件stm32f10x_conf.h文件是STM32F10x標(biāo)準(zhǔn)庫(kù)中的一個(gè)重要配置文件,它通過宏定義和包含外設(shè)頭文件的方式,實(shí)現(xiàn)了對(duì)STM32F10x系列微控制器片上外設(shè)資源的配置和初始化設(shè)置。stm32f10x_conf.h位于標(biāo)準(zhǔn)庫(kù)的STM32F10x_StdPeriph_Template文件夾下,用戶在構(gòu)建工程時(shí)應(yīng)該把文件拷貝到自己的應(yīng)用程序文件夾(通常習(xí)慣取名為user)中,并根據(jù)外設(shè)的使用情況導(dǎo)入相應(yīng)外設(shè)的頭文件。第6章基于STM32F103微控制器的嵌入式系統(tǒng)開發(fā)基礎(chǔ)---STM32F10x標(biāo)準(zhǔn)外設(shè)庫(kù)中的文件關(guān)系2025/11/286.中斷/異常相關(guān)的文件misc.h/misc.c與stm32f10x_it.h/stm32f10x_it.c(1)中斷設(shè)置文件:misc.h/misc.c--主要用于配置

Cortex-M3內(nèi)核相關(guān)外設(shè),而非具體的片內(nèi)外設(shè)(如GPIO、USART等)。misc.h和misc.c是針對(duì)CortexM3核內(nèi)的NVIC和Systick(嘀嗒定時(shí)器)而設(shè)計(jì)的,因此,在基于中斷的系統(tǒng)應(yīng)用中,這兩個(gè)文件是必不可少的。(2)中斷服務(wù)程序文件:stm32f10x_it.h/stm32f10x_it.h---非標(biāo)準(zhǔn)外設(shè)庫(kù)文件,位于模版中stm32f10x_it.h和stm32f10x_it.c是STM32F10x系列微控制器的中斷服務(wù)程序文件。它們的主要作用是定義和實(shí)現(xiàn)中斷服務(wù)函數(shù)(ISR)。stm32f10x_it.h文件通常包含中斷服務(wù)函數(shù)的聲明(即函數(shù)原型),而stm32f10x_it.c文件則包含這些函數(shù)的實(shí)現(xiàn)代碼。與外設(shè)配置文件stm32f10x_conf.h一樣,stm32f10x_it.h/stm32f10x_it.c也位于標(biāo)準(zhǔn)庫(kù)的STM32F10x_StdPeriph_Template文件夾下,用戶在構(gòu)建工程時(shí)應(yīng)該把文件拷貝到自己的應(yīng)用程序文件夾(通常習(xí)慣取名為user)中,并根據(jù)中斷的使用情況對(duì)文件進(jìn)行相應(yīng)的完善。第6章基于STM32F103微控制器的嵌入式系統(tǒng)開發(fā)基礎(chǔ)---STM32F10x標(biāo)準(zhǔn)外設(shè)庫(kù)中的文件關(guān)系2025/11/286.stm32f10x_conf.h---非標(biāo)準(zhǔn)外設(shè)庫(kù)文件,位于模版中功能:配置外設(shè)庫(kù)的編譯選項(xiàng),通過宏定義啟用或禁用特定外設(shè)的代碼包含。例如:#defineUSE_SPI//啟用SPI驅(qū)動(dòng)#defineUSE_ADC//啟用ADC驅(qū)動(dòng)工程中的作用:減少編譯時(shí)間及代碼體積,僅包含實(shí)際使用的外設(shè)驅(qū)動(dòng)。注意:需根據(jù)工程需求手動(dòng)啟用/禁用外設(shè)宏。

第6章基于STM32F103微控制器的嵌入式系統(tǒng)開發(fā)基礎(chǔ)---STM32F10x標(biāo)準(zhǔn)外設(shè)庫(kù)中的文件關(guān)系2025/11/28目錄第6章基于STM32F103微控制器的嵌入式系統(tǒng)開發(fā)基礎(chǔ)---目錄第6章基于STM32F103微控制器的嵌入式系統(tǒng)開發(fā)基礎(chǔ)(2)6.2ARMCortex微控制器軟件接口標(biāo)準(zhǔn)CMSIS 6.2.1CMSIS軟件接口標(biāo)準(zhǔn) 6.2.2STM32F1xx微控制器的軟件包CMSIS下載與安裝 6.3STM32F1標(biāo)準(zhǔn)外設(shè)庫(kù)

6.4基于標(biāo)準(zhǔn)外設(shè)庫(kù)的工程構(gòu)建 6.5Proteus嵌入式系統(tǒng)仿真與調(diào)試

基于標(biāo)準(zhǔn)外設(shè)庫(kù)的工程開發(fā)過程由兩步組成。1、首先創(chuàng)建一個(gè)工程文件夾,用來存放工程用到的相關(guān)庫(kù)文件、工程文件以及用戶文件等。2、然后在KeilMDK集成開發(fā)環(huán)境中創(chuàng)建工程,將工程文件夾中的相關(guān)文件關(guān)聯(lián)到工程的相關(guān)組中,進(jìn)行相關(guān)環(huán)境參數(shù)的設(shè)置,用戶程序的編寫與調(diào)試等工作。這里我們?nèi)允褂帽菊麻_頭給出的“LED燈閃爍”例子,詳細(xì)介紹基于標(biāo)準(zhǔn)外設(shè)庫(kù)的工程構(gòu)建過程。

第6章基于STM32F103微控制器的嵌入式系統(tǒng)開發(fā)基礎(chǔ)---基于標(biāo)準(zhǔn)外設(shè)庫(kù)的工程構(gòu)建2025/11/28第6章基于STM32F103微控制器的嵌入式系統(tǒng)開發(fā)基礎(chǔ)---基于標(biāo)準(zhǔn)外設(shè)庫(kù)的工程構(gòu)建過程2025/11/28標(biāo)準(zhǔn)外設(shè)庫(kù)構(gòu)建存放工程的文件夾將工程中的相關(guān)文件(庫(kù)文件與用戶文件)關(guān)聯(lián)到的MDK5環(huán)境中6.4.1創(chuàng)建存放工程的工程文件夾

在一個(gè)硬盤分區(qū)上建立工程文件夾,以本章“LED燈閃爍”為例,工程文件夾取名LED,并且在該目錄下再創(chuàng)建3個(gè)空文件夾,如圖6.10所示。注意:不同的開發(fā)者會(huì)根據(jù)自己的習(xí)慣或喜好,在工程文件夾下構(gòu)建不同命名的子文件夾來存放工程的相關(guān)文件,完全遵從個(gè)人習(xí)慣以及開發(fā)過程中便于相關(guān)文件的查找,沒有統(tǒng)一的標(biāo)準(zhǔn)。我們根據(jù)工程中文件的來源構(gòu)建了三個(gè)子文件夾:Lib文件夾存放ARM公司和意法半導(dǎo)體公司提供的相關(guān)庫(kù)文件;Project文件夾存放MDK集成開發(fā)環(huán)境生成的工程文件;User文件夾用來存放用戶自己編寫的文件。根目錄下的text.txt文本文件是對(duì)工程功能的簡(jiǎn)單描述。第6章基于STM32F103微控制器的嵌入式系統(tǒng)開發(fā)基礎(chǔ)---基于標(biāo)準(zhǔn)外設(shè)庫(kù)的工程構(gòu)建過程2025/11/28圖6.10工程文件管理目錄6.4.1創(chuàng)建存放工程的工程文件夾

(1)Lib文件夾在Lib文件夾下創(chuàng)建如下4個(gè)子文件夾:

1、\Lib\CMSIS:將標(biāo)準(zhǔn)庫(kù)中CMSIS目錄下的相關(guān)文件拷貝到該文件夾下:core_cm3.h,core_cm3.c,stm32f10x.h,system_stm32f10x.h和system_stm32f10x.c2、\Lib\inc:將標(biāo)準(zhǔn)庫(kù)中STM32F10x_StdPeriph_Driver\inc文件夾下相關(guān)外設(shè)的頭文件拷貝到該文件夾下。如本工程只涉及RCC和GPIO兩個(gè)外設(shè),只需將stm32f10x_rcc.h和stm32f10x_gpio.h兩個(gè)文件拷貝過來即可。

3、\Lib\src:將標(biāo)準(zhǔn)庫(kù)中STM32F10x_StdPeriph_Driver\src文件夾下相關(guān)外設(shè)的文件拷貝到該文件夾下。與頭文件一樣,只需將stm32f10x_rcc.c和stm32f10x_gpio.c拷貝過來。

4、\Lib\startup:根據(jù)工程所用微控制器芯片F(xiàn)lash容量大小,從STM32F10x標(biāo)準(zhǔn)庫(kù)的\CM3\DeviceSupport\ST\STM32F10x\startup\arm文件夾中選擇一個(gè)合適的啟動(dòng)文件,拷貝到該文件夾下。如本工程使用STM32F103R6微控制器,F(xiàn)lash容量為32K,屬于小容量產(chǎn)品,應(yīng)該選擇startup_stm32f10x_ld.s頭文件。第6章基于STM32F103微控制器的嵌入式系統(tǒng)開發(fā)基礎(chǔ)---基于標(biāo)準(zhǔn)外設(shè)庫(kù)的工程構(gòu)建過程2025/11/28圖6.10工程文件管理目錄6.4.1創(chuàng)建存放工程的工程文件夾

(2)Project文件夾存放MDK生成的工程文件(.uvprojx文件)。MDK也會(huì)在該文件夾下自動(dòng)生成兩個(gè)子文件夾Objects和Listings來存放輸出文件和過程列表文件。第6章基于STM32F103微控制器的嵌入式系統(tǒng)開發(fā)基礎(chǔ)---基于標(biāo)準(zhǔn)外設(shè)庫(kù)的工程構(gòu)建過程2025/11/28圖6.10工程文件管理目錄(3)User文件夾該文件夾主要存放用戶自定義的代碼文件,包括主函數(shù)文件、中斷服務(wù)函數(shù)文件以及用戶根據(jù)需要添加的其他文件。1)用戶程序代碼main.c:工程的主函數(shù)文件,用戶需要在這里編寫程序的主循環(huán)、初始化代碼以及業(yè)務(wù)邏輯等。它是用戶程序的核心部分。2)中斷服務(wù)函數(shù)stm32f10x_it.c:用于定義和實(shí)現(xiàn)中斷服務(wù)函數(shù)。該文件(包括其對(duì)應(yīng)的頭文件)位于標(biāo)準(zhǔn)庫(kù)中的模板文件夾“STM32F10x_StdPeriph_Template”中,用戶需要將其拷貝到User文件夾中,用戶要根據(jù)需要添加或修改該文件中的中斷服務(wù)函數(shù)。3)其他用戶自定義文件:除了上述文件外,User目錄還可能包含用戶根據(jù)需要添加的其他.c和.h文件。這些文件可以包含用戶自定義的函數(shù)、變量、類型定義等,用于實(shí)現(xiàn)特定的功能或模塊。6.4.2在KeilMDK中創(chuàng)建工程在創(chuàng)建了存放工程的文件夾并將相關(guān)的文件從標(biāo)準(zhǔn)庫(kù)中拷貝到相應(yīng)的文件夾后,就可以開始在MDK中創(chuàng)建工程了。1.創(chuàng)建工程打開MDK開發(fā)工具,點(diǎn)擊KeilMDK的菜單:Project–>NewUvisionProject,如圖6.11所示,在彈出的對(duì)話框中,將工程的存放位置定位到上一節(jié)已經(jīng)建好的工程文件夾:LED\Project,輸入工程文件名“LED”,然后單擊保存。第6章基于STM32F103微控制器的嵌入式系統(tǒng)開發(fā)基礎(chǔ)---基于標(biāo)準(zhǔn)外設(shè)庫(kù)的工程構(gòu)建過程2025/11/28圖6.11創(chuàng)建工程對(duì)話框在彈出的如圖6.12所示的對(duì)話框中選擇所使用的微控制器芯片,這里我們選擇STM32F103R6,單擊“OK”。彈出如圖6.13所示的ManageRun-TimeEnvironment對(duì)話框,為工程添加需要的組件。本工程不需要添加任何組件,直接點(diǎn)擊Cancel。圖6.12選擇微控制器型號(hào)6.4.2在KeilMDK中創(chuàng)建工程

2.將相關(guān)文件關(guān)聯(lián)到工程中到目前為止,MDK中生成了圖6.14所示的包含了LED工程初步信息的工程框架。Target通常指的是項(xiàng)目中的一個(gè)具體目標(biāo)設(shè)備或配置。由于一個(gè)項(xiàng)目可能包含多個(gè)Target,因此Target的命名需要能夠清晰地區(qū)分它們。由于本項(xiàng)目就一個(gè)目標(biāo)設(shè)備,因此可以使用默認(rèn)的名稱Target1。項(xiàng)目管理區(qū)中的“SourceGroup1”為默認(rèn)的第一個(gè)源文件分組名稱,在KeilMDK5的項(xiàng)目結(jié)構(gòu)中,開發(fā)者可以創(chuàng)建多個(gè)SourceGroup來分類和組織他們的源代碼文件,以便于管理和維護(hù)。下面我們結(jié)合本章“LED燈閃爍”工程,說明如何創(chuàng)建源文件組,并將上一節(jié)在硬盤上創(chuàng)建的工程文件夾中的文件關(guān)聯(lián)到工程的相關(guān)源文件組中。第6章基于STM32F103微控制器的嵌入式系統(tǒng)開發(fā)基礎(chǔ)---基于標(biāo)準(zhǔn)外設(shè)庫(kù)的工程構(gòu)建過程2025/11/28圖6.14“LED燈閃爍”工程的初始工程框架6.4.2在KeilMDK中創(chuàng)建工程1)源文件組的創(chuàng)建默認(rèn)源文件組名“SourceGroup1”修改:在工程管理區(qū)間斷雙擊(雙擊之間間隔1s左右)需要修改的文本“SourceGroup1”,待其處于可編輯狀態(tài)后,修改其內(nèi)容為工程實(shí)際的源文件組名。比如,這里我們將默認(rèn)的SourceGroup1修改為Startup。新建源文件組:點(diǎn)擊Project->Manage->Components,Environment,Books…,或點(diǎn)擊工具欄圖標(biāo),彈出圖6.15所示的“管理項(xiàng)目項(xiàng)”對(duì)話框。

在彈出的對(duì)話框中,單擊New(Insert),在出現(xiàn)的虛線框(位于startup下)中,鍵入新的源文件組名,這里我們輸入CMSIS。依次重復(fù)操作,分別構(gòu)建源文件組StdPeriph_Driver,User,Text。至此,得到圖6.16所示的工程框架(目前源文件組還是空的,工程的相關(guān)文件還沒有從硬盤上的工程文件夾關(guān)聯(lián)到相應(yīng)的源文件組中)。這里構(gòu)建的源文件組擬關(guān)聯(lián)的工程文件如下:Startup:關(guān)聯(lián)工程啟動(dòng)文件CMSIS:關(guān)聯(lián)內(nèi)核相關(guān)文件StdPeriph_Driver:關(guān)聯(lián)相關(guān)片上外設(shè)文件User:關(guān)聯(lián)用戶編寫的代碼圖6.15“管理項(xiàng)目項(xiàng)”對(duì)話框圖6.14“LED燈閃爍”工程的初始工程框架Text:關(guān)聯(lián)一個(gè)項(xiàng)目說明的文本文件第6章基于STM32F103微控制器的嵌入式系統(tǒng)開發(fā)基礎(chǔ)---基于標(biāo)準(zhǔn)外設(shè)庫(kù)的工程構(gòu)建過程2025/11/28圖6.15“管理項(xiàng)目項(xiàng)”對(duì)話框圖6.16創(chuàng)建完空的源文件組的工程框架注意:MDK5工程中“源文件組”的組織與命名沒有統(tǒng)一的標(biāo)準(zhǔn),用戶可以根據(jù)自己的喜好來創(chuàng)建,唯一的目的就是方便用戶在項(xiàng)目開發(fā)過程中對(duì)相關(guān)文件的查找與管理。6.4.2在KeilMDK中創(chuàng)建工程2)文件關(guān)聯(lián)到源文件組雙擊相關(guān)的源文件組名(比如Startup),在圖6.17所示彈出的“AddFilestoGroup‘Startup’”對(duì)話框中,從工程文件夾Lib\startup\arm中選擇適用于本項(xiàng)目微控制器STM32F103R6的啟動(dòng)文件startup_stm32f10x_ld.s,單擊“Add”按鈕,即可將startup_stm32f10x_ld.s文件關(guān)聯(lián)到Startup源文件組中。第6章基于STM32F103微控制器的嵌入式系統(tǒng)開發(fā)基礎(chǔ)---基于標(biāo)準(zhǔn)外設(shè)庫(kù)的工程構(gòu)建過程2025/11/28圖6.17關(guān)聯(lián)文件到源文件組對(duì)話框6.4.2在KeilMDK中創(chuàng)建工程依次重復(fù)操作,將相關(guān)文件關(guān)聯(lián)到相應(yīng)的源文件組中,最后得到圖6.18所示的相關(guān)文件關(guān)聯(lián)到工程中后的工程架構(gòu)。若這時(shí)候直接對(duì)工程進(jìn)行編譯,顯然會(huì)出現(xiàn)很多錯(cuò)誤或警告,原因是目前還沒有對(duì)編譯與鏈接環(huán)境進(jìn)行設(shè)置。第6章基于STM32F103微控制器的嵌入式系統(tǒng)開發(fā)基礎(chǔ)---基于標(biāo)準(zhǔn)外設(shè)庫(kù)的工程構(gòu)建過程2025/11/28圖6.18關(guān)聯(lián)相關(guān)文件后的工程框架6.4.2在KeilMDK中創(chuàng)建工程3.編譯與鏈接環(huán)境配置在把相關(guān)文件關(guān)聯(lián)到工程中后,還需要對(duì)開發(fā)環(huán)境進(jìn)行配置。點(diǎn)擊Project–>OptionsforTarget‘Target1…’,或單擊工具欄圖標(biāo),彈出圖6.19所示的目標(biāo)選項(xiàng)配置對(duì)話框。OptionsforTarget'Target1...'對(duì)話框是MDK5中非常重要的配置界面,它允許開發(fā)者根據(jù)項(xiàng)目需求對(duì)編譯、鏈接、調(diào)試等各個(gè)環(huán)節(jié)進(jìn)行詳細(xì)的配置。通過合理配置這些選項(xiàng),可以優(yōu)化程序性能、提高開發(fā)效率,并確保程序的穩(wěn)定性和可靠性。由于該對(duì)話框包含的設(shè)置內(nèi)容較多,為了方便起見,表6.1列出了對(duì)話框中各標(biāo)簽頁(yè)的主要功能。第6章基于STM32F103微控制器的嵌入式系統(tǒng)開發(fā)基礎(chǔ)---基于標(biāo)準(zhǔn)外設(shè)庫(kù)的工程構(gòu)建過程2025/11/28圖6.19OptionsforTarget‘Target1’對(duì)話框6.4.2在KeilMDK中創(chuàng)建工程3.編譯與鏈接環(huán)境配置由于該對(duì)話框包含的設(shè)置內(nèi)容較多,為了方便起見,表6.1列出了對(duì)話框中各標(biāo)簽頁(yè)的主要功能。第6章基于STM32F103微控制器的嵌入式系統(tǒng)開發(fā)基礎(chǔ)---基于標(biāo)準(zhǔn)外設(shè)庫(kù)的工程構(gòu)建過程2025/11/286.4.2在KeilMDK中創(chuàng)建工程3.編譯與鏈接環(huán)境配置1)Output標(biāo)簽頁(yè)點(diǎn)擊Output標(biāo)簽,彈出圖6.20所示的標(biāo)簽頁(yè)。目標(biāo)文件的存放位置設(shè)置:默認(rèn)情況下,目標(biāo)文件存放在工程文件夾下由MDK自動(dòng)生成的Objects文件夾中。若需要修改,點(diǎn)擊“SelectFolderforobjects…”按鈕,將目標(biāo)文件的存放位置進(jìn)行重新設(shè)置(用戶需要事先創(chuàng)建一個(gè)用來存放目標(biāo)文件的文件夾)。選擇是否生成Hex文件:MDK5生成的兩種主要可執(zhí)行文件是hex文件和axf文件。其中axf文件是默認(rèn)生成的可執(zhí)行文件,而hex文件則需要在編譯設(shè)置中指定生成。這兩種文件各有用途,axf文件主要用于調(diào)試,而hex文件則用于編程或燒錄到目標(biāo)設(shè)備中。第6章基于STM32F103微控制器的嵌入式系統(tǒng)開發(fā)基礎(chǔ)---基于標(biāo)準(zhǔn)外設(shè)庫(kù)的工程構(gòu)建過程2025/11/286.4.2在KeilMDK中創(chuàng)建工程3.編譯與鏈接環(huán)境配置2)Listing標(biāo)簽頁(yè)點(diǎn)擊Listing標(biāo)簽,彈出圖6.21所示的標(biāo)簽頁(yè)。默認(rèn)情況下,列表文件存放在工程文件夾下由MDK自動(dòng)生成的Listings文件夾中。若需要修改,點(diǎn)擊“SelectFolderforobjects…”按鈕,將列表文件的存放位置進(jìn)行重新設(shè)置(用戶需要事先創(chuàng)建一個(gè)用來存放列表文件的文件夾)。第6章基于STM32F103微控制器的嵌入式系統(tǒng)開發(fā)基礎(chǔ)---基于標(biāo)準(zhǔn)外設(shè)庫(kù)的工程構(gòu)建過程2025/11/286.4.2在KeilMDK中創(chuàng)建工程3.編譯與鏈接環(huán)境配置3)C/C++標(biāo)簽頁(yè)點(diǎn)擊C/C++標(biāo)簽,彈出圖6.22所示的標(biāo)簽頁(yè)。C/C++標(biāo)簽頁(yè)中需要設(shè)置的選項(xiàng)較多,是實(shí)現(xiàn)工程能被正確編譯的關(guān)鍵,主要包括:添加條件宏:在Define標(biāo)簽后的編輯框輸入宏常量:USE_STDPERIPH_DRIVER和STM32F10X_LD(中間用逗號(hào)分開)。

USE_STDPERIPH_DRIVER:表明本工程開發(fā)過程中需要使用STM32庫(kù)函數(shù)。

STM32F10X_LD:表明工程采用的芯片系列為STM32F10X低容量(Low-Density)芯片。STM32F10x系列芯片根據(jù)內(nèi)存容量和特性分為中容量(Medium-Density)、小容量(Low-Density)和大容量(High-Density)等。第6章基于STM32F103微控制器的嵌入式系統(tǒng)開發(fā)基礎(chǔ)---基于標(biāo)準(zhǔn)外設(shè)庫(kù)的工程構(gòu)建過程2025/11/286.4.2在KeilMDK中創(chuàng)建工程3.編譯與鏈接環(huán)境配置3)C/C++標(biāo)簽頁(yè)點(diǎn)擊C/C++標(biāo)簽,彈出圖6.22所示的標(biāo)簽頁(yè)。C/C++標(biāo)簽頁(yè)中需要設(shè)置的選項(xiàng)較多,是實(shí)現(xiàn)工程能被正確編譯的關(guān)鍵,主要包括:添加頭文件:?jiǎn)螕簟癐ncludePaths”標(biāo)簽所在編輯框后的“.…”按鈕,彈出圖6.23所示的頭文件設(shè)置對(duì)話框,單擊右邊的添加按鈕New(Insert),找到工程所用到的頭件(這些文件實(shí)際存放于上一節(jié)所建立的User和Lib文件夾下面),確認(rèn)后該頭文件就自動(dòng)添加到頭文件列表中。添加了所有頭文件后的對(duì)話框如圖6.24所示。第6章基于STM32F103微控制器的嵌入式系統(tǒng)開發(fā)基礎(chǔ)---基于標(biāo)準(zhǔn)外設(shè)庫(kù)的工程構(gòu)建過程2025/11/28圖6.24添加了所有頭文件的對(duì)話框6.4.2在KeilMDK中創(chuàng)建工程3.編譯與鏈接環(huán)境配置3)C/C++標(biāo)簽頁(yè)點(diǎn)擊C/C++標(biāo)簽,彈出圖6.22所示的標(biāo)簽頁(yè)。C/C++標(biāo)簽頁(yè)中需要設(shè)置的選項(xiàng)較多,是實(shí)現(xiàn)工程能被正確編譯的關(guān)鍵,主要包括:C語(yǔ)言標(biāo)準(zhǔn)選擇:通過勾選C/C++標(biāo)簽頁(yè)中的C99Mode選項(xiàng),開發(fā)者可以啟用C99標(biāo)準(zhǔn)編譯其C語(yǔ)言代碼。在C語(yǔ)言發(fā)展過程中,先后推出有C89/C90標(biāo)準(zhǔn)(1989年)、C99標(biāo)準(zhǔn)(1999年)和C11標(biāo)準(zhǔn)(2011年)等。至此,我們就可以對(duì)圖6.18所示的關(guān)聯(lián)了相關(guān)文件后的工程進(jìn)行編譯了,生成可執(zhí)行的axf文件和hex文件。

為了顯示工程中的各個(gè)源文件包含的頭文件,在圖6.25的Target1上點(diǎn)擊右鍵,在彈出的對(duì)話框中選擇“ShowIncludeFileDependencies”,這樣,在工程管理區(qū)就會(huì)看到各源文件包含的頭文件情況。第6章基于STM32F103微控制器的嵌入式系統(tǒng)開發(fā)基礎(chǔ)---基于標(biāo)準(zhǔn)外設(shè)庫(kù)的工程構(gòu)建過程2025/11/28圖6.25工程管理區(qū)顯示源文件關(guān)聯(lián)的圖文件目

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論