TA的每日心情 | 开心 2014-1-17 23:05 |
---|
签到天数: 9 天 连续签到: 1 天 [LV.3]偶尔看看II
|
本帖最后由 东隅 于 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
两个编译器环境中间用冒号隔开;
注销后测试:可以查看到该编译器的版本,就表示可以了.
二 工程环境的建立
新建个工程文件夹,及其目录
- 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就有了.
下载链接:
[url=]stsw-stm32121.zip[/url]
解压,把解压好的文件夹复制到刚才新建的libs里面.
在工程根目录下新建Makefile.common文件,这个为通用makefile
.........代码过多,详见原文
- # 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
复制代码 编译库文件: 进入libs文件夹,新建Makefile:
- # 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 "######################################################################################################"
复制代码 编译该库:
就会在lib目录下生成libstm32.a,这个就是编译好的静态库了.
建立工程编译ld文件
这个ld文件,为在编译时告诉编译器把代码放到什么地址,根据芯片的内存以及flash容量不同有所调整
在工程根目录下新建linker.ld文件
代码较长,请到我的资源里面下载,或者查看参考pdf里面的:
http://download.csdn.net/detail/canyue102/6778837
这里说明需要修改的地方,根据芯片型号不同,选择相应的RAM FLASH大小
- 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*/
- }
复制代码 差不多就好了,在src里面添加测试源码,和makefile 主要是startup.c 以及main.c,这里就不在说明了,可以查看该pdf或者到我的资源下载
http://download.csdn.net/detail/canyue102/6778885
然后进入工程主目录,下make就好了.
- make clean
- make OptLIB=0 OptSRC=0 all tshow
复制代码 然后,就完成了,关于ubuntu下烧录程序到stm32下,请见下一篇博客
ubuntu linux下建立stm32开发环境: 程序烧录 openocd+openjtag
|
|