查看: 11512|回复: 4

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

[复制链接]
  • TA的每日心情
    开心
    2014-1-17 23:05
  • 签到天数: 9 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    发表于 2014-1-16 17:06:01 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 东隅 于 2014-1-16 21:31 编辑

    买了一个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
        环境:
    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的文件夹
            把该编译器添加到你的环境中:
            
    sudo gedit  ~/.bashrc  
           在最后一行添加:
    export PATH=$PATH:/your_stm_gcc_dir/gcc-arm-none-eabi-4_8-2013q4/bin  
           因为我之前有添加过树莓派的编译器了,所以实际上是这样的:   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就有了.
           下载链接:
                [url=]stsw-stm32121.zip[/url]

           解压,把解压好的文件夹复制到刚才新建的libs里面.
           在工程根目录下新建Makefile.common文件,这个为通用makefile
             .........代码过多,详见原文
            
    1. # include Makefile  
    2.   
    3. #This file is included in the general Makefile, the libs Makefile and the src Makefile  
    4. #Different optimize settings for library and source files can be realized by using arguments  
    5. #Compiler optimize settings:  
    6. # -O0 no optimize, reduce compilation time and make debugging produce the expected results (default).  
    7. # -O1 optimize, reduce code size and execution time, without much increase of compilation time.  
    8. # -O2 optimize, reduce code execution time compared to ‘O1’, increase of compilation time.  
    9. # -O3 optimize, turns on all optimizations, further increase of compilation time.  
    10. # -Os optimize for size, enables all ‘-O2’ optimizations that do not typically increase code size and other code size optimizations.  
    11. #Recommended optimize settings for release version: -O3  
    12. #Recommended optimize settings for debug version: -O0  
    13. #Valid parameters :  
    14. # OptLIB=0 --> optimize library files using the -O0 setting  
    15. # OptLIB=1 --> optimize library files using the -O1 setting  
    16. # OptLIB=2 --> optimize library files using the -O2 setting  
    17. # OptLIB=3 --> optimize library files using the -O3 setting  
    18. # OptLIB=s --> optimize library files using the -Os setting  
    19. # OptSRC=0 --> optimize source files using the -O0 setting  
    20. # OptSRC=1 --> optimize source files using the -O1 setting  
    21. # OptSRC=2 --> optimize source files using the -O2 setting  
    22. # OptSRC=3 --> optimize source files using the -O3 setting  
    23. # OptSRC=s --> optimize source files using the -Os setting  
    24. # all --> build all  
    25. # libs --> build libs only  
    26. # src --> build src only  
    27. # clean --> clean project  
    28. # tshow --> show optimize settings  
    29. #Example:  
    30. # make OptLIB=3 OptSRC=0 all tshow  
    复制代码
    编译库文件:      进入libs文件夹,新建Makefile:
    1. # libs Makefile  
    2. include ../Makefile.common  
    3. LIBS+=libstm32.a  
    4. CFLAGSlib+=-c  
    5.   
    6. all: libs  
    7.   
    8. libs: $(LIBS)  
    9.   
    10. libstm32.a:  
    11.     @echo -n "Building $@ ..."  
    12.     @cd $(STMLIB)/CMSIS/Device/ST/STM32F10x/Source/Templates && \  
    13.         $(CC) $(CFLAGSlib) \  
    14.             system_stm32f10x.c  
    15.     @cd $(STMLIB)/STM32F10x_StdPeriph_Driver/src && \  
    16.         $(CC) $(CFLAGSlib) \  
    17.             -D"assert_param(expr)=((void)0)" \  
    18.             -I../../CMSIS/Include \  
    19.             -I../../CMSIS/Device/ST/STM32F10x/Include \  
    20.             -I../inc \  
    21.             *.c  
    22. #   @cd $(STMLIB)/STM32_USB-FS-Device_Driver/src && \  
    23. #   $(CC) $(CFLAGSlib) \  
    24. #   -D"assert_param(expr)=((void)0)" \  
    25. #   -I../../CMSIS/Include \  
    26. #   -I../../CMSIS/Device/ST/STM32F10x/Include \  
    27. #   -I../inc \  
    28. #   *.c  
    29.     @$(AR) cr $(LIBDIR)/$@ \  
    30.         $(STMLIB)/CMSIS/Device/ST/STM32F10x/Source/Templates/system_stm32f10x.o \  
    31.         $(STMLIB)/STM32F10x_StdPeriph_Driver/src/*.o \  
    32. #       $(STMLIB)/STM32_USB-FS-Device_Driver/src/*.o  
    33.         @echo "done."  
    34. .PHONY: libs clean tshow  
    35.   
    36. clean:  
    37.     rm -f $(STMLIB)/CMSIS/Device/ST/STM32F10x/Source/Templates/system_stm32f10x.o  
    38.     rm -f $(STMLIB)/STM32F10x_StdPeriph_Driver/src/*.o  
    39.     rm -f $(STMLIB)/STM32_USB-FS-Device_Driver/src/*.o  
    40.     rm -f $(LIBS)  
    41. tshow:  
    42.     @echo "######################################################################################################"  
    43.     @echo "################# optimize settings: $(InfoTextLib), $(InfoTextSrc)"  
    44.     @echo "######################################################################################################"
    复制代码
    编译该库:
    1. make clean  
    2. make
    复制代码
    就会在lib目录下生成libstm32.a,这个就是编译好的静态库了.
         建立工程编译ld文件
         这个ld文件,为在编译时告诉编译器把代码放到什么地址,根据芯片的内存以及flash容量不同有所调整
          在工程根目录下新建linker.ld文件

          代码较长,请到我的资源里面下载,或者查看参考pdf里面的:
               http://download.csdn.net/detail/canyue102/6778837

          这里说明需要修改的地方,根据芯片型号不同,选择相应的RAM FLASH大小
    1.     MEMORY {  
    2.         /*Adust LENGTH to RAMsize of target MCU:*/  
    3.         /*STM32F103RBT --> 20K*/  
    4.         /*RAM (RWX) : ORIGIN = 0x20000000 , LENGTH = 20K*/  
    5.         /*STM32F103RET --> 64K*/  
    6.         /*STM32F103ZET --> 64K*/  
    7.         RAM (RWX) : ORIGIN = 0x20000000 , LENGTH = 64K  
    8.         EXTSRAM (RWX) : ORIGIN = 0x68000000 , LENGTH = 0  
    9.         /*Adust LENGTH to (FLASHsize - FeePROMsize) of target MCU:*/  
    10.         /*STM32F103RBT --> 126K*/  
    11.         FLASH (RX) : ORIGIN = 0x08000000 , LENGTH = 126K  
    12.         /*STM32F103RET --> 508K*/  
    13.         /*FLASH (RX) : ORIGIN = 0x08000000 , LENGTH = 508K*/  
    14.         /*STM32F103ZET --> 508K*/  
    15.         FLASH (RX) : ORIGIN = 0x08000000 , LENGTH = 508K  
    16.         /*Adust ORIGIN to (0x08000000 + (FLASHsize-FeePROMsize)) of target MCU*/  
    17.         /*and adust LENGTH to FeePROMsize allocated:*/  
    18.         /*STM32F103RBT --> 0x08000000+126K, 2K*/  
    19.         EEMUL (RWX) : ORIGIN = 0x08000000+126K, LENGTH = 2K  
    20.         /*STM32F103RET --> 0x08000000+508K, 4K*/  
    21.         /*EEMUL (RWX) : ORIGIN = 0x08000000+508K, LENGTH = 4K*/  
    22.     }  
    复制代码
    差不多就好了,在src里面添加测试源码,和makefile         主要是startup.c 以及main.c,这里就不在说明了,可以查看该pdf或者到我的资源下载
            http://download.csdn.net/detail/canyue102/6778885

             然后进入工程主目录,下make就好了.
    1.     make clean  
    2.     make OptLIB=0 OptSRC=0 all tshow  
    复制代码
    然后,就完成了,关于ubuntu下烧录程序到stm32下,请见下一篇博客

                    ubuntu linux下建立stm32开发环境: 程序烧录 openocd+openjtag  

            







    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-8-15 09:28
  • 签到天数: 222 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2014-1-16 17:11:25 | 显示全部楼层
    坐沙发,看教程!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2015-9-1 22:24
  • 签到天数: 497 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2014-1-16 17:28:56 | 显示全部楼层
    {:soso_e179:}                              
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2015-11-30 08:37
  • 签到天数: 220 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2014-1-16 21:16:56 | 显示全部楼层
    坐沙发,看教程!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2014-1-17 06:31:29 来自手机 | 显示全部楼层
    嗯,可以有。           
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-11-25 17:53 , Processed in 0.146383 second(s), 23 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.