0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何使用KeilMDK以及標(biāo)準(zhǔn)外設(shè)庫(kù)創(chuàng)建STM32工程

Q4MP_gh_c472c21 ? 來(lái)源:嵌入式ARM ? 作者:嵌入式ARM ? 2020-09-21 11:51 ? 次閱讀

本文所使用Keil MDK 的版本為V4.21。其他版本差別不大,讀者可以根據(jù)自己使用的版本進(jìn)行操作或者從Keil的官網(wǎng)下載新版本。使用的標(biāo)準(zhǔn)外設(shè)庫(kù)為V3.5版本。使用的開(kāi)發(fā)調(diào)試工具為JLINK-V8,使用的驅(qū)動(dòng)版本為V4.08l。

建立工程目錄

首先先建立一個(gè)用于存放工程的文件夾,此處命名為STM32;在文件夾下分別建立LIB、USER、MDK三個(gè)文件夾,分別用于存放標(biāo)準(zhǔn)外設(shè)庫(kù)文件、用戶程序文件、工程目錄。

在MDK文件夾下建立List、Obj兩個(gè)文件夾,分別用于存放在編譯過(guò)程中產(chǎn)生的臨時(shí)文件和輸出文件。

接下來(lái)拷貝標(biāo)準(zhǔn)外設(shè)庫(kù)和相應(yīng)的文件到工程目錄中,

首先拷貝STM32F10x_StdPeriph_Lib_V3.5.0Libraries文件夾下的兩個(gè)文件夾CMSIS和STM32F10x_StdPeriph_Driver到剛剛新建的STM32LIB目錄下,接下來(lái)拷貝用戶編寫程序的程序文件,此文件可以從標(biāo)準(zhǔn)外設(shè)庫(kù)自帶的例程中拷貝,從STM32F10x_StdPeriph_Lib_V3.5.0ProjectSTM32F10x_StdPeriph_ExamplesADC3ADCs_DMA目錄下拷貝main.c、stm32f10x_conf.h、stm32f10x_it.c、stm32f10x_it.h四個(gè)文件,這四個(gè)文件是在編程的時(shí)候用戶往往需要根據(jù)實(shí)際需求進(jìn)行修改的。并且拷貝至STM32USER目錄下,system_stm32f10x.c文件定義了系統(tǒng)時(shí)鐘參數(shù)并完成微控制器的初始化,標(biāo)準(zhǔn)外設(shè)庫(kù)中已經(jīng)有了,這里可以不拷貝。這樣所需要的文件都已經(jīng)具備了,如圖1所示。

圖1工程目錄文件夾結(jié)構(gòu)

MDK的操作與設(shè)置

1. 新建工程

首先啟動(dòng)Keil uVision4,點(diǎn)擊菜單欄Project-New uVision Project,選擇工程的保存位置,保存位置選擇在之前建立的MDK文件夾下,如圖2所示。

圖2保存路徑的選擇

在彈出的界面中選擇所使用的芯片信號(hào),筆者使用的芯片型號(hào)為STM32F103ZET6,所以選擇STM32F103ZE,如圖3所示。

圖3選擇芯片型號(hào)

芯片選擇完成后軟件會(huì)彈出一條提示,提示是否要拷貝STM32大容量啟動(dòng)代碼并添加到工程,由于我們使用新版本標(biāo)準(zhǔn)外設(shè)庫(kù)中提供的啟動(dòng)代碼,因此此處選擇否。如圖4所示。

圖4拷貝啟動(dòng)代碼選擇

接下來(lái)就出現(xiàn)了一個(gè)空的工程窗口,建立了一個(gè)新的工程。

2. 添加程序文件

在左側(cè)Project一欄中對(duì)Target 1兩次點(diǎn)擊之后可以重命名,這里命名為STM32,然后右擊,如所示,單擊Manage Comoonents。出現(xiàn)如所圖5示界面。

圖5選擇Manage Comoonents

在這個(gè)界面里可以更為方便的添加工程的相關(guān)文件。也可以在對(duì)應(yīng)的Group上右鍵Add Group和Add Files to Group只是這種方式更方便集中的添加和管理。按照?qǐng)D6所示,建立四個(gè)Group,點(diǎn)擊Groups一欄右上角圖標(biāo),依次新建USER、CMSIS、LIB、StartUp四個(gè)組,點(diǎn)擊對(duì)應(yīng)的組在點(diǎn)擊右下方Add Files添加相應(yīng)的文件到對(duì)應(yīng)的組中。

USER組中添加USER文件夾下的文件。

CMSIS組中添加STM32 PJSTM32LIBCMSISCM3CoreSupport文件夾下core_cm3.c文件和STM32LIBCMSISCM3DeviceSupportSTSTM32F10x文件夾下system_stm32f10x.c文件。

LIB組下添加STM32LIBSTM32F10x_StdPeriph_Driversrc下的所有文件,這個(gè)組的文件也可以根據(jù)后面的程序功能添加對(duì)應(yīng)的功能文件。

StartUp組下添加STM32LIBCMSISCM3DeviceSupportSTSTM32F10xstartuparm文件夾下startup_stm32f10x_hd.s文件,此文件根據(jù)芯片的所屬類型來(lái)選擇,STM32F103ZE為大容量器件所以選擇hd結(jié)尾的啟動(dòng)文件。

至此,已經(jīng)將對(duì)應(yīng)的文件全部加入工程中。

圖6編輯組并添加對(duì)應(yīng)文件

文件添加完成后的工程管理窗口如圖7所示。其中CMSIS和LIB組中的文件圖標(biāo)上有個(gè)鑰匙圖案,表示該文件當(dāng)前為只讀屬性,工程編譯完成后前面會(huì)出現(xiàn)一個(gè)加號(hào),點(diǎn)擊展開(kāi)可以顯示當(dāng)前文件所調(diào)用的文件。

圖7工程管理文件列表

3. 參數(shù)設(shè)置

接下來(lái)需要對(duì)工程進(jìn)行一些參數(shù)設(shè)置,在中STM32上右擊,選擇第一項(xiàng)Options for Target ‘STM32’,如圖8所示。

圖8選擇進(jìn)行參數(shù)設(shè)置

彈出窗口如圖9所示。在這個(gè)窗口中共有10個(gè)選項(xiàng)卡,第一個(gè)選項(xiàng)卡Device用于選擇使用的器件,由于在新建工程的時(shí)候已經(jīng)選擇這里可以不用在選擇,當(dāng)前的工程如果在后期要更換使用的芯片時(shí)可以在這個(gè)選項(xiàng)卡中更換芯片,同時(shí)還要注意更換對(duì)應(yīng)的啟動(dòng)文件。在Target選項(xiàng)卡中,一般只需要填上使用的晶振頻率即可,其他都可以保持默認(rèn)。

圖9 Target選項(xiàng)設(shè)置

在如圖10所示Output選項(xiàng)卡中主要注意兩項(xiàng),一是選擇輸出文件夾,選擇之前工程目錄中MDK文件夾下的Obj文件夾,在下面還有一個(gè)Create HEX File選項(xiàng),用于選擇是否生成hex文件,如果編譯好的程序要寫片,或者要提供給別人下載到芯片中而不希望別人知道源碼時(shí)可以提供HEX文件。

圖10 Output選項(xiàng)設(shè)置

在Listing選項(xiàng)卡下同樣可以選擇Listing對(duì)應(yīng)的文件夾,這里選擇STM32MDKList文件夾,下方的復(fù)選框可以選擇需要生成的調(diào)試信息,這里保持默認(rèn)即可,如圖11所示。

圖11 Listing選項(xiàng)設(shè)置

C/C++選項(xiàng)卡中的設(shè)置比較重要,如圖12所示,選項(xiàng)卡中主要有兩個(gè)地方需要注意,首先是整個(gè)工程的宏定義,在前面標(biāo)準(zhǔn)外設(shè)庫(kù)部分已經(jīng)有過(guò)介紹,標(biāo)準(zhǔn)外設(shè)庫(kù)中很多功能都是通過(guò)宏定義來(lái)實(shí)現(xiàn)的,由于標(biāo)準(zhǔn)外設(shè)庫(kù)針對(duì)STM32一系列芯片,因此需要通過(guò)宏定義來(lái)進(jìn)行針對(duì)性的選擇。這種選擇有兩種方式,有的人是直接改動(dòng)宏定義部分的庫(kù)文件,缺點(diǎn)是需要更改一些功能時(shí)不是很方便,而且筆者建議在盡量不更改庫(kù)文件的方式下實(shí)現(xiàn)功能的配置和使用,另一種方式就是在工程的設(shè)置中添加宏定義,這兒添加了兩個(gè)宏定義,USE_STDPERIPH_DRIVER表示使用標(biāo)準(zhǔn)外設(shè)庫(kù)進(jìn)行程序開(kāi)發(fā),STM32F10X_HD表示使用的是STM32F10X系列大容量器件,本例中中使用的是STM32F103ZET6故填寫此項(xiàng)。

需要說(shuō)明的是在程序開(kāi)發(fā)過(guò)程中不光庫(kù)文件可以通過(guò)宏定義的方式進(jìn)行程序功能配置,用戶程序也可以仿照庫(kù)文件的這種形式,通過(guò)相關(guān)的宏定義進(jìn)行一些參數(shù)配置。STM32的標(biāo)準(zhǔn)外設(shè)庫(kù)在程序組織性、層次性、規(guī)范性等方面都值得我們?nèi)W(xué)習(xí)的。在“Target”的選項(xiàng)卡中進(jìn)行的宏定義是這對(duì)當(dāng)前“Target”有效的,在每一個(gè)“Group”同樣可以設(shè)置作用于Group的宏定義。

Language/Code Generation 一欄中主要是針對(duì)程序語(yǔ)言的一些優(yōu)化和配置,默認(rèn)情況下保持默認(rèn)即可。

圖12 C/C++選項(xiàng)設(shè)置

接下來(lái)一個(gè)重要的設(shè)置就是設(shè)置工程所包含的頭文件目錄,如圖13所示,點(diǎn)擊Include Paths一欄右側(cè)圖標(biāo),彈出如所示的對(duì)話框。點(diǎn)擊對(duì)話框右上角圖標(biāo),添加工程所包括的頭文件路徑,添加頭文件路徑的時(shí)候要把當(dāng)前工程目錄中包含頭文件的路徑都添加進(jìn)去,如所示,添加了以下幾個(gè)路徑:

..USER

..LIBSTM32F10x_StdPeriph_Driverinc

..LIBCMSISCM3CoreSupport

..LIBCMSISCM3DeviceSupportSTSTM32F10x

圖13添加頭文件包含路徑

如果有用戶自己編寫的頭文件也要相應(yīng)的加上引用路徑。仔細(xì)觀察可以發(fā)現(xiàn)在標(biāo)注外設(shè)庫(kù)中頭文件的引用為:#include "stm32f10x.h",在C語(yǔ)言的學(xué)習(xí)中我們知道雙引號(hào)表示編譯器從用戶目錄開(kāi)始搜索,如果未找到才回去系統(tǒng)目錄去查找,MDK的安裝目錄中同樣存在對(duì)應(yīng)的庫(kù)文件,路徑為KeilARMINCSTSTM32F10x,但是由于不同的版本所內(nèi)含的庫(kù)文件不同,如目前最新的V4.21版本中則內(nèi)置了V3.4版本的庫(kù)文件,而之前的版本中很多內(nèi)置了V2.0版本的庫(kù)文件,因此為了保持工程所使用的庫(kù)文件和引用的頭文件的一致性,同時(shí)也方便工程文件拷貝到其他電腦上運(yùn)行,建議大家都按照本書介紹的方式都從自己的目錄中引用頭文件。

4. 程序調(diào)試與下載設(shè)置

頭文件引用路徑添加完成后,就可以進(jìn)行相關(guān)的編譯工作了,在進(jìn)行這一步工作之前,我們還要完成有關(guān)程序調(diào)試和下載的相關(guān)設(shè)置,有關(guān)調(diào)試的設(shè)置在Debug選項(xiàng)卡中,之前的Asm和Linker選項(xiàng)卡保持默認(rèn)。Debug選項(xiàng)卡如圖14所示。在此選項(xiàng)卡中主要完成程序調(diào)試的相關(guān)設(shè)置,選項(xiàng)卡主要分為兩個(gè)部分,左側(cè)是使用模擬器進(jìn)行仿真與調(diào)試的方式,點(diǎn)選后軟件會(huì)進(jìn)入模擬器調(diào)試。右側(cè)是使用仿真器連接硬件開(kāi)發(fā)平臺(tái)進(jìn)行調(diào)試,首先從右側(cè)選擇所使用的仿真器,這里使用的是J-Link仿真器,故在下拉框中選擇Cortex-M/R J-LINK/J-Trace,在兩側(cè)的下方可以通過(guò)勾選對(duì)應(yīng)的復(fù)選框來(lái)選擇是否需要在調(diào)試開(kāi)始時(shí)下載程序和運(yùn)行到主程序,其他部分的設(shè)置保持默認(rèn)即可。

圖14調(diào)試工具設(shè)置

點(diǎn)擊右側(cè)圖標(biāo)進(jìn)入J-Link設(shè)置界面,如果此時(shí)仿真器和硬件開(kāi)發(fā)平臺(tái)已經(jīng)正確連接就會(huì)出現(xiàn)如圖15所示的界面,同時(shí)系統(tǒng)系統(tǒng)任務(wù)欄中會(huì)自動(dòng)彈出J-Link的控制軟件。從界面中可以讀出當(dāng)前的J-Link SN號(hào)以及相應(yīng)的版本信息,如果沒(méi)有出現(xiàn)相關(guān)信息請(qǐng)檢查相關(guān)驅(qū)動(dòng)程序是否正確安裝,并到系統(tǒng)的設(shè)備管理器中通用串行總線控制設(shè)備一項(xiàng)檢查系統(tǒng)有沒(méi)有識(shí)別出J-Link,右側(cè)則可以讀取所連接的設(shè)備信息,如果沒(méi)有出現(xiàn)類似的信息請(qǐng)檢查硬件連接。在此選項(xiàng)卡中可以進(jìn)行J-Link的端口、速度等設(shè)置,這里只需要保持默認(rèn)就可以了。

圖15J-Link連接

STM32F10X內(nèi)核集成了串行/JTAG調(diào)試接口SWJ-DP(Serial Wire and JTAG)。這是標(biāo)準(zhǔn)的ARM CoreSight調(diào)試接口,包括JTAG-DP接口(使用5個(gè)引腳)和SW-DP(使用兩個(gè)引腳)。引腳分配如表1所示。兩種方式都可以進(jìn)行程序的調(diào)試和下載,但是SW方式更節(jié)省端口,只需要兩根線就可以,多余的I/O可以釋放用作普通用途,SW方式和JTAG方式在普通程序調(diào)試下載與調(diào)試過(guò)程中并無(wú)明顯差別,如果想使用SW的方式調(diào)試程序只需要在Port的下拉列表中選擇SW即可,如圖16所示。選擇完成后如果硬件連接正確同樣能夠讀取芯片的信息。

表1SWJ調(diào)試端口引腳

圖16使用SW方式

設(shè)置好了Debug選項(xiàng)卡中有關(guān)選項(xiàng)后還需要設(shè)置Flash Download選項(xiàng)卡,如圖17所示。本選項(xiàng)卡主要設(shè)置燒寫Flash時(shí)的相關(guān)參數(shù),這里主要設(shè)置兩個(gè)部分,一個(gè)是設(shè)置程序下載的一些配置,這兒選擇Erase Sectors表示下載程序的時(shí)候擦除對(duì)應(yīng)分區(qū),勾選后面三項(xiàng),分別表示下載程序,下載后校驗(yàn),程序下載后復(fù)位并運(yùn)行。接下來(lái)需要選擇所使用的Flash,點(diǎn)擊Add,添加所使用的芯片類型,筆者使用的是STM32F103ZET6,F(xiàn)lash大小是512k,因此選擇STM32F10X High-density Flash。至此完成使用J-Link完成程序調(diào)試的配置。

圖17 Flash燒寫參數(shù)設(shè)置

最后選擇程序下載按鈕所對(duì)應(yīng)的工具配置,配置同Debug界面如圖18所示,同樣選擇Cortex-M/R J-LINK/J-Trace這樣就可以在后面的使用中一鍵將程序下載到Flash中。至此已經(jīng)全部完成了程序調(diào)試和下載的必要設(shè)置。

圖18 設(shè)置程序下載菜單對(duì)應(yīng)的工具

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • STM32
    +關(guān)注

    關(guān)注

    2264

    文章

    10857

    瀏覽量

    354381
  • keil
    +關(guān)注

    關(guān)注

    68

    文章

    1210

    瀏覽量

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

    關(guān)注

    0

    文章

    16

    瀏覽量

    3532

原文標(biāo)題:使用KeilMDK以及標(biāo)準(zhǔn)外設(shè)庫(kù)創(chuàng)建STM32工程的詳細(xì)過(guò)程

文章出處:【微信號(hào):gh_c472c2199c88,微信公眾號(hào):嵌入式微處理器】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    STM32基于標(biāo)準(zhǔn)外設(shè)庫(kù)的外部中斷配置

    本文介紹了STM32基于標(biāo)準(zhǔn)外設(shè)庫(kù)的外部中斷配置,以及基于參考手冊(cè)如何更加寄存器配置外部中斷
    的頭像 發(fā)表于 11-02 14:13 ?1675次閱讀
    <b class='flag-5'>STM32</b>基于<b class='flag-5'>標(biāo)準(zhǔn)</b><b class='flag-5'>外設(shè)</b><b class='flag-5'>庫(kù)</b>的外部中斷配置

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

    1 STM32標(biāo)準(zhǔn)外設(shè)庫(kù)概述STM32標(biāo)準(zhǔn)外設(shè)
    發(fā)表于 08-05 06:59

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

    1 STM32標(biāo)準(zhǔn)外設(shè)庫(kù)概述STM32標(biāo)準(zhǔn)外設(shè)
    發(fā)表于 08-06 06:32

    STM32基于標(biāo)準(zhǔn)外設(shè)庫(kù)的外部中斷配置

    本文介紹了STM32基于標(biāo)準(zhǔn)外設(shè)庫(kù)的外部中斷配置,以及基于參考手冊(cè)如何更加寄存器配置外部中斷
    發(fā)表于 08-11 06:23

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

    1.1 基于標(biāo)準(zhǔn)外設(shè)庫(kù)的軟件開(kāi)發(fā)1.1.1 STM32標(biāo)準(zhǔn)外設(shè)
    發(fā)表于 08-23 06:19

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

    1.1 基于標(biāo)準(zhǔn)外設(shè)庫(kù)的軟件開(kāi)發(fā)1.1.1 STM32標(biāo)準(zhǔn)外設(shè)
    發(fā)表于 08-23 09:06

    創(chuàng)建基于HAL庫(kù)STM32工程項(xiàng)目

    工程創(chuàng)建和繁瑣的外設(shè)配置。但是對(duì)于初學(xué)者要懂得手動(dòng)創(chuàng)建一個(gè)完整的工程,有利于加深對(duì)工程目錄結(jié)構(gòu)和
    發(fā)表于 08-23 09:27

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

    標(biāo)題STM32F10X標(biāo)準(zhǔn)外設(shè)庫(kù)與文件功能說(shuō)明一、標(biāo)準(zhǔn)外設(shè)庫(kù)
    發(fā)表于 01-11 07:29

    如何下載和使用STM32標(biāo)準(zhǔn)外設(shè)庫(kù)而不是HAL庫(kù)?

    當(dāng)我在 STM32CubeIDE 中創(chuàng)建一個(gè)新項(xiàng)目時(shí),它會(huì)自動(dòng)下載所有 HAL 庫(kù)(例如:stm32f1xx_hal_rcc 或 stm32
    發(fā)表于 01-31 07:49

    如何使用Keil MDK及標(biāo)準(zhǔn)外設(shè)庫(kù)創(chuàng)建STM32工程

    如何使用Keil MDK及標(biāo)準(zhǔn)外設(shè)庫(kù)創(chuàng)建STM32工程使用Keil MDK 運(yùn)行第一個(gè)
    發(fā)表于 07-24 16:27 ?26次下載

    STM32標(biāo)準(zhǔn)外設(shè)庫(kù)的文件結(jié)構(gòu)解析

    STM32標(biāo)準(zhǔn)外設(shè)庫(kù)之前的版本也稱固件函數(shù)庫(kù)或簡(jiǎn)稱固件庫(kù),是一個(gè)固件函數(shù)包,它由程序、數(shù)據(jù)結(jié)構(gòu)和
    發(fā)表于 10-17 15:55 ?7569次閱讀
    <b class='flag-5'>STM32</b><b class='flag-5'>標(biāo)準(zhǔn)</b><b class='flag-5'>外設(shè)</b><b class='flag-5'>庫(kù)</b>的文件結(jié)構(gòu)解析

    STM32標(biāo)準(zhǔn)外設(shè)庫(kù)SPL轉(zhuǎn)換成 Cube LL

    STM32標(biāo)準(zhǔn)外設(shè)庫(kù)SPL轉(zhuǎn)換成Cube LL
    的頭像 發(fā)表于 03-08 12:08 ?3920次閱讀

    STM32四種庫(kù)對(duì)比:寄存器、標(biāo)準(zhǔn)外設(shè)庫(kù)、HAL、LL

    1.我是選擇寄存器開(kāi)發(fā)STM32,還是標(biāo)準(zhǔn)外設(shè)庫(kù)呢? 2.你有STM32L0標(biāo)準(zhǔn)
    發(fā)表于 03-05 06:17 ?50次下載
    <b class='flag-5'>STM32</b>四種<b class='flag-5'>庫(kù)</b>對(duì)比:寄存器、<b class='flag-5'>標(biāo)準(zhǔn)</b><b class='flag-5'>外設(shè)</b><b class='flag-5'>庫(kù)</b>、HAL、LL

    基于STM32標(biāo)準(zhǔn)庫(kù)建立Keil-MDK工程模板(STM32F407ZG)

    一、前言最近由于項(xiàng)目需要使用標(biāo)準(zhǔn)庫(kù)標(biāo)準(zhǔn)庫(kù)是很剛?cè)腴Tstm32那會(huì)學(xué)習(xí)的東西,忘得一干二凈,所以編寫一篇文章來(lái)記錄一下建立
    發(fā)表于 12-02 15:51 ?22次下載
    基于<b class='flag-5'>STM32</b><b class='flag-5'>標(biāo)準(zhǔn)</b><b class='flag-5'>庫(kù)</b>建立Keil-MDK<b class='flag-5'>工程</b>模板(<b class='flag-5'>STM32</b>F407ZG)

    STM32F10x標(biāo)準(zhǔn)外設(shè)庫(kù)參考手冊(cè)

    STM32F10x標(biāo)準(zhǔn)外設(shè)庫(kù)參考手冊(cè)
    發(fā)表于 06-24 09:26 ?11次下載