1. 程式人生 > >[轉]Linux下STM32開發環境的搭建

[轉]Linux下STM32開發環境的搭建

目錄

一、概述

  1.目的

一、概述

1、目的

  MDK+Jlink的開發環境集編譯、下載、除錯為一體,配合上友好的操作介面,給使用者者提供了很Happy的開發工具。但是,曾經玩過Linux系統的人總想嘗試對開發環境的一次搬移,轉戰到Linux下看有什麼事情發生。

  在Linux下,搭建STM32的開發環境是一種具有挑戰性的任務,從中我們能學到如何創造一個整合開發環境,或者說我們知道整合開發環境的構成元素。不得不提出“Eclipse”絕對是一個好東西,它就像一個開發環境框架,在這個框架中我們新增STM32專用的編譯器、除錯工具,就構造出一個STM32整合開發環境。

  開源給電子行業工作者提供了一種向技術更深處進發的機遇,開源在技術壟斷的商業模式中開闢了一塊屬於世界的自由的知識財富。

2、開發環境描述

硬體開發板:野火STM32開發板

Cortex-M3型號:STM32F103VET6

下載器與除錯介面:Jlink + JTAG

作業系統:虛擬機器VMware6.5 + Ubuntu12.0.4

整合開發環境平臺:eclipse IDE for C/C++ developers

交叉編譯鏈:arm-none-eabi-gcc

除錯伺服器:JLink GDB Server

3、Eclipse構建的STM32整合開發環境結構

4、GDB / GDB Server 除錯模型

  The GNU Project Debugger (GDB) is a freely available debugger, distributed under the terms of the GPL. It connects to an em ulator via a TCP/IP connection. It can con-nect to every emulator for which a GDB Server software is available.

  GDB Server is a remote server for GDB. When you run GDB in the GDB source direc-tory, it will read a .gdb file. The GDB .gdb file contains default setting informationand additional monitor commands. GDB and GDB Server communicate via a TCP/IP connection, using the standard GDB remote serial protocol. The GDB Server trans-lates the GDB monitor commands into J-Link commands.

二、搭建步驟

1、安裝eclipse IDE for C/C++ developers

2、安裝交叉編譯鏈arm-none-eabi-gcc

3、安裝JLink驅動

4、安裝GNU ARM Eclipse外掛包

5、新建一個LED_Test工程並配置、編譯

6、安裝GDB除錯外掛--C/C++ GDB HardWare Debugging

7、設定Eclipse除錯環境並除錯

說明:

  本文需要用到的Eclipse外掛的下載地址不能確保讀者從該網址上就能找到可用的資源,因為Eclipse的外掛下載地址會經常更新,而且更改了下載地址。所以如果出現找不到資源的情況,需要讀者自己從Google上搜索出當前Eclipse提供的可用的資源。

三、詳細的搭建過程

1、安裝eclipse IDE for C/C++ developers

  參考ubuntu安裝eclipse IDE for C/C++ developers,安裝到這一步就可以像VC6.0一樣進行C/C++的開發,但是編譯的程式碼只能在X86平臺上執行,不支援ARM。

  為了能進行交叉編譯,我們需要安裝交叉編譯鏈arm-none-eabi-gcc,但是次編譯鏈不屬於Eclipse的一部分,也不是Eclipse的可安裝外掛。Eclipse只是來呼叫交叉編譯鏈,再呼叫之前還需要安裝“GNU ARM Eclipse外掛”,有了這個外掛便可以呼叫arm-none-eabi-gcc來編譯我們的源程式。倘若沒有安裝GNU ARM Eclipse外掛,開啟工程的屬性,情況是這樣的:

  僅僅安裝了“eclipse IDE for C/C++ developers”,只能進行X86平臺上的程式除錯,卻不能進行ARM平臺的硬體除錯。為了能進行硬體除錯,我們需要安裝交叉編譯鏈arm-none-eabi-gcc中的工具arm-none-eabi-gdb,同樣此工具不屬於Eclipse的一部分,也不是Eclipse的可安裝外掛。Eclipse只是來呼叫此偵錯程式,再呼叫之前還需要安裝“GDB除錯外掛”,有了這個外掛便可以呼叫arm-none-eabi-gdb來硬體除錯我們的源程式。倘若沒有安裝“GDB除錯外掛”,開啟“Debug Configurations”,情況是這樣的:

僅僅安裝了“eclipse IDE for C/C++ developers”,是可以呼叫外部的硬體除錯伺服器--JLinkGDBServer,只是這個時候由於無法連線到GDB除錯客戶端而無法進行除錯。

2、安裝交叉編譯鏈arm-none-eabi-gcc

2> 解壓安裝 tar  

3> 修改/etc/profile

4> 使/etc/profile的修改生效

5> 測試

#arm-none-eabi-gcc -v

  成功的介面如下

3、安裝JLink驅動

  Jlink驅動包含四個工具:JLinkExe、JLinkGDBServer、JLinkRemoteServer、JLinkSWOViewer。  

注意選擇安裝包:“Software and documentation pack for Linux V4.86a, DEB Installer 32-bit version”

2> 利用dpkg -i命令進行安裝,安裝位置在/usr/bin目錄下

3> 測試版本

  首先將硬體Jlink連線在電腦上,再將Jlink從物理PC機轉移對映到虛擬機器下,輸入測試命令

#JLinkExe

  成功的介面如下

4> 下載測試

命令序列

① h   --停止程式的執行

②  exec device=STM32F103ZE   --選擇晶片型號

  這裡選擇的是STM32F103ZE,而不是STM32F103VET6,原因是由於此版本的JLink驅動不支援STM32F103VET6,所以用一個與之接近的型號代替。

③ loadbin Led_Test.bin 0x8000000   --下載

4、安裝GNU ARM Eclipse外掛包

  此外掛包包含了6個外掛,可以手動下載安裝,不過這種方法只能安裝其中的4個外掛;如果採用自動下載安裝則可以完整的安裝所有的外掛。

方法一:手動下載安裝

  外掛名:ilg.gnuarmeclipse.repository-2.2.2-201404240550.zip

2> 拷貝到Linux的某一目錄下,假設為/source

3> 安裝該外掛 

  開啟Eclipse-->help-->Install New Software-->Add-->Archive-->選擇該外掛-->選中“√”-->一路Next-->等待

方法二:自動下載安裝

The recommended way to install these plug-ins is to use the Eclipse standard install/update mechanism: In the Eclipse menu: Help → Install New Software…

  • in the Install window, click the Add… button (on future updates, just select the URL in theWork with: combo)
  • fill in Name: with GNU ARM Eclipse Plug-ins
  • fill in Location: with http://gnuarmeclipse.sourceforge.net/updates
  • click the OK button
  • normally the main window should list a group named CDT GNU Cross Development Tools; expand it
  • (in case the main window will list There are no categorized items, you are probably using a very old version; disable the Group items by category option)
  • select all the plug-ins (the one marked End of life is needed only for compatibility with previous version, normally can be safely skipped)
  • click the Next button and follow the usual installation procedure

Once you define the update site URL, further updates are greatly simplified (Help → Check For Updates).                            摘自:Plug-ins install

☆ 測試

測試一:Eclipse-->help-->Install New Software-->already installed檢視已經安裝的外掛:

測試二:此外掛安裝成功後,在新建C工程的時候,介面也發生了變化

5、新建一個LED_Test工程並配置、編譯

1> 新建一個工程

  File-->Project-->C Project-->Project name-->Cross ARM GCC-->Tools chain path-->Finsh

  此時在工作目錄下(筆者的為/root/workspace)就多了一個子目錄LED_Test

2> 將原始碼拷貝到該目錄下

  把曾經在MDK做LED實驗的原始碼拷貝到Linux系統中,放進/root/workspace/LED_Test目錄下

3> 新增原始碼到工程中

  在工程瀏覽器(Project Explorer)中,點選“F5”重新整理,就可以新增所有的原始碼目錄和其中的檔案。

4> 更改需要的檔案

① 啟動檔案

  另外,注意將TureSTUDIO/startup_stm32f10x_hd.s 的字尾"s"改成大寫的"S",原因是由於編譯器對應S的檔案會先進行預處理操作然後是彙編操作,而s的只進行彙編操作,詳細原因參考gcc編譯 .s檔案和.S檔案有什麼區別

② 連線指令碼

③ 其他檔案與在MDK上的需要檔案類似,把需要的檔案保留,不需要的檔案從工程中移除

5> 開始配置工程

  在工程瀏覽器中選中工程,右鍵單擊選擇Properties,再選擇C/C++ Build-->Settings,跳出如下介面

6> 配置彙編器Cross ARM GNU Assembler

  主要是新增預處理巨集

7> 配置編譯器Cross ARM C Compiler

① 新增預處理巨集

② 新增標頭檔案搜尋目錄

  • /root/workspace/LED_Test/STM32F10x_StdPeriph_Lib_V3.5.0/Libraries/CMSIS/CM3/CoreSupport
  • /root/workspace/LED_Test/STM32F10x_StdPeriph_Lib_V3.5.0/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x
  • /root/workspace/LED_Test/STM32F10x_StdPeriph_Lib_V3.5.0/Libraries/STM32F10x_StdPeriph_Driver/inc
  • /root/workspace/LED_Test/STM32F10x_StdPeriph_Lib_V3.5.0/Project/STM32F10x_StdPeriph_Template
  • /root/workspace/LED_Test/User

8> 配置聯結器 Cross ARM C Linker

  主要是選擇連線指令碼檔案

  • /root/workspace/LED_Test/STM32F10x_StdPeriph_Lib_V3.5.0/Project/STM32F10x_StdPeriph_Template/TrueSTUDIO/STM3210E-EVAL/stm32_flash.ld

9> 配置生成的映象檔案 Cross ARM GNU Creat Flash Image

  選擇生成二進位制的映象檔案

10> 編譯

  Project-> Build Project

  在/root/workspace/LED_Test/Debug目錄中就可以看到生成的目標檔案

四、使用C/C++ GDB HardWare Debugging進行硬體除錯

1、安裝GDB除錯外掛--C/C++ GDB HardWare Debugging

1> 安裝

  此種方法是Eclipse自動在使用者提供的網路地址上進行搜尋,然後下載安裝,所以確保虛擬機器能上網。

2> 驗證  

  成功以後,就可以在Run-->Debug Configurations中看到如下介面

  需要說明的是倘若Run選單下沒有找到“Debug Configurations”選項,那是由於之前工程處於編譯環境,還沒有切換到除錯環境,只有切換到除錯環境才能在Run選單下找到該選項。切換方法是:

2、設定Eclipse除錯環境並除錯

1> 配置Eclipse除錯選項

① Debugger

  Run-->Debug Configurations-->GDB Hardware Debugging -->Debugger

② Startup

  在Initialization Commands中輸入檢測引數

複製程式碼
    monitor flash device = STM32F103ZE
    monitor flash download = 1
    monitor flash breakpoints = 1
    monitor clrbp
    monitor endian little
    monitor speed 5
    monitor reset
    monitor sleep 100
    monitor speed auto
    monitor writeu32 0xE000ED08 = 0x00000000
複製程式碼

  再在Run Commands中輸入命令

monitor reg r13 = (0x00000000)
monitor reg pc = (0x00000004)
break ResetHandler
break main
continue

2> 配置Eclipse除錯選項

  Run-->External Toos-->External Toos Configurations-->New _configuration

3> 除錯

  Run -->Debug

3、 另一種除錯的方法

1>  配置

  配置還是步驟7中的1>和2>

2> 啟動JLinkGDBServer

  在終端上啟動JLinkGDBServer

3> GDB除錯

  Run -->Debug

  如果連線成功,此時在終端上打印出如下介面

五、使用arm-none-eabi-gdb直接進行硬體除錯

1、安裝Jlink驅動 

2、安裝交叉編譯鏈arm-none-eabi-gcc

3、編譯工程以生成elf檔案 

4、在當前使用者目錄下建立.gdbinit檔案

  筆者的當前使用者是root,所以在root目錄下建立.gdbinit初始化檔案

#gedit ~/.gdbinit 

  內容為:

set auto-load safe-path /

5、在工程資料夾下的Debug目錄中建立.gdbinit檔案

  在工程的Debug目錄下建立.gdbinit檔案,內容為:

複製程式碼
target remote :2331
set mem inaccessible-by-default off
monitor speed auto
monitor endian little
monitor reset
monitor flash device = STM32F103ZE
monitor flash breakpoints = 1
monitor flash download = 1
load
monitor reg sp = (0x08000000)
monitor reg pc = (0x08000004)
break ResetHandler
break main
continue
複製程式碼

  需要說明的是:由於當前版本的Jlink驅動不支援STM32F103VET6,所以選擇STM32F103ZE來代替。

6、啟動JLinkGDBServer

  開啟一個終端輸入命令

[email protected]:~# JLinkGDBServer

7、啟動除錯

  再開啟一個終端,在工程的Debug目錄下輸入命令:

[email protected]:~/workspace/LED_Test/Debug# arm-none-eabi-gdb LED_Test.elf 

  除錯介面如下