STM32 V3.4固件庫使用實例 剛?cè)胧諷TM32,查了好多資料也看了好多開發(fā)板的程序和教程,以自己的思路先上一個工程框架吧,剩下的就是大家想加什么就加什么了,希望對和我一樣的STM32初學(xué)者有點幫助,如果您是初次使用ARM MDK希望對你也有幫助,本實例是一個“神馬”功能都沒有的RS422模塊。 2建立目錄 2.1新建工程目錄:“RS422”,你也可以根據(jù)自己的需要命名此頂層目錄; 2.2在目錄“RS422”下新建 “RVMDK”目錄,表示采用ARM MDK開發(fā)環(huán)境; 2.3在“RVMDK”目錄下新建目錄“V1”,表示軟件版本V1.0,這個好處在于下次將整個目錄復(fù)制一下改為“V2”,軟件版本就是V2.0了。 2.4在“V1”目錄下新建 “Libraries”目錄; 2.5在“V1” 目錄下新建 “Project” 目錄。 2.6在“Project”目錄下新建“OBJ”、“LIST”、“Pro”3個目錄。 2.7在“V1” 目錄下新建“USER”目錄。 2.8在“USER”目錄下新建“INC”、“SRC”2個目錄。 圖1:目錄結(jié)構(gòu)圖 3拷貝文件(已經(jīng)寫的很詳細了,就不上圖了) 3.1將固件庫目錄“STM32F10X_StdPeriph_lib_V3.4.0”“Libraries”下的所有目錄拷貝到工程目錄“RS422” “RVMDK” “V1” “Libraries”目錄下。 3.2將固件庫目錄 “STM32F10X_StdPeriph_lib_V3.4.0” “Project” “STM32F10x_StdPeriph_Examples” “GPIO” “IOToggle”目錄下的“stm32f10x_it.c”、“system_stm32f10x.c”拷貝到工程目錄“RS422” “RVMDK” “V1” “USER”“SRC”目錄下,在此“SRC”目錄下新建“main.c”文件,“main.c”先“神馬”也不寫。 3.3 將固件庫目錄“STM32F10X_StdPeriph_lib_V3.4.0”“Project” “STM32F10x_StdPeriph_Examples” “GPIO”“IOToggle”目錄下的“stm32f10x_conf.h”、“stm32f10x_it.h”這2個文件拷貝到工程目錄 “RS422” “RVMDK” “V1”“USER” “INC”目錄下。 4 建立工程:(已經(jīng)寫的很詳細了,就不上圖了) 4.1我用的是ARM 的MDK4.14開發(fā)環(huán)境,運行“Keil uVision4” ; 4.2點擊主菜單欄 “Project”“New uVision Project”,選擇在工程目錄的“V1” “Project” “Pro”目錄下命名新建工程為“RS422_MODULE.uvproj”(當(dāng)然也可以命名為你自己需要的工程名); 4.3接下來出現(xiàn)CPU選擇窗口,選擇CPU為 “STMicroelectronics” “STM32F103ZE” (這個大家根據(jù)自己的需要選擇),點擊 “OK” 按鈕; 4.4接下來出現(xiàn)“Copy STM32 Startup Code to Project Folder and ADD File to Project ?”提示時選擇“否”(在后面的步驟中會根據(jù)CPU選擇啟動文件的,這里不用選擇),完成工程建立。 5 工程管理 上一節(jié)新建的工程還是空空的,這一步要將它實例化。 5.1 在“Project”窗口中用鼠標左鍵點擊“Target 1”,再點擊右鍵彈出菜單選擇菜單中的 “Manage Components”子菜單(見圖2),出現(xiàn)“Components,Environment and Books”窗口(見圖3)。 圖2 圖3 5.2 用鼠標雙擊“Project Targets”欄中的 “Target 1” 將 “Target 1” 改為 “RS422_MODULE” (見圖4),在中間的 “Groups”欄中添加“USER”、“STM32_LIB”、“MDK_STARTUP”、“CMSIS”4個條目(見圖5)。 圖 4 圖5 5.3 在“USER”條目的“Files”欄中添加目錄“V1” “USER” “SRC”下的“main.c”、“stm3210x_it.c”2個文件,通過窗口的“Add Files”按鈕可以添加文件 (見圖6)。 圖6 5.4在 “STM32_LIB” 條目的 “Files” 欄中添加目錄“V1” “Libraries” “STM32F10x_StdPeriph_Driver” “SRC”目錄下的“stm3210x_misc.c”、“stm3210x_rcc.c”、“stm3210x_gpio.c”、 “stm3210x_usart.c”4個文件(見圖7),其中“stm3210x_misc.c”、“stm3210x_rcc.c” 這2個文件是必須的(我自己的理解)。 因為我的程序要用到“GPIO”和“串口”,所以又添加了“stm3210x_gpio.c”、 “stm3210x_usart.c”這2個文件,大家在開發(fā)中如果用到STM32 的其他功能,再添加相應(yīng)的接口庫文件就可以了。 圖7 5.5在“MDK_STARTUP”條目的“Files” 欄中添加目錄“V1” “Libraries” “CMSIS”“CM3”“DeviceSupport”“ST”“STM32F10x”“startup”“arm”(我的神啊:ST的目錄夠深的)下的“startup_stm3210x_hd.s”這個文件(見圖8),因為我選用的CPU是“STM32103ZE” 是高容量FLASH的CPU所以選擇這個文件。 圖8 5.6在 “CMSIS” 條目的 “Files” 欄中添加目錄 “V1” “Libraries” “CMSIS” “CM3”“CoreSupport”下的“core_cm3.c”和目錄 “V1” “USER” “SRC”下的“system_stm32f10x.c”這2個文件(見圖9)。 圖9 5.7 退出“Keil uVision4”開發(fā)環(huán)境,將工程目錄“RS422”去掉文件夾的只讀屬性,并“應(yīng)用到子目錄和所有文件”,這是因為STM32固件庫下載下來是只讀的,無法修改庫中的文件。去掉只讀屬性后再進入“Keil u Vision4”,然后打開工程“RS422_MODULE.uvproj”。 6 工程設(shè)置 6.1在“Project”窗口中用鼠標左鍵點擊最頂層的“RS422”,再點擊右鍵彈出菜單選擇菜單中的 “Options for Target ‘RS422’…”子菜單(見圖10),出現(xiàn)“Options for Target ‘RS422’”窗口(見圖11),可以按圖11進行設(shè)置。 圖 10 圖11 IROM1、IRAM1根據(jù)芯片不同而不同,一般KEIL會自動根據(jù)芯片填好的 6.2 選擇頂層的“Output ”,進入“Output”設(shè)置頁,點擊下面的“Select Folder for Objects…”按鈕,選擇目錄“V1” “Project”“OBJ”為目標文件目錄,選中“Create HEX File” (見圖12)。  件生成目錄(見圖13),所有的目標文件和燒寫到芯片中的文件都在這里。選擇“Create HEX File”前面的方框,用來生成目標文件。 圖 12 以下兩點很重要: - 將上圖”Name of Executable”后的文本框中的”RS422_MODULE” 更改為”RS422”,否則用JLINK或ULINK仿真時會報錯,這是經(jīng)過1個上午的奮斗才找見的KEIL BUG,我的截圖忘了更改了。
- 選中“Browse infomation”前的復(fù)選框,我的截圖忘了選了,要不會找不見函數(shù)或變量的定義的。
6.3 選擇頂層的“Listing”頁 ,進入“Listing”設(shè)置頁,點擊下面的“Select Folder for Listings…”按鈕,選擇目錄“V1” “Project”“LIST”目錄為list文件生成目錄(見圖13)。 圖13 6.4 這是關(guān)鍵的一步,選擇頂層的“C/C++”頁 ,進入“C/C++”設(shè)置頁,在“Preprocessor Symbols”的“Define:”文本框中填入“STM32F10X_HD,USE_STDPERIPH_DRIVER”。如果不填編譯會報錯,大家可以試一下,這是因為在固件庫“stm32f10x.h”中有如下的片斷(見圖14),需要根據(jù)你的CPU來去掉相應(yīng)行的注釋,我選的是STM32系列高容量的CPU,所以需要去掉“stm32f10x.h”中第“0054”行“/*define STM32F10X_HD */”這一行的注釋符,但是不能換一個CPU就改一次注釋吧,老去改文件自己哪天不定就改的迷糊了,幸好編譯器提供了這個功能,只要按本步驟的方法加入“STM32F10X_HD”就可以了,省得自己換了CPU 還得把文件找出來更改。加入“USE_STDPERIPH_DRIVER”是同樣的道理,這個出現(xiàn)在“stm32f10x.h”的第“8280”行(見圖15),但是固件庫中并未定義“USE_STDPERIPH_DRIVER” ,所以也需要用這種辦法靈活的加入,否則編譯時就不會鏈接“stm32f10x_conf.h”,這個文件可是大有用處,打開看看吧,這里就不描述了。 圖14 圖15 6.5 引用固件庫文件所在的目錄也在頂層的“C/C++”頁中進行設(shè)置,上面寫的啰里啰唆的,已經(jīng)太多了,所以寫在這里吧。如果現(xiàn)在編譯程序,會報錯的,看看出錯提示,有一些庫文件跑到開發(fā)工具Keil的安裝目錄下鏈接去了,這是因為沒有設(shè)置STM32固件庫的目錄,編譯器就默認到“Keil”根目錄下的某某目錄找去了。我們工程用到的STM32 3.4.0固件庫的相關(guān)文件在上面第3節(jié)中已經(jīng)直接拷貝到工程里了,這個是因為STM32庫升級到3.4已經(jīng)經(jīng)歷了好多個版本了,而安裝完KEIL 后并不是最新的3.4庫,不能說哪天系統(tǒng)OVER了,裝一次KEIL 就升級一次庫吧,干脆就把庫文件直接放在工程中,即使將工程拷貝到其他機器上也可以編譯,不會因為沒有庫文件而報錯,唉!又啰嗦了這么多。在窗口的“Include Paths”旁邊的文本框后有一個按鈕,點擊調(diào)出“Folder Setup”窗口。這里要添加4個目錄(見圖16),因為這4個目錄里都有“.h ”文件: “ RS422\RVMDK\V1\Libraries\STM32F10x_StdPeriph_Driver\inc” ; “ RS422\RVMDK\V1\Libraries\CMSIS\CM3\CoreSupport ” ; “ RS422\RVMDK\V1\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x ” ; “ RS422\RVMDK\V1\USER\inc ” ; 圖16 6.6 其他“C/C++”按圖17設(shè)置默認就可以了。 圖17 7. main.c文件 因為這是一個沒有任何功能的工程框架,所以main.c可以這么寫: #include "stm32f10x.h" main () { while (1) { ; } } 編譯程序,沒有警告和錯誤,框架就算生成了,想添加自己的代碼就可以以后添加了,自己的代碼放在工程目錄“RS422” “RVMDK” “V1” “USER”下的“INC”或“SRC”目錄下,“INC”下放你的“.h”文件,“SRC”目錄下放你的“.C”文件。 |