STM32:Keil MDK(uVision v4.10)開發(fā)環(huán)境搭建
集成開發(fā)環(huán)境(IDE):Keil公司的RealView MDK(uVision V4.10)
源文件編輯器:EditPlus(我在用的)/UltraEdit/SourceInsight/IDE自帶的編輯器
串口工具:SecureCRT(一個專業(yè)的超級終端工具,支持很多接口(包括串口)和協(xié)議,推薦使用。)
RealView MDK 工程配置:(keil開發(fā)環(huán)境搭建核心步驟)
1、新建文件夾,文件夾名如:Template
2、在文件夾Template下新建文件夾:User/ Project/ Output/ Listing/ Libraries/CMSIS/ Libraries/FWlib/ Doc/
3、在Project/文件夾下建立項目文件夾,如RTX/
4、keil軟件中【Project】→【New uVision Project】找到該文件夾打開,并輸入實際項目名稱,如RTX保存;
5、選擇芯片型號:我們是STM32F103ZET6,有64K SRAM,512K Flash,因此選擇【STMicroelectronice】→【STM32F103ZE】→OK,拷貝啟動代碼選擇【否】;
6、修改左側窗口Project中的Target1名稱,刪除Source Group 1
7、在工程文件夾下拷貝所需的庫文件:
1)User/下拷貝ST庫3.5.0源碼STM32F10x_StdPeriph_Lib_V3.5.0ProjectSTM32F10x_StdPeriph_Template文件夾下的
2)Libraries/FWlib/下拷貝ST庫3.5.0源碼STM32F10x_StdPeriph_Lib_V3.5.0LibrariesSTM32F10x_StdPeriph_Driver文件夾下的
3)Libraries/CMSIS/下拷貝ST庫3.5.0源碼STM32F10x_StdPeriph_Lib_V3.5.0LibrariesCMSISCM3DeviceSupportSTSTM32F10x文件夾下的
還需拷貝ST庫3.5.0源碼STM32F10x_StdPeriph_Lib_V3.5.0LibrariesCMSISCM3CoreSupport文件夾下的
4)Doc/下一般放readme.txt說明文檔;
8、在keil軟件左側Project窗口的Template下建立5組文件夾:點擊圖標【file Extensions】→【Groups】→【Add Files】
Groups:STARTUP/ CMSIS/ FWLIB/ USER/ DOC/
files:
STARTUP/startup_stm32f10x_hd.s
CMSIS/(CMSIS/下所有*.c *.h文件)
FWLIB/(src/下.c文件,根據(jù)實際工程所需進行添加)
USER/(User/下所有.c .h文件)
注意事項:拷貝過來的.s .c .h文件如有帶鎖的,表明只讀,需要在windows文件夾下全選右鍵去掉【只讀】
9、選項卡【Target Options】↓
【Target】 (√)Use MicroLIB
【Output】→Select Folder for Objects...→Output/打開
(√)Create HEX File
【Listing】→Select Folder for Listings...→Listings/打開
【C/C++】→Define:STM32F10X_HD, USE_STDPERIPH_DRIVER
(√)One ELF Section per Function
→Include Paths:....LibrariesCMSIS;....User;....LibrariesFWlibinc
添加--diag_suppress=870控制,可以避免中文字符串告警。
如果開發(fā)板使用J-Link調試的話,還需配置以下選項:
【Debug】
>>Flash Download→(√)Use: J-LINK/J-Trace Cortex; (√)Run to main()
→Settings→(√)Erase Full C; (√)Reset and Run
>> Add→STM32F10x High-density Flash→Add
>> Debug→(√)Port: JTAG; (√)MAX Clock:10MHz
【Utilities】(√)Use Target Driver...(√)J-LINK/J-Trace Cortex
keil的虛擬串口Debug調試:
需要在【Target Options】-【Debug】中設置為Use Simulator模式,開啟 【View】-【command window】輸入命令:
MODE COM1 115200,0,8,1
ASSIGN COM1
虛擬串口軟件 VSPD 開啟兩個COM,使用secureCRT連接另外一個COM口,查看接收情況
技巧:
【Debug】選項卡下左側Initialization File中點擊【...】 新增一個默認調試命令的.ini文件,如debug.ini,將兩行命令復制進去即可在調試時自動加載兩個鏈接COM1串口配置的命令。
關于STM32學習的一些觀點
堅定信念選擇ST固件庫:
不要再思考固件庫開發(fā)還是寄存器開發(fā)這種問題了。 99%的有實際產品開發(fā)經驗的工程師都會告訴你,使用ST的固件庫開發(fā)STM32應用是最佳的選擇。這套固件庫寫的非常規(guī)范,很嚴謹,沒有一定的C語言功底和程序架構設計功底是寫不出來這種代碼的。你如果覺得固件庫過于復雜,太亂了,只能說明一個問題:你沒有參與過大型軟件開發(fā)、你的C語言還沒學習到位、你還沒有程序架構設計的概念。
我們要做的是學會如何看懂固件庫、學習如何使用固件庫。 深入的話可以借鑒固件庫的寫法構建我們自己的外設驅動。
可能有些人會反駁,不學習寄存器,感覺學習地不深入。我的觀點是:寄存器是最沒有學習價值的,硬件功能復雜了必須通過一些寄存器的某些bit來配置和選擇硬件功能。我們需要大量的時間來記憶、梳理寄存器每個bit之間的關系。我認為是不值得的。你不如將這個時間花在學習ST固件庫是如何梳理、歸納這些硬件功能,也就是學習C程序設計方法。
我們也不是完全讓你不去了解寄存器功能,在極個別時候,我們也會使用寄存器直接操作。不過我們也就是將ST固件庫的函數(shù)展開以提高代碼執(zhí)行效率。
選擇性學習:
(這個可能適合很多上進心很強的童鞋,總想把STM32搞精搞透,甚至不只是單片機,F(xiàn)PGA等等等等的技術,人生苦短,抓住精華,盡力而為!)
STM32的功能實在太多,和STM32相關的軟件組件也多如牛毛。而人的精力是有限,你就算學習一輩子,也不可能學會所有的東西。人的一生,時間是最為寶貴的,我們一定要將時間用在刀刃上。別人做好的開源的第三方的代碼,如果你測試應用過,沒有問題,那他就屬于你的了,你只要學會怎么移植和使用它就足夠了。如果別人已經移植好了,那就更方便了,直接拿來使用即可。沒有必要再花精力深入代碼去研究別人的程序結構了。比如FatFS、 uIP、 ST固件庫、 uCOS、 emWin。除非你是做基礎研究或者查找BUG。
我們一定要將時間騰出來去學習和掌握更多的軟件模塊。這樣,當項目來臨時,你就可以從容應對。
構建自己的代碼庫:
(根據(jù)自己的代碼風格,以及常用的模塊,建立自己的小代碼庫,這樣以后用到的時候,直接拿來改一改,自己的東西自己心里清楚,用著明了,心里也踏實,也利于項目的快速啟動和建立)
自己驗證過的代碼,要學會收集整理。變?yōu)樽约捍a庫的一部分。日積月累。等到做產品和項目時,80%以上的代碼來自于代碼庫。做產品很多時候就是搭積木。你的代碼庫越豐富,做起產品來也就越快越好。一些好的工程框架也要學會收集整理。我們在很多時候做項目,都是直接復制某個相近的工程。不可能每次都去重新新建一個工程。好比蓋房子,你可以直接拿磚砌,而不用在花時間去造轉。