程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 1. 如何新建一個ARM工程,新建arm工程

1. 如何新建一個ARM工程,新建arm工程

編輯:關於C語言

1. 如何新建一個ARM工程,新建arm工程


   學習stm32,第一步就是選擇開發工具了,GCC,MDK,IAR每一種都有自己的優劣勢,不再贅述。在這裡,我選擇使用的時MDK5.14。首次使用MDK,如果有開發板,那麼例程就提供了了很多的模板供我們學習。但是我發現直接使用這些模板雖然讓我快速的實現功能,是很有趣,但是解析代碼時卻讓我感覺迷茫,我甚至不知道程序的運行流程,也不知道為什麼如此設計,因此我就有了脫離例程,自己建立工程的想法,初次建立錯誤一堆,通過百度以及自己查找解決這一個個錯誤花費了我接近4個小時,我把自己的整個經歷記錄下來,雖然以後遇到的芯片或者開發軟件可能不同,但具體思路卻是一致的。這個流程也基本上適用於所有使用MDK生成用於STM32程序(固件函數庫方式)。為了以後再次出現相同錯誤能快速的解決,我盡可能給出詳細步驟處理。

准備工作

建立工程文件夾,在其下面添加OUTPUT,SOURCE這兩個文件夾(如下):

然後在SOURCE文件夾下添加文件夾APP,用來存放用戶文件。

備注:所有文件夾(包括工程的路徑上的文件夾)名字一定要是要英文,這是因為中文在某些情況下會出現未知編譯錯誤。

        移動標准庫文件中的頭文件和對應子文件代碼到SOURCE文件夾,我使用的是STM32F10x_StdPeriph_Lib_V3.5.0,後續的庫可能有其它改動,這就需要你自己按照這個思路去處理,解壓STM32F10x_StdPeriph_Lib,找到...\\stm32f10x_stdperiph_lib\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries文件夾下的

並復制到...\\工程文件夾(當前工程,英文)\\SOURCE文件夾下,其中CMSIS是Cortex的微控制器軟件接口標准,它提供了stm32的啟動文件,外設定義,以及器件的定義。而STM32F10x_StdPeriph_Driver提供的就是庫函數用來實現對芯片的操作。

SOURCE文件夾內容如下:

到此,整個工程的准備工作就做好了,下面就開始用MDK建立工程。

 使用MDK建立工程

1.新建ARM MDK工程,我選擇的是芯片STM32F107VS,與開發板芯片保持一致,位置在當前工程文件下。工程建立中,添加對應芯片但不要添加啟動代碼,手動復制安裝目錄\\Keil\ARM\Startup\ST文件夾下的STM32F10x.s(啟動文件,以後會詳解)到當前工程文件夾,並添加到當前工程下的start_up中。

2.新建file,保存在上述的...//APP文件夾裡,文件名保存為main.c,然後添加到USER文件夾下。

3.在工程中添加文件夾DRIVE,並把用到的驅動文件,也就是...\SOURCE\STM32F10x_ StdPeriph_Driver\src下需要使用的驅動文件添加到DRIVE文件夾裡,如下:

給target添加inc查詢支持,用於頭文件查找。

備注:重要,不然MDK是無法識別你包含的頭文件

具體步驟如下:

1.選中MDK中target文件夾,右鍵選擇OPTION(快捷鍵ALT+F7),在彈出的對話框上方選中C/C++。

 

2.在對話框下方的includePathe處添加:當前工程文件夾\SOURCE\STM32F10x_StdPeriph_Driver\inc提供頭文件支持(後序還要添加新的支持),也就是將用到的頭文件的路徑包含到軟件中!

編譯和更正

上面的都完成後,再main函數裡添加代碼,頭文件為#include"stm32f10x.h",編譯。

這時會出現

C:\Keil\ARM\Inc\ST\STM32F10x\stm32f10x.h(8319):error:  #5: cannot open source input file "stm32f10x_conf.h": No suchfile or directory

stm32f10x_conf.h裡是所用外設的頭文件的申明以及程序內部assert處理命令,在3.5的固態庫我沒有找到這個頭文件,於是我下載一個具有所有外設頭文件申明的頭文件stm32f10x_conf.h,將其放入當前工程文件夾\SOURCE\STM32F10x_StdPeriph_Driver\inc中,繼續編譯,出現一堆端口未定義,這是因為stm32f10x_conf.h雖然添加進去了,但並沒有真正啟用,在stm32f10x.h中查找,大概100行的位置

取消掉#defineUSE_STDPERIPH_DRIVER這句話的注釋,如上圖即可。此外,#include”stm32f10x_conf.h”定義在#include"stm32f10x.h"的末尾,

 下面就來講stm32f10x_conf.h這個頭文件。

 裡面包含了所有你需要用到的外設頭文件,你需要用什麼外設就取消對應得頭文件注釋即可。

此外如果出現

C:\Keil\ARM\Inc\ST\STM32F10x\stm32f10x.h(97):error:  #35: #error directive:"Please select first the target STM32F10x device used in your application(in stm32f10x.h file)"

表明你沒有申明當前選擇的STM芯片隸屬於的類型,在stm32f10x.h找到如下的代碼段,下方會有英文注釋告訴你如何選擇,取消掉你所用板子型號對應類型的注釋即可(重要,板子型號對應的寄存器設置會不同,選擇不符合的可能程序跑不起來),如stm32f107為互聯型,則取消STM32F10X_CL的注釋。

解決以上問題,那麼一個無錯誤的基礎ARM工程架構就建立起來了,當然要實現想需要的功能,還需要自己添加相關的代碼,以後逐步介紹外設的時候我會說明!

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved