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