1. 程式人生 > >windows下的基於Eclipse的STM32開發除錯環境搭建

windows下的基於Eclipse的STM32開發除錯環境搭建

這段時間在玩STM32,但官方庫的程式碼也確實是有點多,記憶力有點不太好了。突然就想起了以前用Eclipse的那個程式碼提示功能,谷歌了一段時間,

(一)安裝編譯環境

1.下載和安裝JAVA虛擬機器

因為Eclipse是基於Java的,所以Linux下也可以執行,同時使用Eclipse時,需要確認計算機是否有Java虛擬機器的環境,如果沒有,登陸甲骨文網http://www.oracle.com/index.html,下載JAVA JDK安裝包,本人使用64bit的WIN7,所以下載了 jdk-8u51-windows-x64.exe。要注意,在WIN7/XP下安裝完Java JDK後,並不是完成了,還要自己手動配置環境變數,詳情可以百度《配置JAVA環境變數的配置》。


2.下載和安裝Eclipse

JAVA環境配置好後,登陸www.eclipse.org  下載 C/C++ 的Eclipse IDE,免安裝,解壓即可用(前提是JAVA環境配置好了)


3.Eclipse下的CDT外掛的安裝

接下來,就是外掛的安裝了,首先安裝的CDT,,下載地址http://www.eclipse.org/cdt/,本人下載的是cdt-master-7.0.2.zip

安裝方式:開啟Eclipse->Help->Install New software,在彈出的視窗點"Archive",然後選擇剛剛下載的CDT壓縮包,再點OK。

   然後勾選所有專案,按NEXT,等待即可




勾選全部後,一路按"NEXT"


4.GNU ARM Eclipse 外掛安裝

CDT裝完以後就可以安裝GNU ARM Eclipse Plug-in:http://sourceforge.net/projects/gnuarmeclipse/  ,ilg.gnuarmeclipse.repository-2.7.1-201503211846.zip ,安裝方式與CDT外掛安裝方式相同,目前的版本已經支援基於 GDB SEGGER  JLINK 以及 GDB OpenOCD的除錯。

5.安裝交叉編譯工具鏈

5.然後就是安裝交叉編譯工具鏈了。目前有好幾種Windows環境下的ARM交叉編譯工具鏈,如 CodeSourcery Lite Edition(被Mentor收了), GNU ARM Tools for Embedded,Yagarto GCC, Linaro GCC, 由於是針對Cortex-M, 採用的都是 arm-none-eabi版本。本人使用

gcc-arm-none-eabi-4_9-2015q1-20150306-win32.exe  (環境變數的配置在最後講)

6.windows 7 下的make工具下載與安裝安裝,環境變數配置

最後,需要安裝make工具,否則後面Eclipse無法配置而導致報錯。

下載的是sed安裝檔案,目前sed安裝後不包含make.exe工具

因此需要下載一個make工具make.exe拷貝到安裝後GnuWin32的bin目錄下,並在環境變數Path中新增bin目錄的路徑


安裝過後,無論是make工具還是GNU編譯器,都是需要配置環境變數,詳情如下

注意,在系統變數中,需要將編譯器的Bin路徑都放進去,注意兩個路徑之間需要用" ; "隔開,

例如,我 的系統變數的路徑是這樣的:C:\Program Files (x86)\GNU Tools ARM Embedded\4.9 2015q3\bin

在eclipse中,還需要對make工具和編譯工具的路徑進行新增,如下


開啟Eclipse,點選NEW->C Project


命名好工程的名字,並且選擇工程型別,工程型別處有各種模板,本次選擇空的工程,選擇“Empty project”,右邊是選擇前邊所安裝的交叉編譯工具,選擇Cross ARM GCC
選擇完成後,點選“NEXT”


一路點選"NEXT"

當安裝好交叉編譯工具後,Eclipse會自動匯入工具在系統中的位置,如下,最後點選FINISH


工程初步建立。

在工程目錄下新建一個【USER】和【startup】資料夾

將韌體庫複製到工程目錄下,STM32的韌體庫,可以在www.stmcu.org 或者ST的官網上均有下載。本人使用V3.5版本的STM32F10x_StdPeriph_Lib_V3.5.0。


本人使用STM32F103ZET6,對複製到工程目錄下的韌體庫檔案操作如下

複製\ stm32\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template目錄下的 main.c,stm32f10x_conf.h,stm32f10x_it.c,stm32f10x_it.h 到【USER】資料夾
複製\stm32\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template\TrueSTUDIO\STM3210E-EVAL下的stm32_flash.ld到工程目錄下(開啟可以看到,這個連結檔案是針對於STM32F103ZET6的,固每種不同型號的STM32 MCU,需要更換此檔案)
複製\stm32\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\TrueSTUDIO下的startup_stm32f10x_hd.s到工程目錄下,並且將字尾.s從小寫更換為大寫.S(因為本次使用STM32F103ZET6大容量MCU,故使用此檔案

刪除工程目錄下的\stm32\STM32F10x_StdPeriph_Lib_V3.5.0的【Project】和【Utilities】資料夾,至此,檔案增刪完成,在Eclipse的工作區中選擇該工程,然後按F5重新整理,檔案會自動匯入工程


此時,還未可以進行編譯,因為工程配置還沒有完成,配置如下
選中工程->右鍵->Properties->
C/C++ Build->Settings


選中CROSS ARM C Compiler->Preprocessor  新增兩個巨集  STM32F10X_HD 和USE_STDPERIPH_DRIVER,表明使用大容量MCU和使用外圍韌體庫

新增標頭檔案路徑


新增連結檔案,選擇從韌體庫複製出來的stm32_flash.ld(開啟該連結檔案,可以看出是針對於STM32F103ZET6的)


點選【Toolchains】選卡,把安裝的交叉編譯工具路徑下的bin資料夾路勁填上


這個時候,來到了一個最關鍵的地方,我坑了1天多,點選Environment->PATH,在這裡,新增GNUWIN32的路徑 C:\Program Files (x86)\GnuWin32\bin(路徑是我自己的),因為工程需要make工具,有的交叉編譯工具會自帶Make工具,但我使用的這個沒有,如果沒有加上,會出現找不到"make.exe"錯誤(上面提到的技能make.exe拷貝到GnuWin32\bin目錄下相關)


完成後對【USER】資料夾下的Main.c進行修改,因為沒有包含任何DEMO檔案,所以需要刪除MAIN.C下呼叫的函式,清理乾淨後,可以進行編譯,出現瞭如下錯誤


經谷歌,尋找歪果仁討教後,ERROR:register may not be the same -- strexb r3,r2,[r3]等錯誤的解決方法如下
開啟工程檔案\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport下的core_cm3.c,找到
 __ASM volatile ("strexb %0, %2, [%1]" : "=r" (result) : "r" (addr), "r" (value) );
 __ASM volatile ("strexh %0, %2, [%1]" : "=r" (result) : "r" (addr), "r" (value) ); 兩行,更改如下

 __ASM volatile ("strexb %0, %2, [%1]" : "=&r" (result) : "r" (addr), "r" (value) );

 __ASM volatile ("strexh %0, %2, [%1]" : "=&r" (result) : "r" (addr), "r" (value) );

修改完成後,儲存!注意,請再選中工程專案,重新整理F5,再一次編譯。重新整理是很重要的。

至此,基於Eclipse的STM32工程建立,完成

(二)配置除錯下載

在Eclipse下想要除錯STM32等微控制器,需要J-LINK或者ST-LINK,相對來說,可能J-LINK的教程會比較多一些,

但手頭上只有ST-LINK,物盡其用,想要在Eclipse下配置除錯工具,請參考一下博文

感謝上面博文的作者。

1.安裝ST-LINK Utility

2.配置ST-LINK V2 工具

以下步驟是在Windows下進行的,Linux請參考【參考資料】

在Eclipse中,RUN->External Tools->External Tools configurations,對Program右鍵,新建選項卡,自行命名,只需更改【Main】和【Commom】選項卡,引數如圖下


3.配置Openocd

如果是WIN7 64bit,請選擇0.7.0版本,0.8.0會有BUG

3-1.解壓到不含中文的路徑(並且不能包含空格字元的路徑中,注意:不能再Program File路徑下)

3-2.在目錄裡openocd-0.7.0\scripts\interface 資料夾下,找到stlink-v2.cfg,並複製到工程目錄下(因為我是使用ST-LINK V2的)

3-3.在目錄裡openocd-0.7.0\scripts\target資料夾下,找到stm32f1x_stlink.cfg,並複製到工程目錄下(因為我是使用stm32f1x系列的,並且是非官方DEMO開發板,官方開發板配置請參考下方【參考資料】的博文)

3-4.跟配置ST-LINK的時候一樣,RUN->External Tools->External Tools configurations,對Program右鍵,新建選項卡,自行命名,只需更改【Main】選項卡,其他選項卡為預設,引數欄必須按圖填寫,因為有先後之分,引數如圖下


4.設定DEBUG 選項

4-1.Run->Debug configurations,新建GDB openocd Debugging選項卡

4-2.【MAIN】選項卡,選擇工程名稱和工程生成的ELF檔案目錄


4-3.【Debug】選項卡配置如下(此為關鍵點)

Openocd SETIP選項下的路徑是openocd-x64-0.7.0.exe的路徑

Openocd Setup選項下的Config option,需要填寫上方兩個.cfg檔案的絕對路徑,變數是無效的,並且注意,填寫是有先後順序之分的,務必按圖上填寫。(兩個路徑之間用空格隔開,因此路徑本身的檔名不能包含空格)

GDB Client SETUP選項下的路徑是arm-none-eabi-gdb.exe的路徑


至此,連上ST-LINK,點選DEBUG,即可進行除錯

5.參考資料