1. 程式人生 > >buntu linux下建立stm32開發環境: GCC安裝以及工程Makefile建立

buntu linux下建立stm32開發環境: GCC安裝以及工程Makefile建立

STM32開發板挺好的,卻不想在window下開發,也不想用那麼佔記憶體的IAR MDK等軟體,所以決定在ubuntu下建立該開發環境,像之前avr linux一樣,找了下資料,國內有人做過,但都沒有很詳盡的教程,所以花了三四天才完成.其實原理很簡單,就是安裝適用與STM32的GCC,以及建立該工程,主要是Makefile加上STM32的官方庫.

     個人原創,轉載請註明原文出處:

     參考:

     博文新地址轉為下面連結,有問題到該地址評論哦:

博主最近在電腦上自建了部落格,以後會更多的用那個了,歡迎關注訪問,裡面也有很多有用資源:

環境:

 ubuntu 13.10

              stm32f103zet6

 一  STM 32 GCC 安裝

        stm32 屬於arm cortex-m系列thumb指令集,所以給arm用的arm-none-eabi就可以了,首先是下載

        下載地址:

               https://launchpad.net/gcc-arm-embedded/+download

        下載其中的gcc-arm-none-eabi-version-linux.tar.bz2

         解壓到你知道的目錄會產生 gcc-arm-none-eabi的資料夾

        把該編譯器新增到你的環境中:

  1. sudo gedit  ~/.bashrc  

       在最後一行新增:
  1. export PATH=$PATH:/your_stm_gcc_dir/gcc-arm-none-eabi-4_8-2013q4/bin  
       因為我之前有新增過樹莓派的編譯器了,所以實際上是這樣的:
  1. export PATH=$PATH:/your_pi_gcc_dir/tools-master/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/bin/:/your_stm_gcc_dir/gcc-arm-none-eabi-4_8-2013q4/bin  

         兩個編譯器環境中間用冒號隔開;

      登出後測試:

  1. arm-none-eabi-gcc -v  
      可以檢視到該編譯器的版本,就表示可以了.

二  工程環境的建立

       新建個工程資料夾,及其目錄
  1. mkdir stm_project  
  2. cd stm_project  
  3. mkdir libs  
  4. mkdir src  
  5. mkdir inc  

     下載,安裝官方庫:

      stm32的暫存器不像51 avr等微控制器,那麼少,自己寫寫庫,背背暫存器就可以了,所以ST公司提供了他們官方的庫,為了避免重複造輪子,就直接採用他們的庫,庫版本為STM32_USB-FS-Device_Lib_V4.0.0,這個庫多了usb支援,下載的話到st官網搜尋stm32f10x就有了.

       下載連結:

       解壓,把解壓好的資料夾複製到剛才新建的libs裡面.

       在工程根目錄下新建Makefile.common檔案,這個為通用makefile

  1. # include Makefile
  2. #This file is included in the general Makefile, the libs Makefile and the src Makefile
  3. #Different optimize settings for library and source files can be realized by using arguments
  4. #Compiler optimize settings:
  5. # -O0 no optimize, reduce compilation time and make debugging produce the expected results (default).
  6. # -O1 optimize, reduce code size and execution time, without much increase of compilation time.
  7. # -O2 optimize, reduce code execution time compared to ‘O1’, increase of compilation time.
  8. # -O3 optimize, turns on all optimizations, further increase of compilation time.
  9. # -Os optimize for size, enables all ‘-O2’ optimizations that do not typically increase code size and other code size optimizations.
  10. #Recommended optimize settings for release version: -O3
  11. #Recommended optimize settings for debug version: -O0
  12. #Valid parameters :
  13. # OptLIB=0 --> optimize library files using the -O0 setting
  14. # OptLIB=1 --> optimize library files using the -O1 setting
  15. # OptLIB=2 --> optimize library files using the -O2 setting
  16. # OptLIB=3 --> optimize library files using the -O3 setting
  17. # OptLIB=s --> optimize library files using the -Os setting
  18. # OptSRC=0 --> optimize source files using the -O0 setting
  19. # OptSRC=1 --> optimize source files using the -O1 setting
  20. # OptSRC=2 --> optimize source files using the -O2 setting
  21. # OptSRC=3 --> optimize source files using the -O3 setting
  22. # OptSRC=s --> optimize source files using the -Os setting
  23. # all --> build all
  24. # libs --> build libs only
  25. # src --> build src only
  26. # clean --> clean project
  27. # tshow --> show optimize settings
  28. #Example:
  29. # make OptLIB=3 OptSRC=0 all tshow
  30. TOP=$(shell readlink -f "$(dir $(lastword $(MAKEFILE_LIST)))")  
  31. PROGRAM=main  
  32. LIBDIR=$(TOP)/libs  
  33. #Adust the following line to the library in use
  34. #=========add by embbnux  根據你的庫不同,調整這個地方的庫目錄地址====================#
  35.  STMLIB=$(LIBDIR)/STM32_USB-FS-Device_Lib_V4.0.0/Libraries  
  36. #=========add by embbnux  根據你的stm32晶片型號容量不同,修改這個地方的TypeOfMCU=======#
  37. #Adjust TypeOfMCU in use, see CMSIS file "stm32f10x.h"#STM32F103RBT (128KB FLASH, 20KB RAM) --> STM32F10X_MD#TypeOfMCU=STM32F10X_MD#STM32F103RET (512KB FLASH, 64KB RAM) --> STM32F10X_HD#STM32F103ZET (512KB FLASH, 64KB RAM) --> STM32F10X_HD
  38. #============================================================================#
  39. TypeOfMCU=STM32F10X_HD  
  40. #============================================================================#
  41. TC=arm-none-eabi  
  42. CC=$(TC)-gcc  
  43. LD=$(TC)-ld -v  
  44. OBJCOPY=$(TC)-objcopy  
  45. AR=$(TC)-ar  
  46. GDB=$(TC)-gdb  
  47. INCLUDE=-I$(TOP)/inc  
  48. INCLUDE+=-I$(STMLIB)/CMSIS/Include  
  49. INCLUDE+=-I$(STMLIB)/CMSIS/Device/ST/STM32F10x/Include  
  50. INCLUDE+=-I$(STMLIB)/CMSIS/Device/ST/STM32F10x/Source/Templates  
  51. INCLUDE+=-I$(STMLIB)/STM32F10x_StdPeriph_Driver/inc  
  52. INCLUDE+=-I$(STMLIB)/STM32_USB-FS-Device_Driver/inc  
  53. COMMONFLAGS=-g -mcpu=cortex-m3 -mthumb  
  54. COMMONFLAGSlib=$(COMMONFLAGS)  
  55. #Commands for general Makefile and src Makefile
  56. ifeq ($(OptSRC),0)  
  57.     COMMONFLAGS+=-O0  
  58.     InfoTextSrc=src (no optimize, -O0)  
  59. else ifeq ($(OptSRC),1)  
  60.     COMMONFLAGS+=-O1  
  61.     InfoTextSrc=src (optimize time+ size+, -O1)  
  62. else ifeq ($(OptSRC),2)  
  63.     COMMONFLAGS+=-O2  
  64.     InfoTextSrc=src (optimize time++ size+, -O2)  
  65. else ifeq ($(OptSRC),s)  
  66.     COMMONFLAGS+=-Os  
  67.     InfoTextSrc=src (optimize size++, -Os)  
  68. else
  69.     COMMONFLAGS+=-O3  
  70.     InfoTextSrc=src (full optimize, -O3)  
  71. endif  
  72. CFLAGS+=$(COMMONFLAGS) -Wall -Werror $(INCLUDE)  
  73. CFLAGS+=-D $(TypeOfMCU)  
  74. CFLAGS+=-D VECT_TAB_FLASH  
  75. #Commands for libs Makefile
  76. ifeq ($(OptLIB),0)  
  77.     COMMONFLAGSlib+=-O0  
  78.     InfoTextLib=libs (no optimize, -O0)  
  79. else ifeq ($(OptLIB),1)  
  80.     COMMONFLAGSlib+=-O1  
  81.     InfoTextLib=libs (optimize time+ size+, -O1)  
  82. else ifeq ($(OptLIB),2)  
  83.     COMMONFLAGSlib+=-O2  
  84.     InfoTextLib=libs (optimize time++ size+, -O2)  
  85. else ifeq ($(OptLIB),s)  
  86.     COMMONFLAGSlib+=-Os  
  87.     InfoTextLib=libs (optimize size++, -Os)  
  88. else
  89.     COMMONFLAGSlib+=-O3  
  90.     InfoTextLib=libs (full optimize, -O3)  
  91. endif  
  92. CFLAGSlib+=$(COMMONFLAGSlib) -Wall -Werror $(INCLUDE)  
  93. CFLAGSlib+=-D $(TypeOfMCU)  
  94. CFLAGSlib+=-D VECT_TAB_FLASH  

      編譯庫檔案:

      進入libs資料夾,新建Makefile:

  1. # libs Makefile
  2. include ../Makefile.common  
  3. LIBS+=libstm32.a  
  4. CFLAGSlib+=-c  
  5. all: libs  
  6. libs: $(LIBS)  
  7. libstm32.a:  
  8.     @echo -n "Building [email protected] ..."
  9.     @cd $(STMLIB)/CMSIS/Device/ST/STM32F10x/Source/Templates && \  
  10.         $(CC) $(CFLAGSlib) \  
  11.             system_stm32f10x.c  
  12.     @cd $(STMLIB)/STM32F10x_StdPeriph_Driver/src && \  
  13.         $(CC) $(CFLAGSlib) \  
  14.             -D"assert_param(expr)=((void)0)" \  
  15.             -I../../CMSIS/Include \  
  16.             -I../../CMSIS/Device/ST/STM32F10x/Include \  
  17.             -I../inc \  
  18.             *.c  
  19. #   @cd $(STMLIB)/STM32_USB-FS-Device_Driver/src && \
  20. #   $(CC) $(CFLAGSlib) \
  21. #   -D"assert_param(expr)=((void)0)" \
  22. #   -I../../CMSIS/Include \
  23. 相關推薦

    buntu linux建立stm32開發環境: GCC安裝以及工程Makefile建立

    STM32開發板挺好的,卻不想在window下開發,也不想用那麼佔記憶體的IAR MDK等軟體,所以決定在ubuntu下建立該開發環境,像之前avr linux一樣,找了下資料,國內有人做過,但都沒有很詳盡的教程,所以花了三四天才完成.其實原理很簡單,就是安裝適用與STM32

    ubuntu linux建立stm32開發環境: GCC安裝以及工程Makefile建立

             STM32開發板挺好的,卻不想在window下開發,也不想用那麼佔記憶體的IAR MDK等軟體,所以決定在ubuntu下建立該開發環境,像之前avr linux一樣,找了下資料,國內有人做過,但都沒有很詳盡的教程,所以花了三四天才完成.其實原理很簡單,就是

    linux上搭建stm32開發環境 vscode+gcc+stm32cubeMX 和 vscode+platformIO

    一、軟體清單:VSCode:應用商店安裝 或sudo add-apt-repository ppa:ubuntu-desktop/ubuntu-make sudo apt-get update sudo

    Linux搭建STM8開發環境

    post get des apt b- blog div 復制 bsp 使用SDCC+STM8Flash+STLink搭建Linux開發STM8開發環境,對應的MCS51,LPC之類的也可以使用SDCC 1、安裝SDCC$ sudo apt-get install sdcc

    Linux搭建PHP開發環境,Php-Fpm程序管理。

    目前PHP專案開發幾種比較流行的架構搭建中,LNMP在效能方面是最好的,正因為如此,使得LNMP架構逐漸流行起來,今天,前面提到了Nginx部署,由於專案實際環境的需要,今天就在說一下怎麼部署PHP。 環境 CentOS 6.3 PHP 5.6 安裝步驟 1. 下載並安裝P

    Linux搭建Python開發環境部署

    1.安裝作業系統 系統版本CentOS release 6.5 (Final)mini安裝 關閉SELinux 關閉防火牆功能 關閉SSH的UseDNS功能 配置IP地址 配置DNS伺服器 配置NTP伺服器 配置主機名   2. Pyenv安裝方式 2.1

    Linux配置node開發環境

    Linux下配置node開發環境 由於我們一般都會將服務部署到linux上,所以我個人覺得,使用windows學習node可能會不太好。慢慢的我也將自己的所有開發環境轉移到node環境下,今天這篇文章記錄了一下我在linux下的配置過程。 為什麼不用軟體庫中的node 我們都

    Linux 配置OpenGL開發環境

    Linux 下配置OpenGL開發環境 sudo apt-get install build-essential sudo apt-get install libgl1-mesa-dev sudo apt-get install libglu1-mesa-dev su

    linux配置java開發環境

      今天,看見某機構的開發java的環境是linux,然後一時興起,就下載了一個ubuntu虛擬機器進行配置 =================================================================================

    linux搭建flask開發環境

    安裝虛擬環境 $ sudo pip install virtualenv $ sudo pip install virtualenvwrapper 建立虛擬環境(須在聯網狀態下) $ mkvirtualenv Flask_py 安裝完虛擬環境後,

    C++14系列(1):LinuxC++14開發環境配置

    g++安裝 當前Ubuntu的LTS版本為14.04,直接在apt-get命令安裝的g++到不了5.0版本,不能獲得全部的c++14的支援,所以必須安裝5.0以上版本的g++,這裡的方法如下: sudo add-apt-repository ppa:ub

    LinuxCUDA整合開發環境-NSight Eclipse Edition

    從CUDA5.0開始,CUDA ToolKit和CUDA SDK整合到了一個安裝包內,同時安裝包內還集成了Nividia開發的基於Eclipse的CUDA整合開發工具NSight Eclipse Edition,給CUDA開發者提供了一個很好的開發工具。 之前嘗試過不少Li

    Linux搭建PHP開發環境(Apache2.4.12+PHP5.6.7+MySQL5.6)

          樓主畢業近幾年都是從事Java開發,但前陣子公司外別的公司合作,並接了個專案,該專案的前期是PHP開發的,後期將逐漸轉為Java來開發,但期間的維護,介面的修改都得繼續用PHP,沒辦法啊,由於一下子找不到PHP開發人員,只能我來頂上了。       寫程式碼到不

    CentOS搭建STM32開發環境VSCode+jlink+makefile+cubeMX

    目標: 在CENTOS7下可以完成對STM32的軟體開發及除錯工具: 程式碼編輯器:尋找程式碼編輯器的時候走了很多彎路,使用過CODE::BLOCK 、GEANY等很多IDE,最後使用VSCODE,優點是VSCODE 有我需要的所有功能,有程式碼補全,程式碼

    Linux 搭建 php 開發環境完整教程

    一、 安裝 apache 1. 配置(apache 安裝配置) 在安裝前記得切換到 root ,否則會因許可權問題安裝失敗 ./configure --prefix=/usr/local/http2 \ --enable-modules=all \ --enable-mods-shared=all \ --

    VMware安裝Ubuntu教程,Linux搭建Android開發環境

    VMware安裝Ubuntu 1. 安裝VMware 2. VMware安裝Ubuntu 安裝步驟: 1 ) 新建虛擬機器,選擇典型配置,安裝映象選擇下載好的iso檔案,作業系統選擇Linux Ubuntu,硬碟建議設定25G以上,接著啟

    linux(centos 7) 環境 mongodb 安裝,配置,建立使用者密碼

    1.下載安裝包 wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.2.9.tgz下載完成後解壓縮壓縮包 tar zxf mongodb-linux-x86_64-rhel62-3.2.9.tgz  2. 安裝準備 將mon

    ubuntu linux 關於svn的環境控制安裝

    我是在windows環境下安裝的linux虛擬機器一、安裝ubuntu,網上教程很多,完了之後安裝VMware Tools(這個主要是用來做windos與linux之間的檔案共享和複製貼上);二、安裝svn服務端1、命令:sudo apt-get install subver

    win10 Laravel 虛擬開發環境 Homestead 安裝教程

    一、使用Homestead的理由         1、Homestead 是一個官方預封裝的 Vagrant Box,內建 Ubuntu 16.04、Git、PHP 7.1、Nginx、MySQL、Composer、Redis、Memcached等一系列軟體,無需在本地安裝

    windows和linux Python2,Python3 的環境安裝

    2.6 下載 nload fig 重裝 詳細 頭部 vat usr 目錄 windows和linux下 Python2,Python3 的環境及安裝 window下安裝 一. 手動安裝 二. pip安裝 linux下 安裝 更新Python 筆者有話 windows