コメを噛め

コメを噛め

rerofumi の電子工作メモ

hatena bookmark

LEDチカチカはいいね、リリンの生んだ電子工作の極みだよ。

STBee でLEDチカチカやってみました。というんじゃなくて最低限のビルドプロジェクトを構成するお話。

ARM系のクロスコンパイラがあればそれだけで開発ができるという話ではなく、割り込みベクタにスタートアップ、周辺回路のライブラリなどを用意する必要がある。
ストロベリーリナックスで配布している STBee 用のサンプルプロジェクトが一通りそろっていて参考になる。make 一発で STBee 上の LEDチカチカがビルドできるので、これをベースに自分用のプロジェクトを作るのが手軽ではある。しかし、Makefile がお世辞にも綺麗と言えないのと AVR 用の使い回しなので不満も残るところがあったりする。
今回の目的は、自分の手で同等品を全てそろえることでスタートアップ構成を理解したいというのと、自分にとって使いやすい Rakefile を構築しようというところにある。

今回の成果、ビルド用ソースコードツリー。
Download: fumi2_stbee_project-0.1.0.zip
main.c のLEDチカチカ部分はストロベリーリナックスのモノをほぼそのままです。


スタートアップおよび周辺回路ライブラリは STMicro からダウンロードできる。少々わかりにくいところにあるのとサイト構成が良く変わるのでリンクはできないけれども上の画像を参考に見つけ出して欲しい。
このペリフェラルライブラリに含まれているのは、

  • CortexM3コアの命令利用定義 (CMSIS/CoreSupport)
  • STM32F10x のスタートアップとレジスタ定義ヘッダ (CMSIS/DeviceSupport)
  • STM32F10x 周辺回路のアクセスライブラリ (StdPeriph_Driver)
  • 評価ボード用のサンプルプロジェクト

といったところ。
STM32F10x 用のいくつもあるバリエーション毎のスタートアップなど全部が詰まっているので、自分に必要なモノをチョイスして集める必要がある。

StdPeriph_Driver は普通にコンパイルして .o を ar で .a にまとめておけば良い。
それ以外の部分はチョイスしたり修正したりしなければならない。

コア&スタートアップで必要なファイルは以下の通り。

      core_cm3.[c|h]
      system_stm32f10x.[c|h]
      stm32f10x.h
      startup_stm32f10x_hd.s

スタートアップはパフォーマンスラインとかバリューラインとか STM32 チップのバリエーションによって異なるので適したものをチョイスする。
startup_stm32f10x_hd.s の中で main() にブランチするまえに __libc_init_array をコールしているところがあるが newlib では不要っぽいのでコメントアウトする必要がある。
stm32f10x.h は自分の使いたいターゲットの種類を選択する箇所があるので、STM32F10X_HD のコメントアウトを削って有効にしてやる。

system_stm32f10x.c はクロック周波数などターゲットによって変更する必要がある部位なので、.h のある場所にはなかったりする。テンプレートプロジェクトの方にあるので、コピーしておくと良い。

他に用意しておく必要があるシステムファイルは

      stm32f10x_conf.h
      stm32f10x_hd_flash_offset.ld

の2つ。どっちも必要なのだけれども、サンプルプロジェクトの中にあるものなのでわかりにくい。
stm32f10x_conf.h は StdPeriph_Driver のコンパイルにも使われるので注意。主に、assert_param() の define のためなのだけれども、assert_param 自体無効にしないといけないのでそのように設定する。
stm32f10x_hd_flash_offset.ld はリンク時に flash や ram のアドレス領域を定義しているファイル。TrueStudio のプロジェクトサンプルの中などにある。ターゲット依存なので、これだけは先のストロベリーリナックスのサンプルからコピーしてきた方がいいかも。

これでスタートアップを含んだシステムライブラリの準備は完了。

あとは、Rakefile でこれらをビルドする仕組みを書き上げてプロジェクトツリーの完成。
Rakefile なのが俺得な感じだけれども、手になじむ make tree に仕上がったのではないかと思っている。

スタートアップを自分の手で追いかけたので大分理解が進んだ。
TrueStudio とかの統合開発環境ではそういったシステムの選択とかライブラリとかが隠蔽されて裏にあると思って良い。
チップのバリエーションが変わったり、外部RAMなどメモリマップが変わったときに何をすれば良いかはこれらのファイル群を思い浮かべられると心強いところだろう。

Leave a Reply