官术网_书友最值得收藏!

3.2 Keil MDK的安裝與使用

3.2.1 如何安裝Keil MDK

1. 獲取Keil MDK安裝包

Keil MDK的安裝包可以到KEIL官網上下載,官網中的Keil MDK下載界面如圖3.1所示。單擊“MDK-Arm”,進入個人信息填寫界面,完善個人信息之后即可下載安裝包。這里下載的Keil MDK版本是MDK-ARM V5.26,如果有更新的版本,開發者也可以使用更新的版本。

圖3.1 官網中的Keil MDK下載界面

2. 具體安裝步驟

(1)下載好安裝包后,雙擊打開,即可安裝Keil MDK。Keil MDK初始安裝界面如圖3.2所示。在彈出的初始安裝對話框中單擊“Next”按鈕,進入軟件使用條款界面。

圖3.2 Keil MDK初始安裝界面

(2)在軟件使用條款界面勾選“I agree to all the terms of the preceding License Agreement”復選框(見圖3.3),再次單擊“Next”按鈕,進入安裝路徑選擇界面。

圖3.3 軟件使用條款界面

(3)在安裝路徑選擇界面選擇合適的安裝路徑,并單擊“Next”按鈕,如圖3.4所示。

圖3.4 安裝路徑選擇界面

注意

路徑名一定不能帶有中文,并且安裝目錄不能與51單片機的Keil或Keil4沖突,三者的目錄必須分開。

(4)填寫用戶信息界面(見圖3.5)。個人用戶根據自己的情況填寫即可,填完之后單擊“Next”按鈕即正式開始軟件的安裝。

圖3.5 填寫用戶信息界面

(5)當進度條滾到最右端時,彈出安裝完成界面(見圖3.6),單擊“Finish”按鈕即可完成安裝。

圖3.6 安裝完成界面

3. 安裝STM32芯片包

Keil MDK5不像Keil MDK4那樣自帶了很多廠商的MCU芯片包,而是需要自己安裝相應芯片的支持包。單擊“Finish”按鈕,關掉KEIL5安裝完成界面后即彈出MCU芯片包的安裝界面,如圖3.7所示。Keil MDK會自動下載各種廠商的MCU芯片包,如果此時計算機沒有連接網絡或網速較慢,則會出現報錯,不過這是沒有影響的,可以直接關掉它,手動下載所需要的MCU芯片包再進行安裝。這里建議開發者選擇手動安裝所需要的MCU芯片包。STM32系列的芯片包可以在KEIL官網上下載。

圖3.7 MCU芯片包的安裝界面

STM32系列的芯片包下載界面如圖3.8所示。在官網中找到STM32系列的芯片包,選擇相應的系列下載到本地計算機中,具體下載哪個系列需要參照所使用單片機,用什么就下載什么,沒必要安裝全部的芯片包。下載完成后,雙擊打開,進行安裝即可。

圖3.8 STM32系列的芯片包下載界面

MCU芯片包的安裝路徑必須與Keil MDK的安裝路徑一致。安裝完成之后,在Keil MDK的Pack Installer中就可以看到所安裝的MCU芯片包了。在開始開發嵌入式系統時,選擇對應的單片機型號即可。

說明

本書內容所涉及的Keil MDK軟件僅供教學使用,Keil MDK軟件作為一款商業開發工具并不是免費的,前面安裝的Keil MDK軟件默認為試用版,只能編譯不超過32KB的代碼。如果要編譯的程序代碼超過32KB或想要用作商業用途,則必須購買正版軟件,以獲得使用權。

3.2.2 創建庫函數工程模板

現在有了開發工具,基于第2章對STM32標準函數庫的學習,就可以利用所安裝的Keil MDK軟件建立STM32嵌入式系統的工程了。利用STM32標準函數庫新建工程的步驟比較煩瑣,通常的做法是,先使用STM32標準函數庫建立一個空的工程作為通用工程模板,當設計和開發實際的STM32嵌入式系統時,直接復制這個通用工程模板即可。在通用工程模板的基礎上進行修改和開發,可提高系統開發的效率。

1. 建立工程框架

為了使工程目錄更加清晰,先在本地計算機上新建一個“通用工程模板”文件夾,再在該文件夾中新建三個文件夾,分別命名為Project、Libraries和Guide。其中Project文件夾用于存放工程文件;Libraries文件夾用于存放STM32庫文件;Guide文件夾用于存放程序說明TXT文件,這個說明文件需要由開發者自行編寫。在Libraries文件夾中新建兩個文件夾,命名為CMSIS和STM32F10x_Driver,分別用于存放內核與外設的庫文件。

創建完所需要的文件夾之后,打開Keil MDK軟件,單擊菜單:Project\New μVision Project…,把目錄定位到剛才建立的“通用工程模板\Project”文件夾之下,先將工程命名為“Template”,之后單擊“保存”按鈕。“Template”僅作為所創建的通用工程模板的名稱,在以后設計和開發實際的嵌入式系統時,為了方便區分,可以將“Template”改為相應工程應用的英文名稱。

單擊“保存”按鈕之后,會彈出一個芯片型號選擇界面(見圖3.9),需要選擇對應的芯片型號。本書主要以STM32F103ZET6單片機為例講解STM32嵌入式系統的設計與實踐,因此,選擇STMicroelectronics\STM32F1 Series\STM32F103\STM32F103ZE。如果使用的是其他系列的芯片,只需要選擇相應的型號就可以了。

圖3.9 芯片型號選擇界面

注意

在Keil MDK5軟件中,只有安裝了對應的芯片包才會顯示相應的芯片型號,因此,在使用KeilMDK5軟件設計嵌入式系統時,一定要先安裝好與自己硬件相對應的芯片包,否則將無法選擇正確的芯片型號。

單擊“OK”按鈕之后,Keil MDK5軟件會彈出一個“Manage Run-Time Environment”對話框,這是Keil MDK5軟件新增的一個功能。在這個對話框中,可以添加需要的組件,從而方便構建開發環境。這里不做過多介紹,直接單擊“Cancel”按鈕,進入工程初步建立的界面。到這里,只是建立了一個框架,還需要進一步添加對應的啟動代碼和文件等。

現在看一下之前建立的Project文件夾,就會發現多了兩個文件夾和兩個文件,分別為Template.uvoptx文件和Template.uvprojx文件、Listings文件夾和Objects文件夾。Template.uvprojx文件是工程文件,非常關鍵,不可以刪除;而Listings文件夾和Objects文件夾是Keil MDK5軟件自動生成的文件夾,分別用于存放在編譯過程中產生的中間文件。按照表3.1所示的通用工程模板文件清單,將第2章介紹的STM32標準函數庫中的相應文件復制到剛才建立的“通用工程模板”對應的文件夾目錄下,主要文件位置可以參照第2章中的圖2.4。

表3.1 通用工程模板文件清單

2. 添加文件

將STM32標準函數庫中的文件復制到對應的文件夾后,初始的工程框架就基本完成了,接下來需要通過Keil MDK5將這些文件加入工程中。右擊“Target1”,選擇“Manage Project Items”選項(見圖3.10)進入項目分組管理界面(見圖3.11)。

圖3.10 選擇“Manage Project Items”選項

圖3.11 項目分組管理界面

(1)在“Project Targets”一欄中,將“Target1”先修改為“Template”。同樣,在設計和開發實際的嵌入式系統時,可以將“Template”改為相應的工程應用的英文名稱。

(2)在“Groups”一欄中單擊按鈕,刪除Source Group1,然后單擊按鈕新建四個Groups,分別命名為Project、CMSIS、STM32F10x_Driver和Guide。

(3)在Project、CMSIS、STM32F10x_Driver和Guide四個Groups中添加程序設計所需要的文件。

① 選中“Groups”一欄中的Project,然后單擊右下角的“Add Files”按鈕,定位到前面建立的“通用工程模板”目錄下的Project文件夾中,選中其中的main.c、stm32f10x_it.c和system_stm32f10x.c文件,單擊“Add”按鈕添加到Project組所對應的Files欄中,之后單擊“Close”按鈕,完成Project組中所需要文件的添加。

② 選中“Groups”一欄中的CMSIS,然后單擊右下角的“Add Files”按鈕,定位到前面建立的“通用工程模板”目錄下的CMSIS文件夾中,選中其中的core_cm3.c和startup_stm32f10x_hd.s文件,單擊“Add”按鈕添加到CMSIS組所對應的Files欄中,之后單擊“Close”按鈕。

注意

在默認添加時,文件類型為.c。在添加startup_stm32f10x_hd.s啟動文件時,需要將文件類型改為“All files”,才能看到這個啟動文件。

③ 用同樣的方法為STM32F10x_Driver組添加“通用工程模板”目錄下的STM32F10x_Driver\src文件夾中的所有驅動源文件。

說明

在實際的STM32嵌入式系統設計過程中,如果只用到了其中的某個外設,可以不添加沒有用到的外設的庫文件。例如,只用GPIO,可以只添加stm32f10x_gpio.c,而其他文件可以不用添加。全部添加進來是為了方便在后面的程序設計中使用,不用每次都添加。當然這樣的壞處是工程太大,編譯起來速度會較慢。在工程建立過程中,用戶可以自行選擇。

④ 采用同樣的方法將“通用工程模板”目錄下Guide文件夾中由開發者自己編寫的Guide.txt文件添加到Guide中。

經過前面的操作,STM32嵌入式系統設計所需要的文件就添加到工程中了,單擊“OK”按鈕,回到工程主界面,如圖3.12所示。現在就可以在主界面的Project中看到之前所添加的文件了。

圖3.12 工程主界面

3. 配置魔術棒選項卡

在工程中添加完程序設計所需的文件之后,并不能直接編譯,因為此時的工程還找不到它所對應的程序頭文件,需要告訴Keil MDK軟件在哪些路徑下能夠搜索到工程所需要的頭文件,即頭文件目錄。任何一個工程都需要把其引用的所有頭文件路徑包含進來,這部分工作是在魔術棒選項卡的配置界面中進行的。

在工程主界面中,單擊按鈕,進入魔術棒選項卡的配置界面,如圖3.13所示。魔術棒選項卡的配置十分重要,它不僅限于為工程添加頭文件路徑,許多用戶的串口用不了printf函數、編譯有問題或下載有問題等,都是因為魔術棒選項卡的配置出了問題。魔術棒選項卡在編譯、調試和下載等方面的配置方法會在后面的應用中詳細講解,現在先介紹如何通過魔術棒選項卡來為常見的工程添加需要的頭文件目錄和程序設計過程中常用的一些必要的配置方法。

圖3.13 魔術棒選項卡的配置界面

(1)在魔術棒選項卡配置界面中的Target選項卡中,先將芯片和外部晶振設置為8.0MHz(STM32標準函數庫默認采用的是8.0MHz的晶振,也可以根據實際應用要求對芯片和外部晶振進行修改),再勾選“Use MicroLIB”復選框,這樣在設計串口驅動程序時,就可以使用printf函數了。

(2)Output選項卡界面如圖3.14所示。在Output選項卡中,把輸出文件夾定位到“通用工程模板”目錄下的Project\Objects文件夾中,事實上這個文件夾是Keil MDK軟件的默認選項,用于存放在編譯過程中產生的調試信息、預覽信息和封裝庫等文件。如果想要更改輸出文件夾,則可以通過該方法把輸出文件夾定位到其他文件夾中。如果想在編譯過程中生成.hex文件(.hex文件為程序設計完成后下載到單片機上進行硬件調試的文件),則需要勾選“Create HEX File”復選框。

圖3.14 Output選項卡界面

(3)在Listing選項卡中,把輸出文件夾定位到“通用工程模板”目錄下的Project\Listings文件夾中,事實上這個文件夾也是Keil MDK的默認選項,用于存放在編譯過程中產生的C/匯編/鏈接的列表清單等文件。若要更改輸出文件夾,則可以用該方法選擇其他文件夾。

(4)在C/C++選項卡中,添加編譯器編譯時需要查找的頭文件目錄和處理宏,具體步驟如下。

① 添加頭文件路徑。C/C++選項卡添加頭文件界面如圖3.15所示。單擊“Setup Compiler Include Paths”一欄最右邊的按鈕,會彈出一個添加路徑的對話框,單擊按鈕,將通用工程模板中包含頭文件的三個目錄添加進去。在以后的嵌入式系統設計中,也需要用同樣的方法將編寫的頭文件目錄添加進來。

圖3.15 C/C++選項卡添加頭文件界面

注意

Keil MDK只會在一級目錄中查找頭文件,因此頭文件路徑一定要定位到最后一級子目錄,然后單擊“OK”按鈕即可。如果頭文件路徑添加有誤,則編譯時會報錯“找不到頭文件”。

② 添加宏。3.50版本的STM32標準函數庫在配置和選擇外設時是通過宏定義來選擇的,所以需要配置一個全局的宏定義變量。繼續定位到C/C++選項卡,填寫“STM32F10X_HD, USE_STDPERIPH_DRIVER”到“Define”輸入框中(見圖3.16)。切記,兩個標識符中間是逗號不是句號。STM32F10X_HD宏的作用是告訴STM32標準函數庫,所使用的STM32芯片類型是大容量的,使STM32標準函數庫能夠根據選定的芯片型號進行配置。如果選用的STM32芯片類型是中容量的,那么需要將STM32F10X_HD修改為STM32F10X_MD;如果選用的STM32芯片類型是小容量的,則需要將STM32F10x_HD修改為STM32F10X_LD。USE_STDPERIPH_DRIVER宏的作用是讓stm32f10x.h包含stm32fl0x_conf.h頭文件。填寫完畢后,單擊“OK”按鈕,退出魔術棒選項卡配置界面。

圖3.16 C/C++選項卡添加宏

到這里,庫函數通用工程模板基本上就創建完成了。在編譯之前,還需要編寫一段主程序。打開工程Project中的main.c文件,并將其中的代碼復制到main.c中覆蓋原有代碼,這是一段實現單片機GPIOA端口的PA2和PA3引腳反復交替置位、復位的簡單程序,代碼細節將在后面的實例設計中進行講解。

注意

覆蓋原有代碼后,代碼最后一行的后面必須加上一個回車符,否則在編譯過程中會有警告。

現在就可以單擊按鈕進行工程編譯了,工程編譯結果如圖3.17所示。從圖3.17中可以看出,程序代碼編譯零錯誤零警告。

圖3.17 工程編譯結果

3.2.3 Keil MDK軟件仿真

上一節介紹了如何利用STM32標準函數庫在Keil MDK軟件下創建STM32嵌入式系統工程模板,并講解了如何進行編譯,以驗證程序代碼的正確性。本節將進一步介紹如何利用Keil MDK軟件對程序代碼進行軟件仿真。

Keil MDK的一個強大功能是能夠對整個目標硬件進行仿真。在Keil MDK軟件仿真中,可以查看很多與硬件相關的寄存器,觀察這些寄存器,能夠知道編寫的代碼是不是真正有效。通過軟件仿真,可以在程序下載到STM32芯片之前發現很多可能出現的問題,這樣最大的好處是能很方便地檢查程序存在的缺陷,避免頻繁下載程序來查找錯誤,從而延長了STM32的FLASH使用壽命(STM32的FLASH使用壽命≥1萬次)。當然,軟件仿真也不是萬能的,有很多問題必須通過在線調試才可以發現。

先打開所創建的通用工程模板中的main.c文件,然后打開魔術棒選項卡,確認前面的設置沒有發生變動之后,再單擊Debug選項卡。Debug選項卡仿真調試設置如圖3.18所示。選擇“Use Simulator”單選按鈕,使用軟件仿真;勾選“Run to main()”復選框,跳過匯編代碼,直接跳轉到main函數開始仿真;設置下方的Dialog DLL,分別為DARMSTM.DLL和TARMSTM.DLL,Parameter設置為-pSTM32F103ZE,用于設置支持STM32F103ZE的軟硬件仿真,這樣就可以通過“Peripherals”選項選擇對應外設的對話框來觀察軟硬件仿真結果。單擊“OK”按鈕完成設置。

圖3.18 Debug選項卡仿真調試設置

接下來,返回工程主界面,單擊“開始/停止仿真”按鈕,開始仿真。

注意

如果在仿真之前沒有編譯過工程,需要先編譯一遍,否則單擊“開始/停止仿真”按鈕后會顯示缺少Template.axf文件。

Keil MDK軟件仿真界面如圖3.19所示,由圖可以發現,仿真界面比工程主界面多了一個工具欄,這就是Keil MDK軟件的Debug工具欄,這個工具欄在仿真時是非常重要的。

圖3.19 Keil MDK軟件仿真界面

下面簡要介紹一下Debug工具欄相關按鈕的功能。Debug工具欄及其按鈕功能如圖3.20所示。

圖3.20 Debug工具欄及其按鈕功能

(1)復位。該按鈕的功能等同于STM32硬件上的復位按鈕,單擊一次該按鈕相當于實現了一次硬復位,按下該按鈕后,代碼會重新從頭開始執行。

(2)執行到斷點處。該按鈕用來快速執行到所設置的斷點處。有時候并不需要查看每一步是如何執行的,而是快速執行到程序的某個地方來查看結果,這時就可以在這個地方設置一個斷點,單擊該按鈕就可以快速將程序執行到這個地方。

(3)停止運行。該按鈕在程序執行的時候會變為有效(成為紅色),單擊該按鈕可以使程序停止,進入單步調試狀態。

(4)執行進去。該按鈕用來實現執行到某個函數中去的功能。在沒有函數的情況下,該按鈕等同于“執行過去”按鈕。

(5)執行過去。在有函數的地方,單擊該按鈕就可以單步執行這個函數,而不會進入這個函數里執行。

(6)執行出去。當進入某個函數中進行單步調試時,如果已經得到了想要的結果或不需要再繼續執行該函數的剩余部分,就可以單擊該按鈕,一步執行完函數余下的部分,并跳出函數回到函數被調用的位置。

(7)執行到光標處。該按鈕可以使程序迅速地運行到光標位置,這和執行到斷點處的按鈕功能類似。但是二者也有區別,斷點可以有多個,但是光標所處的位置只有一個。

(8)匯編窗口。單擊該按鈕可以查看匯編代碼,這在分析程序時很有用。

(9)觀察窗口。單擊該按鈕會彈出一個顯示變量的窗口,在該窗口中可以查看各種變量值。

(10)內存查看窗口。單擊該按鈕會彈出一個內存查看窗口,輸入要查看的內存地址,觀察內存的變化情況。

(11)串口打印窗口。單擊該按鈕會彈出一個類似串口調試助手界面的窗口,該窗口顯示從串口中打印出的內容。

(12)邏輯分析窗口:單擊該按鈕會彈出一個邏輯分析窗口,單擊“SETUP”按鈕新建一些I/O端口,這些I/O端口的電平變化情況能夠以多種形式顯示出來,比較直觀。

Debug工具欄上的其他按鈕較少使用,這里不再詳述。以上介紹的按鈕也不是每次都能用到,根據程序調試時需要查看的內容決定具體使用哪些按鈕。

下面講解具體的仿真過程。首先,把光標放到main.c的第15行最左邊的灰色區域上,單擊鼠標左鍵,可以看到在第15行的左邊出現了一個紅點,這表示在這個位置設置了一個斷點(也可以通過單擊鼠標右鍵彈出的菜單來設置斷點),再次單擊鼠標左鍵則取消斷點。其次,單擊“執行到斷點處”按鈕,將程序執行到該斷點處(見圖3.21),可以看到程序在仿真過程中,執行到所設置的斷點處即停止。

圖3.21 程序執行到斷點處

這里先不著急往下執行,單擊菜單欄的“Peripherals”選項,在該選項下可以查看很多STM32外設的動態執行情況,通過選擇對應的選項即可查看相應外設的運行動態,如通過單擊“General Purpose I/O\GPIOA”查看GPIOA端口的動態執行情況。單擊“General Purpose I/O\GPIOA”之后會在調試仿真界面之外彈出一個專門查看GPIOA端口運行情況的界面,如圖3.22所示。從圖3.22可以看出,所有與GPIOA端口相關的寄存器全部都顯示出來了,還顯示了GPIOA端口中每個引腳的輸入/輸出狀態。GPIO端口輸入/輸出狀態的相關內容將在第5章進行詳細講解。

圖3.22 GPIOA端口情況查看界面

繼續單擊“執行過去”按鈕,分別執行完PA2引腳置位程序和PA3引腳置位程序后,得到了如圖3.23所示的GPIOA端口設置動態情況。通過圖3.23與圖3.22的對比,尤其是相應寄存器位變化的對比,能夠知道端口置位程序究竟執行了哪些操作。通過查看GPIOA端口的各個寄存器的設置狀態,可以判斷所寫的代碼是否存在問題。只有寄存器的設置正確了,才有可能在硬件上正確地執行。這種方法也適用于其他外設設置的動態情況查看,這里不再詳述。

圖3.23 GPIOA端口設置動態情況

繼續單擊按鈕,一步步執行,就會在while循環中看到,PA2引腳和PA3引腳反復交替置位、復位的設置情況,這說明編寫的程序代碼可以達到預期的目的。

此外,還可以通過單擊邏輯分析窗口中的“SETUP”按鈕新建PA2引腳和PA3引腳,以直觀地查看循環過程中兩個端口引腳的電平變化情況。單擊按鈕彈出邏輯分析窗口之后,再單擊窗口中的“SETUP”按鈕,進入邏輯分析設置界面,如圖3.24所示。通過單擊按鈕新建兩個端口,分別命名為PORTA.2和PORTA.3。命名后,系統會自動將其名字更改為(PORTA&0x00000004)>>2和(PORTA&0x00000008)>>3形式,同時設置界面下方的參數也會隨之改變,兩個端口的“Display Type”選項均改為Bit。單擊“Close”按鈕,設置完畢。

圖3.24 邏輯分析設置界面

回到調試仿真界面,把之前設置的斷點都去掉,并單擊“復位”按鈕,回到程序的起始仿真位置。單擊“執行到斷點處”按鈕,進行仿真調試。由于沒有設置任何斷點,所以在這次調試中,程序會一直執行下去,這時候從邏輯分析窗口中會輸出循環過程中PA2和PA3兩個引腳的電平變化情況,如圖3.25所示。通過調節窗口中Zoom的In(放大)或Out(縮小)可以調整窗口中視圖范圍的大小,由此獲得合適的顯示圖像。PA2和PA3兩個引腳的電平波形變化情況也驗證了所編寫的程序代碼能夠獲得預期的結果。

圖3.25 邏輯分析窗口顯示I/O端口電平

Keil MDK軟件仿真類型還有很多,如快速指令集仿真、外部信號和I/O端口仿真、中斷過程仿真和串口通信仿真等,幾乎可以覆蓋整個目標硬件的調試過程,其主要的設置過程與所講解的實踐例程類似,這里不再詳述,讀者可以根據自己的應用實例參照例程進行仿真調試。在Keil MDK軟件仿真調試中驗證了代碼的正確性之后,就可以將程序代碼下載到硬件上進行實際的應用檢驗了。

主站蜘蛛池模板: 金湖县| 凤庆县| 邵东县| 连南| 大同县| 西盟| 蕉岭县| 五莲县| 晋江市| 苏尼特右旗| 平和县| 静宁县| 云梦县| 葫芦岛市| 和政县| 德庆县| 定襄县| 望城县| 大洼县| 安乡县| 志丹县| 永平县| 怀化市| 沙田区| 天等县| 鹤壁市| 莲花县| 曲阜市| 呼图壁县| 公安县| 八宿县| 会泽县| 东兰县| 仙游县| 镇安县| 珠海市| 通州区| 莒南县| 江山市| 清丰县| 游戏|