gccツールチェーンを使ってLinux環境下のstm 32開発を行う.


gccツールチェーンを使ってLinux環境下のstm 32開発を行う.
    Linuxを好奇心と学習する目的で、仮想マシンVMwareのUbuntu 9.10オペレーティングシステムの下でstm 32の開発環境を構築するつもりです.全体のプロセスは、gccツールチェーンをインストールしてプロジェクトディレクトリを作成することを含みます.Makefileを作成し、ファイルに接続します.
私のプロジェクトリソース:http://download.csdn.net/detail/xiaoxiaoxingkongo/9732047
プロジェクト確立の参考接続:http://blog.csdn.net/embbnux/article/details/17616809
書き込み参考リンク:http://blog.csdn.net/ybhuangfugui/article/details/52597133
1.gccツールチェーンの取り付け
   a.gcc-arm-none-eabi-4_をダウンロードします.6-2012 q 4-202116.16 tar.bz 2
   b.展開
      tar-xjvf gcc-arm-none-eabi-4_6-2012 q 4-202116.16 tar.bz 2
      私の解凍の経路は/work/stm 32-toolです.
   c.環境変数を設定し、有効にする
      vim/etc/bash.bashrc
      このファイルに追加
      PATH=$PATH:/work/stm 32-tool/gcc-arm-none-eabi-4_6-2012 q 4/bin
      wq保存終了
      sourceは即効させる.
      source /etc/bash.bashrc
   d.テスト
      arm-none-eabi-gcc-v
      このツールに関する情報を出力できれば、インストール成功を説明します.
2.プロジェクトディレクトリを作成する
   IDEで適切なファイルディレクトリを作成する必要があるように、必要なファイルによって分類し、プロジェクトディレクトリを構築し、Makefileのコンパイルファイルを作成するのに便利です.
   a.stm 32のライブラリ関数ディレクトリlibs
     stm 32の開発には、公式のライブラリ関数を使うことが重要です.だから、私たちのプロジェクトにもオフィシャルライブラリ関数が加わっています.
     STM 32_USB-FS-Device_Lib_V 4.0.0.rar
     解凍をダウンロードしてlibsディレクトリに保存します.
   b.ソースファイルsrc
     自分で作成したソースファイルを保存します.
   c.ヘッダファイルinc
     ソースファイルに依存するヘッダファイルを保存します.
   この三つのファイルリストは私達の工程構造を構成しています.続いてMakefile、リンクファイルの作成を始めます.
3.Makefile、リンクファイルを作成する
   a.Makefile
      全部で三つのMakefileファイルが必要です.工程ルートディレクトリ、libsディレクトリ、Srcディレクトリは一つずつです.基本的に変更しないでください.もう一つのMakefile.co mmonファイルは、このファイルもプロジェクトのルートディレクトリに入れています.42行目は、stm 32のモデルによって、対応するタイプを選択します.私のはstm 32 f 103 c 8 t 6です.選択します.
STM 32 F 10 X_MD
# 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_MD
#============================================================================#
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
 
 b.リンクファイル、linker.ld
     このファイルはプロジェクトのルートディレクトリにもあります.主な説明は修正が必要かもしれませんが、お使いのstm 32モデルによって、RAMサイズを変更すれば大丈夫です.
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 = 20K
	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 = 64K
	/*Adust ORIGIN to (0x08000000 + (FLASHsize-FeePROMsize)) of target MCU*/
	/*and adust LENGTH to FeePROMsize allocated:*/
	/*STM32F103RBT --> 0x08000000+126K, 2K*/
	EEMUL (RWX) : ORIGIN = 0x08000000+64K, LENGTH = 0K
	/*STM32F103RET --> 0x08000000+508K, 4K*/
	/*EEMUL (RWX) : ORIGIN = 0x08000000+508K, LENGTH = 4K*/
}
4.コンパイル生成実行可能ファイル
   srcにソースファイルを追加し、shellのプロジェクトのルートディレクトリにmake allを入力すると、hex、bin形式の実行可能ファイルが生成されます.5.hexファイルのテストをダウンロードする
   現在作成された開発環境はコンパイルプロジェクトを提供するためだけです.直接Linux環境でプログラムをダウンロードしたいなら、私が参考にしている大牛を参考にしてもいいです.ここでは、生成されたhexファイルをWindowsでSTlinkを介してSTm 32にダウンロードする方法を説明します.
 
    STM 32 ST-LINK Utilityというソフトウェアツールは、主に「ST-LINK」というダウンロードツールを組み合わせて使用する上位マシンソフトウェアです.そのためSTM 32 ST-LINK Utility上位機のソフトウェアを使うにはST-LINKツールが必要です.その機能はJ-Link対応のツールと似ています.コードを書くのに使います.このツールを通して、stlinkを加えて、hexファイルを焼くことができます.具体的にインストールして使うのも難しくないです.   STM 32 ST-LINK Utilityダウンロード
    これで工事が終わります.本文の目的はLinuxの下のstm 32の開発環境を構築することです.主に必要な資源を提供することと建設中の注意事項を提供することです.実は難しくないです.詳細は参照リンクに記載されていますので、ここでは詳しくは説明しません.各路の大牛たちに感謝して、勉強を始めます.
    最後に、プロジェクトのリソースに注意してください.