1. 程式人生 > >使用Visual Studio + Visual Assist X + MDK(編譯器) 構建STM32開發環境

使用Visual Studio + Visual Assist X + MDK(編譯器) 構建STM32開發環境

自己有一塊STM32103的開發小板,想學學STM32開發,在網上搜搜入門教程,卻發現,這些教程真是太令人噁心了!他們要每一次新建一個專案都要Copy一個比整個原始碼大出幾千倍的Standard Peripheral Library,每一次編寫程式碼都需要使用老掉牙的、程式碼提示功能不全的IDE,每一次......這叫人怎麼能忍受得了?

我打算給它換一個IDE,換一種新建專案的方法。嗯嗯,我是這樣想的,也是這麼做的。

我喜歡使用Visual Studio,這是一個強大的IDE,加上Visual Assist X的程式碼提示、程式碼高亮等等功能的輔助,用來開發C/C++工程簡直棒極了!

既然如此,接下來我就介紹如何使用Visual Studio+Visual Assist X+MDK構建STM32開發環境。

首先,下載Visual Studio和Visual Assist X,MDK,這個很簡單。不過,為了我們能夠較為方便地使用STM32的各種功能,大家還是再下載一個Standard Peripheral Library吧,目前最新版本為3.5,在 ST官網 

http://www.st.com/web/catalog/tools/FM147/CL1794/SC961/SS1743/PF257890 可以下載到,不過這個連結有可能失效,大家還是Google一下吧。

接下來,在安裝MDK的時候我們要記住MDK的安裝路徑,因為裡面有我們需要的編譯器。

例如,我的MDK是安裝在

C:\STM32\Keil

那麼,MDK的編譯器就坐落在

C:\STM32\Keil\ARM\ARMCC\bin

(補充:這個是ARM的編譯器,如果你有DS-5的編譯器,當然也可以用,但是我推薦使用這個,因為這個最簡單,而且也不賴。)

好,第一步,建立專門的目錄

好的,首先,我們先要確定一個專案位置,用來專門存放STM32專案,例如,我把它定為:

D:\STM32

然後,我們把Standard Peripheral Library裡的

Libraries

資料夾複製到
D:\STM32

接著,開啟Visual Studio,在D:\STM32目錄下新建一個專案(記得為解決方案新建一個目錄噢,不然你的目錄會很亂的噢!)。

好,第二步,新增路徑以使Visual Assist X正常工作。

好的,新建好專案以後,點選 檢視 - 屬性管理器,然後 雙擊 Win32 - Microsoft.Cpp.Win32.user - 進入通用屬性 - VC++目錄,將以下三個資料夾加入包含目錄:

D:\STM32\Libraries\CMSIS\CM3\CoreSupport
D:\STM32\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x
D:\STM32\Libraries\STM32F10x_StdPeriph_Driver\inc

將上面三個目錄和這個目錄加入原始碼目錄:

D:\STM32\Libraries\STM32F10x_StdPeriph_Driver\src

這樣,Visual Assist X就能正常工作了!(記得啟用它的所有功能噢,不然體驗不到它所帶來的“快”感的)

以上要做的是一次性的事情,不過以下要做的是每一次新建專案都要做的噢。

好,第三步,修改專案設定、新增檔案

在左邊的專案資源管理器裡選中專案,右鍵屬性-配置屬性-生成事件-預生成事件

修改命令列為:

echo cleanning ...

cd "$(OutDir)"
if exist objs.txt del objs.txt *.o *.axf
再修改:
配置屬性-自定義生成步驟-常規

命令列:

echo Linking ...
set path=C:\STM32\Keil\ARM\ARMCC\bin;%path%
set LibPath=..\..\Libraries

set IncludeParam=-I"%LibPath%\CMSIS\CM3\CoreSupport"
set IncludeParam=-I"%LibPath%\CMSIS\CM3\DeviceSupport\ST\STM32F10x" %IncludeParam%
set IncludeParam=-I"%LibPath%\STM32F10x_StdPeriph_Driver\inc" %IncludeParam%
set IncludeParam=-I"%LibPath%\STM32F10x_StdPeriph_Driver\src" %IncludeParam%

cd "$(OutDir)"

armlink --output "__Image.axf" --ro-base 0x08000000 --entry 0x08000000 --rw-base 0x20000000 --entry Reset_Handler --first __Vectors --via "objs.txt"

fromelf "__Image.axf" --i32 --output "$(TargetPath).hex"

echo output on $(TargetPath).hex

copy "$(TargetPath).hex" D:\z.hex
輸出:
$(TargetPath)

以後每新建一個專案都這麼修改一次屬性。

新增一個main.cpp,選中它,右鍵-屬性,將常規 - 項型別 修改為 自定義生成工具,點選應用

將自定義生產工具 - 常規裡的各個專案修改為(複製貼上就可以了) :

命令列:

Building %(Filename)%(Extension)
set path=C:\STM32\Keil\ARM\ARMCC\bin;%path%
set LibPath=..\..\Libraries

set IncludeParam=-I"%LibPath%\CMSIS\CM3\CoreSupport"
set IncludeParam=-I"%LibPath%\CMSIS\CM3\DeviceSupport\ST\STM32F10x" %IncludeParam%
set IncludeParam=-I"%LibPath%\STM32F10x_StdPeriph_Driver\inc" %IncludeParam%
set IncludeParam=-I"%LibPath%\STM32F10x_StdPeriph_Driver\src" %IncludeParam%

armcc "%(Identity)" -c -o "$(OutDir)%(Filename).o" %IncludeParam% --cpu Cortex-M3 -O3 -Otime
echo "$(OutDir)%(Filename).o">>"$(OutDir)objs.txt"


輸出:

$(OutDir)%(Filename).o;$(OutDir)objs.txt
以後每新建一個檔案都這樣設定一次。(新建.s等等彙編檔案也可以用這個命令列,因為armcc也可以編譯.s)。

好了,一切OK,你可以盡情地享受Visual Studio整合環境所帶來的無限好處了:

精準、快速的程式碼提示;

令人心曠神怡的程式碼高亮;

按F7就可以馬上編譯;

如果你喜歡,再在命令列里加一兩句話,按F7就可以自動程式設計咯!編寫一個簡單的程式,然後按F7編譯了。生成的檔案會存放在 (解決方案目錄\Debug)裡面。

好了,教程到此結束了,祝大家STM32之旅愉快^_^