Eclipse搭建stm32+jlink開發環境全攻略
初級篇
前言:
爲什麼需要這樣的開發環境?
-
免費
-
跨平臺
-
自由度高
-
Eclipse代碼提示功能強大,MDK弱爆了
注:本人原創,轉載註明作者——by**秋之前**
email:[email protected]
一、工具:
- jre或者jdk
- eclipse+CDT
- GNU eclipse ARM插件
- GNU ARM Toolchain
- Jlink驅動
- st官方標準庫
- st官方hal庫
安裝提醒:
-
由於並不需要用到java,所以只需用安裝jre即可,不用安裝jdk
-
安裝GNU ARM Toolchain時勾選將目錄加入環境變量的選項,否則請自己添加bin目錄到環境變量中
-
現狀Jlink驅動和GNU ARM Toolchain,然後再裝Eclipse,接着裝CDT,在接着裝GNU eclipse
ARM插件。
-
插件安裝的時候,取消掉需要聯網的地址。否則安裝比較慢。
二、新建工程:
打開eclipse,選擇工作目錄,點擊File->New->C++ project
然後我們會發現下圖的界面,在這個界面中有STM32等工程的現成選項,右側還有該工程支持的編譯鏈,如Cross Ar
m gcc,根據這個我們就可以判斷前面的軟件安裝成功了。此時我們可以直接點擊新建一個基於STM32模版的工程,
也可以創建一個空的工程,然後自己配置工程結構,就像我們使用MDK一樣。此處我們以創建空工程爲例子。
點擊Empty project,輸入工程名和路徑,Next。
選擇編譯鏈,由於我們安裝的是GNU ARM的工具鏈,所以選擇對應的,然後指定工具鏈的路徑。
創建好了之後,我們就可以看到下圖的效果了,可以看到,這個工程完完全全是一個空的。現在我們向這個工程中添
加文件,
就像我們之前在MDK環境下配置模版一樣,先創建四個文件夾
然後從官方庫文件中拷貝對應文件到該工程對應文件夾下。
需要注意的是,官方庫文件中有一些文件是與編譯環境相關的,官方提供的環境有
我們通過比較後發現,TrueSTUDIO和eclipse環境的工程文件格式是一樣的,所以確定選用TrueSTDUIO工程的文件
首先是啓動文件
然後還有鏈接文件
這兩個文件根據對應芯片容量決定。
文件拷貝完了後,將鼠標點到工程框中右鍵刷新,我們就可以看到工程結構更新了,如下圖
正如在MDK環境下開發我們需要配置define項,include包含項和debug項一樣,在eclipse也要做這些工作。
三、工程配置:
點擊在工程瀏覽器中選中該工程,然後點擊project->properties選擇項,
就會彈出如下對話框,在這個對話框中主要在setting中配置,首先看看Tool setting,該選項有四塊,即彙編(Assembl
er)選項,C編譯器選型,C++編譯器選項,鏈接選項,每一塊中preprocessor用來設置預編譯的,即設置define。incl
udes用來設置路徑包含的,所以啓動文件等彙編文件要加到第一個選項塊中,ld格式的鏈接文件要加到第四個塊中
上面設置好了後,由於穿件工程時我們已經設置了編譯器,所以這個地方應該是正確的,如下圖
好了點擊應用,OK。
四、開始編譯:
然而立馬就出現下面的問題,找不到make文件,通過查資料我們可以知道GNU Toolchain中是不自帶make工具的,
但是make工具其實都是一樣的,所以我們能否使用Eclipse自帶的make工具呢?
同樣打開工程設置,點擊Tool Chain Editor,選擇Builder工具爲CDT內部builder,
然後重新編譯,可以看到編譯進度了
然而又出錯了,這個問題的大致意思是這兩個指令的調用格式不正確,但是由於這兩條指令是彙編指令,他的調用格
式是由編譯器決定的,我們怎麼知道他的正確的調用格式呢?我們先通過搜索找到這條指令調用的地方。
既然這條彙編指令的格式是由編譯器決定的,那麼我們怎麼知道這條指令正確的格式呢?還記得之前創建工程時有現
成的工程模版嗎?我們可以創建一個現成的工程模版,然後編譯發現這個現成的模版編譯是沒有問題。然後對比兩個
工程中的這條指令格式,我們發現了一個驚人的差異,如下圖:
好了,問題找到了,在這兩條指令的=r中間加上一個&符號即可。兩條指令中都要加。然後再編譯
哈哈,編譯通過,生成了可執行文件elf和hex,然而我們將編譯信息拉到右邊後可以發現,編譯沒有問題,但是在鏈
接時出現了問題,即找不到Reset_Handler。怎麼會找不到Reset_Handler呢,我們都知道Reset_Handler是在啓動文
件中定義了的,沒有找到除非啓動文件沒有被編譯。
於是我們來看看編譯輸出的文件夾,即debug文件夾,發現只有3個文件夾有輸出,啓動文件確實沒有輸出,爲什麼
呢?初步懷疑是Eclipse沒有識別啓動文件。
我們打開窗體屬性看看,即window->preferences:
然後找到File Type,我們可以看到,軟件能夠識別的彙編文件拓展爲*.S是大寫的S,而我們工程中的啓動文件是小寫的
s,所以沒有識別出來,我嘗試將小寫s格式添加進去發現添加失敗,提示跟大寫S重複,好吧,我們直接將啓動文件
改成大寫S吧。
![][31]
然後再編譯,OK編譯成功,也沒有鏈接的錯誤。大功搞成
![][32]
![][33]
五、開始調試:
編譯完成後,我們就要進行下載和調試了。首先進行調試的配置。
Run->Debug Configurations。
![][34]
我們可以看到GDB SEGGER Jlink Debugging選項下面是空的,雙擊這個選項
![][35]
然後就新建了一個選項卡,設置debug的名稱,調試的工程和源文件
![][36]
![][37]
切換到Debugger選項卡,此處纔是關鍵,我們都知道,調試實際就是我們的調試窗口與Jlink通訊,然後Jlink與開發板
通訊,Jlink與開發板通訊是由Jlink GDBServerCL完成的,所以我們的調試窗口要與Jlink通訊,起始只需要與Jlink G
DBServerCL通訊即可,那麼是什麼來代表這個調試窗口呢,那自然就是GNU工具鏈的GDB調試器了,所以我們整體
的調試思路就清晰了,就是GNU GDB與Jlink GDBServerCL通訊,前者扮演客戶端的角色,後者扮演服務器的角色。
好了,再來看看這個配置窗口,服務器設置自然選擇Jlink GDBServerCL,而客戶端自然選擇GNU工具鏈中的GDB
了,然後設置芯片型號,鏈接模式,傳輸速度等。
![][38]
爲了保險,取消掉startup中的這連個選項
![][39]
好了,點擊Debug開始調試,我們就可以看到我們的軟件進入了調試模式,並且停留在了main函數的第一個有效行上
面。
![][40]
點擊紅色方塊結束調試,Jlink的GDB會自動關閉,然後點擊右側的C/C++選項卡即可回到工程的編輯視圖了。
OK,初級篇教程到此結束,在初級篇中,我們可以開發一些並不涉及到C標準庫函數的東西。
注:本人github中有工程模版
原文地址:http://m.blog.csdn.net/qiuzhiqian1990/article/details/55189920