網上搜索了一些方法,匯總了下,挑選了一個可行的寫出來,如下。
1、新建工程!Project → New uVision Project,保存。
2、選擇芯片型號!。這里用:STM32F103C8。
3、提示是否拷貝,選擇否!
4、新建文件夾!在工程文件根目錄下新建幾個文件夾:User、CMSIS、Lib、Obj、List(這里是為了養成良好的習慣。︰ser放置用戶代碼;CMSIS放置固件庫的啟動文件,Lib放置庫文件
PS:普及(CMSIS:Cortex Microcontroller Software Interface Standard,是 ARM Cortex 微控制器軟件接口標準,是ARM公司為芯片廠商提供的一套通用的且獨立于芯片廠商的處理器軟件接口。)
5、拷貝!把固件庫的Libraries \ STM32F10x_StdPeriph_Driver目錄下的inc和src這兩個文件夾復制到剛才新建的Lib文件夾中。
將固件庫的Libraries \ CMSIS \ Core \ CM3文件夾下的全部文件復制到剛才新建的CMSIS文件夾中,Startup / arm目錄下一般有三個啟動文件,分別為,startup_stm32f10x_ld.s,startup_stm32f10x_md.s,
startup_stm32f10x_hd.s,按順序是小,中,大容量Flash單片機的啟動文件。我們這里用的是
STM32F103C8有128 K Flash。所以,稍后,把startup_stm32f10x_md.s添加到我們的工程中。不同大小的Flash對應的啟動文件不同,這點要注意。
最后,用戶的代碼(例如main.c)都放在User文件夾下。
6、建組!鼠標右擊“Target1”→Manage Componets,彈出如下的對話框,在中間列依次建立:CMSIS、Lib、User文件夾,將原有的Source Group1改為startup,并在最右列依次添加所需要的文件。
Startup中startup_stm32f10x_md.s文件,在USER組里添加main.c,stm32f10x_it.c這兩個文件,在FWlib組里面添加src里面的全部驅動文件。
PS:src里面的驅動文件,也可以需要哪個就添加哪個,這里全部添加,是為了后續開發的方便。并且,我們可以通過配置stm32f10x_conf.h文件來選擇性添加,只有在stm32f10x_conf.h中被配置的文件才會被編譯。
PS:注意,在組里面添加的,都是匯編文件和C文件 ( 即,以 .s和 .c為后綴的文件 ),即,都是源程序文件 ( 可能還有其它類型的文件,但是,都必須是源程序文件 ),并且,一般地,所有源程序文件都必須添加到組里面才行。但是,頭文件是不需要添加到組里面的。
7、設置!右鍵“Target1”→Options For Target “Target1”,彈出下面的對話框。
①點擊“Output”選項卡,點擊“Select Folder for Objects”按鈕,可以為編譯時產生的輸出文件,設置一個文件夾“Obj”,把這些輸出文件都輸出到該文件夾下。還可以把“Creat HEX File”選項框勾上,這樣,就可以在編譯時,輸出16進制的可執行文件了。
②點擊“Listing”選項卡,點擊“Select Folder for Listings”按鈕,可以為編譯時產生的鏈接文件,設置一個文件夾“List”,把這些鏈接文件都輸出到該文件夾下。
③點擊“C / C++”選項卡,這里有兩個設置很重要 (“Define”和“Include Paths”,如下圖 ),設置不對,編譯會出很多錯誤。另外,下圖中的“One ELF Section per function”一般要選上。
Define是設置,預定義符號,在這里定義符號,相當于在程序文件中使用 #define 語句定義符號。這里一般要填入以下內容:USE_STDPERIPH_DRIVER, STM32F10X_HD, USE_STM3210E_EVAL其中,定義了USE_STDPERIPH_DRIVER就可以使用,標準外設驅動。定義了STM32F10X_HD,就可以對固件庫進行條件編譯。定義了USE_STM3210E_EVAL,就可以使用ST公司的官方評估板作為硬件來下載,調試程序,這個宏,一般可以不定義,因為我們很少使用ST公司的官方評估板。
PS:注意:定義STM32F10X_HD,是因為我們用的芯片是大容量的。添加了STM32F10X_MD這個宏以后,庫文件里面為大容量芯片定義的寄存器,我們都可以使用了。芯片是小容量,或者,中容量時,宏要換成,STM32F10X_LD或者STM32F10X_HD。其實,不管什么容量,我們只要添加STM32F10X_HD這個宏即可。當我們用小,或者,中容量的芯片時,那些為大容量定義的寄存器,不去訪問就是了,反正,也訪問不了。
Include Paths是設置,頭文件的搜索路徑的。我們的工程中,用到的頭文件在哪個路徑,就把該路徑添加進來。有時,也可以根據編譯錯誤,發現哪些頭文件,編譯器找不到,再把這些頭文件的路徑添加進來。一般要填入的路徑有以下一些,每個不同的路徑以分號間隔:“ ..\ ”表示工程根目錄。
例如:..\..\..\Libraries\STM32F10x_StdPeriph_Driver\inc;這里主要有幾個必須要添加,一是inc的庫,也就是頭文件庫;二是CMSIS的路徑必須要添加!
PS:注意:因為編譯器不會自動搜索指定目錄的子文件夾,所以每個路徑都要添加,就算,路徑1是路徑2的子目錄,路徑1和路徑2都必須同時添加,才行。 在添加目錄時要注意,在下圖界面下,必須把藍色條移到最后的空白處,再點擊“OK”,最后一個路徑才能被添加成功,否則,最后一個路徑會丟失。
④點擊“Debug”選項卡,選中左邊的Use Simulator,就是使用軟件仿真模式調試,選中右邊的Use,就是使用硬件仿真,調試。由于我們多使用開發板加J-Link調試,所以選中“Cortex–M / R J-LINK / J-Trace”項,其它選項,默認即可。如下圖。
⑤點擊“Utilities”,選中“Use Target Driver for Flash Programming”,在它下面選擇“Cortex–M / R J-LINK / J-Trace”項。其它設置,默認即可。如下圖。
⑥在上圖的界面中,點擊“Settings”按鈕,彈出下面的對話框,添加Flash。如果,已經有Flash了,就不用添加了,如果沒有的話,就一定要添加Flash,否則,無法下載程序到開發板。
編譯即可
PS:main.c中的頭文件需要引用。例如:#include "stm32f10x_gpio.h"、#include "stm32f10x_rcc.h"等
仿真器的接口
流行的是JTAG/SWD
仿真器端口 連接目標板 備注
1. VCC MCU電源VCC VCC
2. VCC MCU電源VCC VCC
3. TRST TRST Test ReSeT/ pin
4. GND GND或懸空
5. TDI TDI Test Data In pin
6. GND GND或懸空
7. TMS, SWIO TMS, SWIO JTAG:Test Mode State pin ; SWD: Data I/O pin
8. GND GND或懸空
9. TCLK, SWCLK TMS, SWCLK JTAG: Test Clock pin ; SWD: Clock pin
10. GND GND或懸空
11. RTCK RTCK
12. GND GND或懸空
13. TDO TDO Test Data Out pin
14. GND GND或懸空
15. RESET RESET RSTIN pin
16. GND GND或懸空
17. NC NC
18. GND GND或懸空
19. NC NC
20. GND GND或懸空
下面是標準的接口排列:
ST-Link/V2 JTA/SWD接口是如何定義的?
下面為ST-Link/V2 JTAG/SWD接口定義:
仿真器端口 連接目標板 功能
1. TVCC MCU電源VCC 連接STM32目標板的電源VCC
2. TVCC MCU電源VCC 連接STM32目標板的電源VCC
3. TRST GND GROUND
4. UART-RX GND GROUND
5. TDI TDI 連接STM32的JTAG TDI
6. UART-TX GND GROUND
7. TMS, SWIO TMS, SWIO 連接STM32的JTAG的TMS, SWD的SW IO
8. BOOT0 GND GROUND
9. TCK, SWCLK TCK, SWCLK 連接STM32的JTAG的TCK, SWD的SW CLK
10. SWIM GND GROUND
11. NC NC Unused
12. GND GND GROUND
13. TDO TDO 連接STM32的JTAG TDO
14. SWIM-RST GND GROUND
15. STM32-RESET RESET 連接STM32目標板的RESET端口
16. KEY NC GROUND
17. NC NC Unused
18. GND GND GROUND
19. VDD NC VDD (3.3V)
20. GND GND GROUND
下面是ST-Link/V2 JTAG/SWD標準的接口排列:
STM32F10X手冊中要求的JTAG/SWD接法:
|