天天看點

stm32開發之使用Keil MDK以及标準外設庫建立STM32工程

通過上一節對标準外設庫的介紹,想必各位讀者對标準外設庫已經有了基本的認識,然而由于标準外設庫中檔案衆多,很多初學者在開始很長一段時間内甚至都無法完全自己建立一個工程,很多人隻是依賴标準外設庫或給定的工程模闆。本節就介紹怎樣利用keil mdk開發環境和标準外設庫來搭建自己的工程。

建立一個基于标準外設庫其實并不複雜,網絡上也有很多關于怎樣在keil mdk下建立工程的教程,方法也各異,本節所介紹的方法本着少改動、便于使用、友善更換器件等原則,給大家介紹怎樣在keil中建立一個工程,并以一個最簡單的例子來說明怎樣下載下傳和調試程式。

本節所使用keil mdk 為目前的最新版v4.21,具體版本資訊如圖 5‑6所示。其他版本差别不大,讀者可以根據自己使用的版本進行操作或者從keil的官網下載下傳新版本。使用的标準外設庫為目前最新的v3.5版本。使用的開發調試工具為jlink-v8,使用的驅動版本為v4.08l。

stm32開發之使用Keil MDK以及标準外設庫建立STM32工程

首先先建立一個用于存放工程的檔案夾,此處命名為stm32,在檔案夾下分别建立src、lis、obj,doc四個檔案夾,分别用于存放源代碼、編譯過程中産生的臨時檔案和輸出檔案及文檔,而src底下建立user用于存放使用者程式。

接下來拷貝标準外設庫和相應的檔案到工程目錄中,首先拷貝stm32f10x_stdperiph_lib_v3.5.0\libraries檔案夾下的兩個檔案夾cmsis和stm32f10x_stdperiph_driver到剛剛建立的stm32\src目錄下,接下來拷貝使用者編寫程式的程式檔案,此檔案可以從标準外設庫自帶的例程中拷貝,這裡從stm32f10x_stdperiph_lib_v3.5.0\project\stm32f10x_stdperiph_examples\adc\3adcs_dma目錄下拷貝main.c、stm32f10x_conf.h、stm32f10x_it.c、stm32f10x_it.h四個檔案,這四個檔案是在程式設計的時候使用者往往需要根據實際需求進行修改的。是以拷貝至stm32\user目錄下,system_stm32f10x.c檔案定義了系統時鐘等參數并完成微控制器的初始化,标準外設庫中已經有了,這裡可以不拷貝。這樣所需要的檔案都已經具備了,如圖 5‑7所示。

<a target="_blank" href="http://images.cnblogs.com/cnblogs_com/emouse/201203/201203011046327829.jpg"></a>

首先啟動keil uvision4,點選菜單欄project-new uvision project,選擇工程的儲存位置,儲存位置選擇在之前建立的mdk檔案夾下,如圖 5‑8所示。

stm32開發之使用Keil MDK以及标準外設庫建立STM32工程

在彈出的界面中選擇所使用的晶片信号,筆者使用的晶片型号為stm32f103zet6,是以選擇stm32f103ze,如圖 5‑9所示。

stm32開發之使用Keil MDK以及标準外設庫建立STM32工程

晶片選擇完成後軟體會彈出一條提示,提示是否要拷貝stm32大容量啟動代碼并添加到工程,由于我們使用新版本标準外設庫中提供的啟動代碼,是以此處選擇否。如圖 5‑10所示。

stm32開發之使用Keil MDK以及标準外設庫建立STM32工程

接下來就出現了一個空的工程視窗,建立了一個新的工程。

在左側project一欄中對target 1兩次點選之後可以重命名,這裡命名為stm32,然後右擊,如所示,單擊manage comoonents。出現如所圖 5‑11示界面。

stm32開發之使用Keil MDK以及标準外設庫建立STM32工程
stm32開發之使用Keil MDK以及标準外設庫建立STM32工程
stm32開發之使用Keil MDK以及标準外設庫建立STM32工程

檔案添加完成後的工程管理視窗如圖 5‑13所示。其中cmsis和lib組中的檔案圖示上由個鑰匙圖案,表示該檔案目前為隻讀屬性,工程編譯完成後前面會出現一個加号,點選展開可以顯示目前檔案所調用的檔案。

stm32開發之使用Keil MDK以及标準外設庫建立STM32工程

接下來需要對工程進行一些參數設定,在中stm32上右擊,選擇第一項options for target ‘stm32’,如圖 5‑14所示。

stm32開發之使用Keil MDK以及标準外設庫建立STM32工程

彈出視窗如圖 5‑15所示。在這個視窗中共有10個頁籤,第一個頁籤device用于選擇使用的器件,由于在建立工程的時候已經選擇這裡可以不用在選擇,目前的工程如果在後期要更換使用的晶片時可以在這個頁籤中更換晶片,同時還要注意更換對應的啟動檔案。在target頁籤中,一般隻需要填上使用的晶振頻率即可,其他都可以保持預設。

stm32開發之使用Keil MDK以及标準外設庫建立STM32工程

在如圖 5‑16所示output頁籤中主要注意兩項,一是選擇輸出檔案夾,選擇之前工程目錄中mdk檔案夾下的obj檔案夾,在下面還有一個create hex file選項,用于選擇是否生成hex檔案,如果編譯好的程式要寫片,或者要提供給别人下載下傳到晶片中而不希望别人知道源碼時可以提供hex檔案。

stm32開發之使用Keil MDK以及标準外設庫建立STM32工程

在listing頁籤下同樣可以選擇listing對應的檔案夾,這裡選擇stm32\mdk\list檔案夾,下方的複選框可以選擇需要生成的調試資訊,這裡保持預設即可,如圖 5‑17所示。

stm32開發之使用Keil MDK以及标準外設庫建立STM32工程

c/c++頁籤中的設定比較重要,如圖 5‑18所示,頁籤中主要有兩個地方需要注意,首先是整個工程的宏定義,在前面标準外設庫部分已經有過介紹,标準外設庫中很多功能都是通過宏定義來實作的,由于标準外設庫針對stm32一系列晶片,是以需要通過宏定義來進行針對性的選擇。這種選擇有兩種方式,第一種是直接改動宏定義部分的庫檔案,缺點是需要更改一些功能時不是很友善,而且筆者建議在盡量不更改庫檔案的方式下實作功能的配置和使用,另一種方式就是在工程的設定中添加宏定義,這兒添加了兩個宏定義,use_stdperiph_driver表示使用标準外設庫進行程式開發, stm32f10x_hd表示使用的是stm32f10x系列大容量器件,本例中中使用的是stm32f103zet6故填寫此項。

需要說明的是在程式開發過程中不光庫檔案可以通過宏定義的方式進行程式功能配置,使用者程式也可以仿照庫檔案的這種形式,通過相關的宏定義進行一些參數配置。stm32的标準外設庫在程式組織性、層次性、規範性等方面都值得我們去學習的。在“target”的頁籤中進行的宏定義是這對目前“target”有效的,在每一個“group”同樣可以設定作用于group的宏定義。

language/code generation 一欄中主要是針對程式語言所所的一些優化和配置,預設情況下保持預設即可。

stm32開發之使用Keil MDK以及标準外設庫建立STM32工程
stm32開發之使用Keil MDK以及标準外設庫建立STM32工程

..\user

..\lib\stm32f10x_stdperiph_driver\inc

..\lib\cmsis\cm3\coresupport

..\lib\cmsis\cm3\devicesupport\st\stm32f10x

stm32開發之使用Keil MDK以及标準外設庫建立STM32工程

如果有使用者自己編寫的頭檔案也要相應的加上引用路徑。仔細觀察可以發現在标注外設庫中頭檔案的引用為:#include "stm32f10x.h",在c語言的學習中我們知道雙引号表示編譯器從使用者目錄開始搜尋,如果未找到才回去系統目錄去查找,mdk的安裝目錄中同樣存在對應的庫檔案,路徑為keil\arm\inc\st\stm32f10x,但是由于不同的版本所内含的庫檔案不同,如目前最新的v4.21版本中則内置了v3.4版本的庫檔案,而之前的版本中很多内置了v2.0版本的庫檔案,是以為了保持工程所使用的庫檔案和引用的頭檔案的一緻性,同時也友善工程檔案拷貝到其他電腦上運作,建議大家都按照本書介紹的方式都從自己的目錄中引用頭檔案。

頭檔案引用路徑添加完成後,就可以進行相關的編譯工作了,在進行這一步工作之前,我們還要完成有關程式調試和下載下傳的相關設定,有關調試的設定在debug頁籤中,之前的asm和linker頁籤保持預設。debug頁籤如圖 5‑20所示。在此頁籤中主要完成程式調試的相關設定,頁籤主要分為兩個部分,左側是使用模拟器進行仿真與調試的方式,點選後軟體會進入模拟器調試。右側是使用仿真器連接配接硬體開發平台進行調試,首先從右側選擇所使用的仿真器,這裡使用的是j-link仿真器,故在下拉框中選擇cortex-m/r j-link/j-trace,在兩側的下方可以通過勾選對應的複選框來選擇是否需要在調試開始時下載下傳程式和運作到主程式,其他部分的設定保持預設即可。

stm32開發之使用Keil MDK以及标準外設庫建立STM32工程
stm32開發之使用Keil MDK以及标準外設庫建立STM32工程
stm32開發之使用Keil MDK以及标準外設庫建立STM32工程

本章之前已經做過介紹,stm32f10x核心內建了串行/jtag調試接口swj-dp(serial wire and jtag)。這是标準的arm coresight調試接口,包括jtag-dp接口(使用5個引腳)和sw-dp(使用兩個引腳)。引腳配置設定如表 5‑9所示。兩種方式都可以進行程式的調試和下載下傳,但是sw方式更節省端口,隻需要兩根線就可以,多餘的i/o可以釋放用作普通用途,sw方式和jtag方式在普通程式調試下載下傳與調試過程中并無明顯差别,如果想使用sw的方式調試程式隻需要在port的下拉清單中選擇sw即可,如圖 5‑22所示。選擇完成後如果硬體連接配接正确同樣能夠讀取晶片的資訊。

swj-dp端口

引腳名稱

jtag 調試接口

sw 調試接口

引腳配置設定

類型

描述

調試功能

jtms/swdio

輸入

jtag模式選擇

輸入/輸出

串行資料輸入/輸出

pa13

jtck/swclk

jtag時鐘

串行時鐘

pa14

jtdi

jtag資料輸入

——

pa15

jtdo/traceswo

輸出

jtag資料輸出

跟蹤時為traceswo信号

pb3

jntrst

jtag子產品複位

pb4

stm32開發之使用Keil MDK以及标準外設庫建立STM32工程

設定好了debug頁籤中有關選項後還需要設定flash download頁籤,如圖 5‑23所示。本頁籤主要設定燒寫flash時的相關參數,這裡主要設定兩個部分,一個是設定程式下載下傳的一些配置,這兒選擇erase sectors表示下載下傳程式的時候擦除對應分區,勾選後面三項,分别表示下載下傳程式,下載下傳後校驗,程式下載下傳後複位并運作。家下來需要選擇所使用的flash,點選add,添加所使用的晶片類型,筆者使用的是stm32f103zet6,flash大小是512k,是以選擇stm32f10x high-density flash。至此完成使用j-link完成程式調試的配置。

stm32開發之使用Keil MDK以及标準外設庫建立STM32工程

最後選擇程式下載下傳按鈕所對應的工具配置,配置同debug界面如圖 5‑24所示,同樣選擇cortex-m/r j-link/j-trace這樣就可以在後面的使用中一鍵将程式下載下傳到flash中。至此已經全部完成了程式調試和下載下傳的必要設定。

stm32開發之使用Keil MDK以及标準外設庫建立STM32工程

繼續閱讀