1、新建空白工程
新建一個文件夾,用來存放新建的工程文件。在這個新建的文件夾下創建MDK-PRO和OUTPUT兩個子文件夾。MDK-PRO文件夾用來存放工程文件;OUTPUT用來存放工程編譯器后輸出的文件。
打開MDK軟件,點擊“Project ->New uVision Project”創建新工程。
輸入工程的名稱並選擇存放新建工程的目錄。
選擇芯片型號。
點擊OK后就創建了一個空工程。如圖
用鼠標右擊MDK工程欄中的Group,選擇‘Manage Project Items’。然后添加如下圖所示的Group。
接下來先將工程的編譯輸出文件設置到OUTPUT文件夾中。在MDK軟件中,選擇“Options for Target”,在彈出來的界面中選擇Output選項卡,點擊“Select Folder for Listings…”,在彈出來的界面中選擇OUTPUT文件夾。
然后再選擇Listing選項卡,點擊“Select Folder for Listings…”,也在彈出來的界面中選擇OUTPUT文件夾。
2、添加啟動文件
一般STM32的工程都需要加載啟動代碼,啟動代碼是一段和硬件相關的匯編代碼。
啟動代碼的主要作用如下:
堆棧(SP)的初始化。
初始化程序計數器(PC)。
設置向量表異常事件的入口地址。
調用main函數。
ST公司已經寫好了啟動文件,只要找到對應芯片的啟動文件然后調用就可以了。
ST公司提供了3個啟動文件,這三個文件分別是:
startup_stm32f10x_ld.s是小容量IC的啟動文件。
startup_stm32f10x_md.s是中容量IC的啟動文件。
startup_stm32f10x_hd.s是大容量IC的啟動文件。
小容量是指FLASH≤32KByte的IC。
中容量是指64KByte≤FLASH≤128KByte的IC。
大容量是指256KByte≤FLASH≤512KByte的IC。
STM32F103ZET6的FLASH容量為512KB,是大容量的IC,所以使用的啟動文件是:startup_stm32f10x_hd.s。
startup_stm32f10x_hd.s文件可以在官方提供的固件庫里找到。
將startup_stm32f10x_hd.s復制到MDK-PRO文件夾下。
將startup_stm32f10x_hd.s文件添加到MDK軟件中。
選中startup_stm32f10x_hd.s文件后點擊add。
3、新建源文件
點擊新建文檔,輸入相應的內容,然后保存為.c文件,將.c文件保存在MDK-PRO文件夾中,然后將.c文件添加到工程當中。
如上圖所示,點擊編譯並沒有發現任何錯誤,但這個工程只是一個空的工程,什么操作都沒有,寄存器也沒有封裝。如果這時候要操作寄存器,就得直接用指針操作寄存器的地址,如操作GPIOF的ODR寄存器,就得使用 *(unsigned int *)(0x40011C0C)。這樣顯得比較麻煩,可以通過添加ST提供的頭文件來操作寄存器,其提供的頭文件已經將STM32的寄存器封裝好。
4、添加頭文件
STM32的不同類型的芯片的頭文件是有差別的,STM32F103ZET6的頭文件是stm32f10x.h,這些頭文件可以在ST提供的固件庫里找到。將stm32f10x.h文件放到工程目錄下,然后將stm32f10x.h文件包含進項目當中。
點擊編譯,發現錯誤,點擊提示的錯誤會跳轉到出錯的地方,如下圖:
錯誤提示說找不到core_cm3.h文件,在stm32f10x.h文件中引用了一些頭文件,必須找到這些文件並放到工程中才能消除錯誤,通過錯誤提示,可以查找到缺少的頭文件,分別是:cmsis_armcc.h、core_cm3.h、core_cmFunc.h、core_cmInstr.h和system_stm32f10x.h等頭文件,這些文件都能在ST提供的固件庫中找到。添加完這些文件之后再點擊編譯就可以通過了。
stm32f10x.h文件是通過結構體封裝STM32寄存器的,使用寄存器可以通過結構體來操作。如下圖中的程序控制GPIOF的寄存器。