日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

buntu linux下建立stm32开发环境: GCC安装以及工程Makefile建立

發布時間:2025/4/5 linux 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 buntu linux下建立stm32开发环境: GCC安装以及工程Makefile建立 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

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

??????? http://blog.csdn.net/embbnux/article/details/17616809

???? 參考:

???????????How-to manual? Installing a toolchain for Cortex-M3/STM32 on Ubuntu?? by Peter Seng

? ? ?博文新地址轉為下面鏈接,有問題到該地址評論哦:

? ? ? ? ? ?https://www.embbnux.com/2014/02/01/linux_stm32_gcc_makefile/

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

? ? ? ? ??

? ? ????http://www.embbnux.com/

? ?? ?

環境:

??????????????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的文件夾

??????? 把該編譯器添加到你的環境中:

???????

[plain]?view plain?copy
  • sudo?gedit??~/.bashrc??

  • ?????? 在最后一行添加:

    [plain]?view plain?copy
  • export?PATH=$PATH:/your_stm_gcc_dir/gcc-arm-none-eabi-4_8-2013q4/bin??
  • ?????? 因為我之前有添加過樹莓派的編譯器了,所以實際上是這樣的:

    [plain]?view plain?copy
  • 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??
  • ???????? 兩個編譯器環境中間用冒號隔開;

    ????? 注銷后測試:

    [plain]?view plain?copy
  • arm-none-eabi-gcc?-v??
  • ????? 可以查看到該編譯器的版本,就表示可以了.


    二? 工程環境的建立

    ?????? 新建個工程文件夾,及其目錄 [plain]?view plain?copy
  • mkdir?stm_project??
  • cd?stm_project??
  • mkdir?libs??
  • mkdir?src??
  • mkdir?inc??

  • ?????下載,安裝官方庫:

    ????? stm32的寄存器不像51 avr等單片機,那么少,自己寫寫庫,背背寄存器就可以了,所以ST公司提供了他們官方的庫,為了避免重復造輪子,就直接采用他們的庫,庫版本為STM32_USB-FS-Device_Lib_V4.0.0,這個庫多了usb支持,下載的話到st官網搜索stm32f10x就有了.

    ??? ?? 下載鏈接:

    ? ? ? ? ? ???stsw-stm32121.zip?

    ?????? 解壓,把解壓好的文件夾復制到剛才新建的libs里面.

    ???? ? 在工程根目錄下新建Makefile.common文件,這個為通用makefile

    [cpp]?view plain?copy
  • #?include?Makefile??
  • ??
  • #This?file?is?included?in?the?general?Makefile,?the?libs?Makefile?and?the?src?Makefile??
  • #Different?optimize?settings?for?library?and?source?files?can?be?realized?by?using?arguments??
  • #Compiler?optimize?settings:??
  • #?-O0?no?optimize,?reduce?compilation?time?and?make?debugging?produce?the?expected?results?(default).??
  • #?-O1?optimize,?reduce?code?size?and?execution?time,?without?much?increase?of?compilation?time.??
  • #?-O2?optimize,?reduce?code?execution?time?compared?to?‘O1’,?increase?of?compilation?time.??
  • #?-O3?optimize,?turns?on?all?optimizations,?further?increase?of?compilation?time.??
  • #?-Os?optimize?for?size,?enables?all?‘-O2’?optimizations?that?do?not?typically?increase?code?size?and?other?code?size?optimizations.??
  • #Recommended?optimize?settings?for?release?version:?-O3??
  • #Recommended?optimize?settings?for?debug?version:?-O0??
  • #Valid?parameters?:??
  • #?OptLIB=0?-->?optimize?library?files?using?the?-O0?setting??
  • #?OptLIB=1?-->?optimize?library?files?using?the?-O1?setting??
  • #?OptLIB=2?-->?optimize?library?files?using?the?-O2?setting??
  • #?OptLIB=3?-->?optimize?library?files?using?the?-O3?setting??
  • #?OptLIB=s?-->?optimize?library?files?using?the?-Os?setting??
  • #?OptSRC=0?-->?optimize?source?files?using?the?-O0?setting??
  • #?OptSRC=1?-->?optimize?source?files?using?the?-O1?setting??
  • #?OptSRC=2?-->?optimize?source?files?using?the?-O2?setting??
  • #?OptSRC=3?-->?optimize?source?files?using?the?-O3?setting??
  • #?OptSRC=s?-->?optimize?source?files?using?the?-Os?setting??
  • #?all?-->?build?all??
  • #?libs?-->?build?libs?only??
  • #?src?-->?build?src?only??
  • #?clean?-->?clean?project??
  • #?tshow?-->?show?optimize?settings??
  • #Example:??
  • #?make?OptLIB=3?OptSRC=0?all?tshow??
  • ??
  • TOP=$(shell?readlink?-f?"$(dir?$(lastword?$(MAKEFILE_LIST)))")??
  • PROGRAM=main??
  • LIBDIR=$(TOP)/libs??
  • ??
  • #Adust?the?following?line?to?the?library?in?use??
  • #=========add?by?embbnux??根據你的庫不同,調整這個地方的庫目錄地址====================#??
  • ?STMLIB=$(LIBDIR)/STM32_USB-FS-Device_Lib_V4.0.0/Libraries??
  • #=========add?by?embbnux??根據你的stm32芯片型號容量不同,修改這個地方的TypeOfMCU=======#??
  • #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??
  • #============================================================================#??
  • TypeOfMCU=STM32F10X_HD??
  • #============================================================================#??
  • TC=arm-none-eabi??
  • CC=$(TC)-gcc??
  • LD=$(TC)-ld?-v??
  • OBJCOPY=$(TC)-objcopy??
  • AR=$(TC)-ar??
  • GDB=$(TC)-gdb??
  • INCLUDE=-I$(TOP)/inc??
  • INCLUDE+=-I$(STMLIB)/CMSIS/Include??
  • INCLUDE+=-I$(STMLIB)/CMSIS/Device/ST/STM32F10x/Include??
  • INCLUDE+=-I$(STMLIB)/CMSIS/Device/ST/STM32F10x/Source/Templates??
  • INCLUDE+=-I$(STMLIB)/STM32F10x_StdPeriph_Driver/inc??
  • INCLUDE+=-I$(STMLIB)/STM32_USB-FS-Device_Driver/inc??
  • COMMONFLAGS=-g?-mcpu=cortex-m3?-mthumb??
  • COMMONFLAGSlib=$(COMMONFLAGS)??
  • #Commands?for?general?Makefile?and?src?Makefile??
  • ifeq?($(OptSRC),0)??
  • ????COMMONFLAGS+=-O0??
  • ????InfoTextSrc=src?(no?optimize,?-O0)??
  • else?ifeq?($(OptSRC),1)??
  • ????COMMONFLAGS+=-O1??
  • ????InfoTextSrc=src?(optimize?time+?size+,?-O1)??
  • else?ifeq?($(OptSRC),2)??
  • ????COMMONFLAGS+=-O2??
  • ????InfoTextSrc=src?(optimize?time++?size+,?-O2)??
  • else?ifeq?($(OptSRC),s)??
  • ????COMMONFLAGS+=-Os??
  • ????InfoTextSrc=src?(optimize?size++,?-Os)??
  • else??
  • ????COMMONFLAGS+=-O3??
  • ????InfoTextSrc=src?(full?optimize,?-O3)??
  • endif??
  • CFLAGS+=$(COMMONFLAGS)?-Wall?-Werror?$(INCLUDE)??
  • CFLAGS+=-D?$(TypeOfMCU)??
  • CFLAGS+=-D?VECT_TAB_FLASH??
  • ??
  • #Commands?for?libs?Makefile??
  • ifeq?($(OptLIB),0)??
  • ????COMMONFLAGSlib+=-O0??
  • ????InfoTextLib=libs?(no?optimize,?-O0)??
  • else?ifeq?($(OptLIB),1)??
  • ????COMMONFLAGSlib+=-O1??
  • ????InfoTextLib=libs?(optimize?time+?size+,?-O1)??
  • else?ifeq?($(OptLIB),2)??
  • ????COMMONFLAGSlib+=-O2??
  • ????InfoTextLib=libs?(optimize?time++?size+,?-O2)??
  • else?ifeq?($(OptLIB),s)??
  • ????COMMONFLAGSlib+=-Os??
  • ????InfoTextLib=libs?(optimize?size++,?-Os)??
  • else??
  • ????COMMONFLAGSlib+=-O3??
  • ????InfoTextLib=libs?(full?optimize,?-O3)??
  • endif??
  • CFLAGSlib+=$(COMMONFLAGSlib)?-Wall?-Werror?$(INCLUDE)??
  • CFLAGSlib+=-D?$(TypeOfMCU)??
  • CFLAGSlib+=-D?VECT_TAB_FLASH??

  • ??????編譯庫文件:

    ????? 進入libs文件夾,新建Makefile:

    ????????

    [cpp]?view plain?copy
  • #?libs?Makefile??
  • include?../Makefile.common??
  • LIBS+=libstm32.a??
  • CFLAGSlib+=-c??
  • ??
  • all:?libs??
  • ??
  • libs:?$(LIBS)??
  • ??
  • libstm32.a:??
  • ????@echo?-n?"Building?$@?..."??
  • ????@cd?$(STMLIB)/CMSIS/Device/ST/STM32F10x/Source/Templates?&&?\??
  • ????????$(CC)?$(CFLAGSlib)?\??
  • ????????????system_stm32f10x.c??
  • ????@cd?$(STMLIB)/STM32F10x_StdPeriph_Driver/src?&&?\??
  • ????????$(CC)?$(CFLAGSlib)?\??
  • ????????????-D"assert_param(expr)=((void)0)"?\??
  • ????????????-I../../CMSIS/Include?\??
  • ????????????-I../../CMSIS/Device/ST/STM32F10x/Include?\??
  • ????????????-I../inc?\??
  • ????????????*.c??
  • #???@cd?$(STMLIB)/STM32_USB-FS-Device_Driver/src?&&?\??
  • #???$(CC)?$(CFLAGSlib)?\??
  • #???-D"assert_param(expr)=((void)0)"?\??
  • #???-I../../CMSIS/Include?\??
  • #???-I../../CMSIS/Device/ST/STM32F10x/Include?\??
  • #???-I../inc?\??
  • #???*.c??
  • ????@$(AR)?cr?$(LIBDIR)/$@?\??
  • ????????$(STMLIB)/CMSIS/Device/ST/STM32F10x/Source/Templates/system_stm32f10x.o?\??
  • ????????$(STMLIB)/STM32F10x_StdPeriph_Driver/src/*.o?\??
  • #???????$(STMLIB)/STM32_USB-FS-Device_Driver/src/*.o??
  • ????????@echo?"done."??
  • .PHONY:?libs?clean?tshow??
  • ??
  • clean:??
  • ????rm?-f?$(STMLIB)/CMSIS/Device/ST/STM32F10x/Source/Templates/system_stm32f10x.o??
  • ????rm?-f?$(STMLIB)/STM32F10x_StdPeriph_Driver/src/*.o??
  • ????rm?-f?$(STMLIB)/STM32_USB-FS-Device_Driver/src/*.o??
  • ????rm?-f?$(LIBS)??
  • tshow:??
  • ????@echo?"######################################################################################################"??
  • ????@echo?"#################?optimize?settings:?$(InfoTextLib),?$(InfoTextSrc)"??
  • ????@echo?"######################################################################################################"??
  • 編譯該庫:

    [plain]?view plain?copy
  • make?clean??
  • make??
  • 就會在lib目錄下生成libstm32.a,這個就是編譯好的靜態庫了.

    ???? 建立工程編譯ld文件

    ???? 這個ld文件,為在編譯時告訴編譯器把代碼放到什么地址,根據芯片的內存以及flash容量不同有所調整

    ??????在工程根目錄下新建linker.ld文件

    ????? 代碼較長,請到我的資源里面下載,或者查看參考pdf里面的:

    ????????????http://download.csdn.net/detail/canyue102/6778837

    ????? 這里說明需要修改的地方,根據芯片型號不同,選擇相應的RAM FLASH大小

    ????

    [css]?view plain?copy
  • MEMORY?{??
  • ????/*Adust?LENGTH?to?RAMsize?of?target?MCU:*/??
  • ????/*STM32F103RBT?-->?20K*/??
  • ????/*RAM?(RWX)?:?ORIGIN?=?0x20000000?,?LENGTH?=?20K*/??
  • ????/*STM32F103RET?-->?64K*/??
  • ????/*STM32F103ZET?-->?64K*/??
  • ????RAM?(RWX)?:?ORIGIN?=?0x20000000?,?LENGTH?=?64K??
  • ????EXTSRAM?(RWX)?:?ORIGIN?=?0x68000000?,?LENGTH?=?0??
  • ????/*Adust?LENGTH?to?(FLASHsize?-?FeePROMsize)?of?target?MCU:*/??
  • ????/*STM32F103RBT?-->?126K*/??
  • ????FLASH?(RX)?:?ORIGIN?=?0x08000000?,?LENGTH?=?126K??
  • ????/*STM32F103RET?-->?508K*/??
  • ????/*FLASH?(RX)?:?ORIGIN?=?0x08000000?,?LENGTH?=?508K*/??
  • ????/*STM32F103ZET?-->?508K*/??
  • ????FLASH?(RX)?:?ORIGIN?=?0x08000000?,?LENGTH?=?508K??
  • ????/*Adust?ORIGIN?to?(0x08000000?+?(FLASHsize-FeePROMsize))?of?target?MCU*/??
  • ????/*and?adust?LENGTH?to?FeePROMsize?allocated:*/??
  • ????/*STM32F103RBT?-->?0x08000000+126K,?2K*/??
  • ????EEMUL?(RWX)?:?ORIGIN?=?0x08000000+126K,?LENGTH?=?2K??
  • ????/*STM32F103RET?-->?0x08000000+508K,?4K*/??
  • ????/*EEMUL?(RWX)?:?ORIGIN?=?0x08000000+508K,?LENGTH?=?4K*/??
  • }??
  • ?? ????? 在工程根目錄下新建Makefile文件:

    ?

    [plain]?view plain?copy
  • #?general?Makefile??
  • ??
  • include?Makefile.common??
  • LDFLAGS=$(COMMONFLAGS)?-fno-exceptions?-ffunction-sections?-fdata-sections?-L$(LIBDIR)?-nostartfiles?-Wl,--gc-sections,-Tlinker.ld??
  • ??
  • LDLIBS+=-lm??
  • LDLIBS+=-lstm32??
  • ??
  • STARTUP=startup.c??
  • ??
  • all:?libs?src??
  • ????$(CC)?-o?$(PROGRAM).elf?$(LDFLAGS)?\??
  • ????????-Wl,--whole-archive?\??
  • ????????????src/app.a?\??
  • ????????-Wl,--no-whole-archive?\??
  • ????????????$(LDLIBS)??
  • ????$(OBJCOPY)?-O?ihex?$(PROGRAM).elf?$(PROGRAM).hex??
  • ????$(OBJCOPY)?-O?binary?$(PROGRAM).elf?$(PROGRAM).bin??
  • #Extract?info?contained?in?ELF?to?readable?text-files:??
  • ????arm-none-eabi-readelf?-a?$(PROGRAM).elf?>?$(PROGRAM).info_elf??
  • ????arm-none-eabi-size?-d?-B?-t?$(PROGRAM).elf?>?$(PROGRAM).info_size??
  • ????arm-none-eabi-objdump?-S?$(PROGRAM).elf?>?$(PROGRAM).info_code??
  • ????arm-none-eabi-nm?-t?d?-S?--size-sort?-s?$(PROGRAM).elf?>?$(PROGRAM).info_symbol??
  • ??
  • .PHONY:?libs?src?clean?tshow??
  • ??
  • libs:??
  • ????$(MAKE)?-C?libs?$@??
  • src:??
  • ????$(MAKE)?-C?src?$@??
  • clean:??
  • ????$(MAKE)?-C?src?$@??
  • ????$(MAKE)?-C?libs?$@??
  • ????rm?-f?$(PROGRAM).elf?$(PROGRAM).hex?$(PROGRAM).bin?$(PROGRAM).info_elf?$(PROGRAM).info_size??
  • ????rm?-f?$(PROGRAM).info_code??
  • ????rm?-f?$(PROGRAM).info_symbol??
  • tshow:??
  • ????????@echo?"######################################################################################################"??
  • ????????@echo?"#################?optimize?settings:?$(InfoTextLib),?$(InfoTextSrc)"??
  • ????????@echo?"######################################################################################################"??

  • ???????? 差不多就好了,在src里面添加測試源碼

    ???????? 主要是startup.c 以及main.c,這里就不在說明了,可以查看該pdf或者到我的資源下載

    ????????????????? http://download.csdn.net/detail/canyue102/6778885

    ???????? 然后進入工程主目錄,下make就好了.

    ?

    [plain]?view plain?copy
  • make?clean??
  • make?OptLIB=0?OptSRC=0?all?tshow??
  • ????????? ?然后,就完成了,關于ubuntu下燒錄程序到stm32下,請見下一篇博客

    總結

    以上是生活随笔為你收集整理的buntu linux下建立stm32开发环境: GCC安装以及工程Makefile建立的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。