學(xué)習(xí)stm32,第一步就是選擇開(kāi)發(fā)工具了,,GCC,,MDK,IAR每一種都有自己的優(yōu)劣勢(shì),,這里我選擇使用MDK軟件實(shí)現(xiàn)STM32模板,。當(dāng)然如果想更快的接觸stm32實(shí)例,領(lǐng)略嵌入式開(kāi)發(fā)的魅力,,STM也提供了豐富的例程供開(kāi)發(fā)者學(xué)習(xí)使用,,具體參考http://www./design_resources.html。直接使用例程對(duì)于快速開(kāi)發(fā)實(shí)現(xiàn)功能十分有利,,但當(dāng)我們需要學(xué)習(xí)時(shí)就會(huì)變得復(fù)雜。為了更好的解析學(xué)習(xí)STM32,,脫離例程,,建立工程模板是十分有必要的,。初次建立自然錯(cuò)誤一堆,但通過(guò)查錯(cuò)的過(guò)程,,可以清晰的了解項(xiàng)目的執(zhí)行流程和各模塊及定義的含義,。如果你只是想快速的開(kāi)發(fā)功能,那么上面網(wǎng)址內(nèi)的資源會(huì)更加有效,,不過(guò)如果你想深入學(xué)習(xí)嵌入式,,那么從工程模板開(kāi)始,一步步積累自己的STM32工程庫(kù)是必要的,。 1. 準(zhǔn)備工作 建立工程文件夾,,在其下面添加/DRIVER,/MDK-ARM,,/USER這三個(gè)文件夾(PS:所有文件夾名字要用英文,,中文在某些情況下會(huì)出現(xiàn)未知編譯錯(cuò)誤):
DRIVER:包含著與STM32F10x芯片相關(guān)的外設(shè)固件函數(shù)庫(kù),啟動(dòng)文件以及寄存器地址定義,。 MDK-ARM:包含工程文件,,編譯生成的中間文件以及最后輸出hex文件。 USER: 用戶編譯的代碼,,包含外設(shè)配置和main文件,。 移動(dòng)標(biāo)準(zhǔn)庫(kù)函數(shù)文件中的配置文件到DRIVER文件夾中,以我當(dāng)前使用的STM32F10x_StdPeriph_Lib_V3.5.0為例(后續(xù)的庫(kù)可能有其它改動(dòng),,這可以按照這個(gè)思路去處理配置驅(qū)動(dòng)文件),解壓STM32F10x_StdPeriph_Lib,,...\\stm32f10x_stdperiph_lib\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries文件夾下的
并復(fù)制到...\\DRIVER文件夾下。 CMSIS:Cortex的微控制器軟件接口標(biāo)準(zhǔn),,它提供了stm32的啟動(dòng)文件,,外設(shè)定義,以及器件的定義,。 STM32F10x_StdPeriph_Driver: ST公司提供的操作芯片的外設(shè)庫(kù)函數(shù),。 2. 使用MDK建立工程 1).新建工程 打開(kāi)MDK5.14,選項(xiàng)Porject->New uVision Project,,將生成的project放在...\MDK-ARM文件夾,,之后選擇開(kāi)發(fā)板對(duì)應(yīng)芯片,例如我選擇的是芯片是STM32F107VC,,如此便建立了一個(gè)空的工程,。 2).添加GROUP,并添加項(xiàng)目文件
添加三個(gè)GROUP,,并改名字為User,,Driver,StartUp。 User:用戶代碼,,包含自己編寫的外設(shè)配置函數(shù)和程序的功能主體實(shí)現(xiàn),,在...\\USER文件夾下 Driver:系統(tǒng)固件函數(shù)庫(kù),在...\\DRIVER\STM32F10x_StdPeriph_Driver\src文件夾下 StartUp:啟動(dòng)代碼,,在...\\DIVER\CMSIS\CM3\DeviceSupport\ST\STM32F10x文件夾下 3).添加頭文件查找,,解決錯(cuò)誤 選中MDK中target文件夾,右鍵選擇OPTION(或者快捷鍵ALT+F7),,在彈出的對(duì)話框上方選中C/C++,。
在對(duì)話框下方的include Pathe處添加:......\SOURCE\STM32F10x_StdPeriph_Driver\inc提供頭文件目錄支持(后續(xù)還要添加新的頭文件目錄,如果了解windows環(huán)境變量Path,,其實(shí)和這個(gè)的原理一樣),,也就是將用到的頭文件的路徑包含到軟件中,在編譯的時(shí)候軟件就可以查詢指定目錄內(nèi)的頭文件,。
如此完成了整個(gè)工程的建立,,下面就是解決錯(cuò)誤了。上面的都完成后,,再main.c文件里添加代碼,,頭文件為#include'stm32f10x.h',編譯,。如果你用的是標(biāo)準(zhǔn)庫(kù)文件,,那么這時(shí)會(huì)出現(xiàn) C:\Keil\ARM\Inc\ST\STM32F10x\stm32f10x.h(8319):error: #5: cannot open source input file 'stm32f10x_conf.h': No such file or directory stm32f10x_conf.h里是所用外設(shè)的頭文件的申明以及程序內(nèi)部assert處理命令,在3.5的固態(tài)庫(kù)我沒(méi)有找到這個(gè)頭文件,,于是我下載一個(gè)具有所有外設(shè)頭文件申明的頭文件stm32f10x_conf.h,將其放入......\DRIVER\STM32F10x_StdPeriph_Driver\inc中,,繼續(xù)編譯,出現(xiàn)一堆端口未定義,,這是因?yàn)閟tm32f10x_conf.h雖然添加進(jìn)去了,,但并沒(méi)有真正啟用,在stm32f10x.h中查找,,大概100行的位置
取消掉#define USE_STDPERIPH_DRIVER這句話的注釋,,如上圖即可。 此外,,#include”stm32f10x_conf.h”定義在#include'stm32f10x.h'的末尾.
下面就來(lái)講stm32f10x_conf.h這個(gè)頭文件,。
里面包含了所有的外設(shè)頭文件,你需要用什么外設(shè)就取消對(duì)應(yīng)得頭文件注釋即可,。此外如果出現(xiàn) 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)' 表明你沒(méi)有申明當(dāng)前選擇的STM芯片的類型,,在stm32f10x.h找到如下的代碼段,下方會(huì)有英文注釋告訴你如何選擇,,取消掉你所用板子型號(hào)對(duì)應(yīng)類型的注釋即可(重要,,板子型號(hào)對(duì)應(yīng)的寄存器設(shè)置會(huì)不同,選擇不符合的可能程序跑不起來(lái)),如stm32f107為互聯(lián)型,,則取消STM32F10X_CL的注釋,。 解決以上問(wèn)題,那么一個(gè)基礎(chǔ)ARM項(xiàng)目模板就建立起來(lái)了,,不過(guò)要實(shí)現(xiàn)一個(gè)完整的實(shí)現(xiàn)功能的嵌入式程序,還需要自己添加相關(guān)的代碼,。上述程序的實(shí)踐可參考第二章:基于STM32F10x.3.5.0庫(kù)的流水燈程序?qū)崿F(xiàn) 注意:如果使用系統(tǒng)自帶的啟動(dòng)文件如startup_stm32f10x_cl.s等,,則必須添加文件system_stm32f10x.c,否則程序會(huì)啟動(dòng)不成功,。
從這可以看出,,復(fù)位后程序會(huì)先加載SystemInit,這個(gè)函數(shù)實(shí)現(xiàn)了系統(tǒng)時(shí)鐘RCC的配置,,它的定義正是在system_stm32f10x.c中,。 |
|
來(lái)自: 旭日東升4k165w > 《文件夾1》