わがロボットの譜

千葉工業大学、総合工学研究会所属の者です。とりあえず、二足歩行ロボット作成日誌です。

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

PageTop

そろそろstm32f4と戦おうと思って


Discoveryボードはあるんだが,使いたいのは小さいパッケージのやつ.

ターゲットはLQFP64パッケージのstm32f405.


実は,随分前に買ってあって,変換基板へのはんだもしてあったりする.





で,そろそろ回路図でも引くかなーと思って,
てっっっっっっっっっっきとーーーーーーーーーにデータシートに目を通した.

だって英語なんですもの.



てことで該当パッケージの上ををちょっとだけ纏めてみた.


が,特に珍しいことはなんもなかった!

ピンの機能が,Additional functionsとAlternate functionsと2項目に分かれてて,なんだろうと思ったら,
前者は各機能事のペリフェラルレジスタで利用するか否かの選択をして,後者はピンの機能選択で選ぶだけってゆー話でした.割と親切?


まぁ一応,表にまとめたんで置いておく.

https://docs.google.com/file/d/0B4D-z8bgWgT-ZWZGRTI1WTZENE0/edit


注でいろいろ補完しようと思ったらクソ微妙な形になった.反省はしている.



機能がどうとうか実際なとこ,まだ全然見てない.



まだまだこれからだけれども,日曜日は終わってしまったのです.

スポンサーサイト

PageTop

STM32F4の開発環境構築(本当はこれが本編です)

今日もちまちまとやっていきます。

さて、今までやってきたことですが、結果的にビルドを通るようにしたものの上手く行かず。
やってらんねーよ!

この前までのブログ記事なんてなかったんだ!

ってことでまぁ初めからこうなるだろうと予想していたAtollicStudioを使う方法をば。

STM32F4 Discovery を Eclipse で開発 を尋常じゃなく参考にしました。


基本みながらやればできますがが、いささかわかりにくかったところを。

プロジェクトの設定でコピペしてくるのは、Librariesとsrc、stm32f4_flash.ldです。

4) spirintf()云々は、全然理解できなかった&別にsprintfを使いたいわけではないのでスルー。
zylinのデバッグ環境も設定画面がエラーと言われ開けずスルー。
gdbは別もスルー。

いいのかこんなんで…


とりあえず自分は
arm-none-eabi-hogeと世間ではなっているらしいところが、
arm-none-linux-gnueabi-hogeとなっていたので、
プロジェクトの設定 → C/C++ビルド → 設定 から、すべてのコマンドを全力で修正。

良からぬエラーが出るので、srcの下にある、printfも削除。(もとの作成時に作らなくてもよかった)
なんだかわからないアセンブリのエラーも華麗にコメントアウト!
/* Call static constructors */
// bl __libc_init_array



無事コンパイルできました。
本当にありがとうござます。


書込方法は、LinuxでもST Linkが使えるということで、
STM32 Value Line DiscoveryをLinuxで開発する(2) を参考にさせてもらいました。

自分はバーション2の方を使って見ました。

バージョンの違いなのかビルドの方法が違ったのでメモ。
解凍したstlinkフォルダ下で、
./autogen.sh
./configure
make
を叩けとのことです。
まぁREADMEに書いてあるんですけどね。
未来の自分が英語を読み直さなくても済むように(

終わったら、基板を接続した上で
sudo ./st-utils
で起動します。

初めスーパユーザで実行してあれ?できないぞ?となってしまったのでご注意を。

起動後の使い方はまんま真似しました。

少々面倒。きっとなんとかなるのだろうけどそんな手間ではないのであまり気にしていない。
でも、なんとかしたいなぁ。






とりあえずサンプルをパクって、LED制御までをやってみた。
IO1つにも設定が多すぎてなんだか冗長な感じがしてしまいますが、気にしたら負けでしょう。


で、毎回ここら辺の設定するのが面倒だなーと思ったので、テキトーに対処。

コピペした中にあったすべてのヘッダをプロジェクトの外部にひとまとめにする。
で、パスおよびシンボルのインクルードパスはそこを参照するだけに。
stm32f4_flash.ldも外に退避。
プロジェクト下には、
元のsrcフォルダと、ドライバ用のソースフォルダをまとめた、driver_srcだけが有る状態に。

とりあえずここら辺で、ファイル → エクスポート → ファイル・システム
で、プロジェクト全体をテキトーなところに出力しておきます。

あとは今後、新規プロジェクト作成してから、ファイル → インポートでとりこめばよいだけ。


ものすごーーーーーーくとりあえずですが、使えるようにはなりました。
さてこれからどうして行こうか。


そうだ、最後にもうひとつ、C++プロジェクトで作成して、mainもcppですが、問題なくいけるようです。
これでAtollicStudioでは出来なかったC++での開発ができるということです。

要らない人にはでっていうという問題ですが;

PageTop

STM32F4の開発環境構築(3)

今日もちまちまやっていきます。

機能の続きで、まずはワークスペースの作成。

とりあえず素直にホームフォルダにstm32_workspace フォルダを作成。
その下に、STM32F10x_StdPeriph_Libをコピペして、workspaceフォルダを作成。

インストールはもうすでにしてあったのでとくにやることなし。
テキトーに指示に従ってればいいだけです。

起動時にでてくるワークスペースの選択で、~/stm32_wrokspace/workspaceを選択。


ここからはEclipseの操作。

・ ヘルプ → 新規ソフトウェアのインストールでcdtをインストール。
すでに導入済みなのでスルー。

・ GCC Cross Compiler Support インストール
使用していたEclipse が indigoだったので http://download.eclipse.org/tools/cdt/releases/indigo にURLを変更。CDT オプション・フィーチャー → C/C++ GCC Cross Compiler Support をインストール。

・ STM32用のプロジェクトの設定
ファイル → 新規 → C++プロジェクトを選択
プロジェクトタイプ 実行可能 → クロス・コンパイラー プロジェクト → Cross GCC を選択。
プロジェクト名も素直にTempleteにしておいた。
ここで完了ではなく次へを選択。
Tool command prefix に arm-none-eabi
Tool command path に CodesourceryBenchのbinフォルダを指定。
自分の場合は /home/taki4416/CodeSourcery/Sourcery_CodeBench_Lite_for_ARM_GNU_Linux/bin
完了を押してプロジェクト作成。

・ アセンブラの設定
プロジェクトを右クリックしてプロパティ選択。
C/C++ビルド → ツール・チェーン・エディター
ツールの選択ボタンをクリック。
左の項目の中からGCC Assemblerを追加。
C/C++ビルド → 設定 を選択
左の選択肢からGCC Assemblerを選択。
コマンドを arm-none-eabi-as に書き換える。
さらに左の選択肢のGCC Assemblerの下にある設定を選択。
アセンブラー・フラグに -mthumb -mcpu=cortex-m4 と記入。多分こうなんじゃないかな(
次があるのでまだ閉じない。

・ C,C++コンパイラの設定
プロジェクトのプロパティ内。
C/C++ビルド → 設定
Cross GCC Compiler → その他 を選択。
その他のフラグに
-lm -mthumb -mhard-float -mcpu=cortex-m4 -mfpu=fpv4-sp-d16
と追記。あってるといいなぁ。
Cross G++ Compilerについても同様に。
まだ閉じない方がラク。

・ リンカの設定
プロジェクトのプロパティ内。
C/C++ビルド → 設定
Cross G++ Linker → その他
とりあえず、リンカー・フラグに
-T "${ProjDirPath}\startup_src\stm32_flash.ld" -lm -mthumb -mhard-float -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -Wl,-Map=linker.map -Wl,-cref -Wl,--gc-sections
と入れた。あってないだろう。おそらく。


今日はココらへまでで。

PageTop

STM32F4の開発環境構築(2)

この前はいろいろ関係ないとこみたけどいよいよやるぞー
と思っていろいろ見ましたが、いまいちわからない。

みんな大好き徹底入門はなにかセットになっててとりあえず使えるかもしれないけれども、
今後ちゃんと1ステップずつわかってないと厳しいと思ってので、地道にやっていきます。

参考にするのはここのサイト
また英語ですよ英語。

とりあえずテキトーに解釈しながらやってみます。

初めに必要なものを取ってくる。

・JRE、Eclipise ここはすでに導入済み。
入れかたは僕が書くよりeclipseでぐぐってくれればいくらでもいい記事が有ると思うので割愛します。

・STLink Utility
こっから取ってくるとリンクが貼ってあるのみ。
クリック → Not Found… 早くも波乱の予感ですよ。
とりあえず、STLink Utility で検索してそれらしいものと出会えたのでダウンロード。
なるほどWindows用と。ということで入れてません(

・ARM-based 32-bit MCU STM32F10x Standard Peripheral Library
これまたリンクが切れている。
とりあえず、ホームに行き、右のサーチタブを選択。
STM32F10x Standard Peripheral Library とぶち込んで、一番上に出てきたSTM firm wareをクリック。
ここでサーチに peripheral と入れて出会えました。ZIPフォルダのアイコンクリックでダウンロード。
たしか以前、製品ページのダウンロードタブからとってきたものもあったが、そっちはv1.01。
おそらく古いもののままだと思われるので要注意。製品によって使えるバーションが違うとかないよな(^_^;)

・STM32VLDISCOVERY firmware package
↑のFirmwareでサーチにdiscoveryと入れてダウンロード。

ダウンロードに時間がかかってしまったので今日はここまでか。


PageTop

STM32F4の開発環境構築

お久しぶりです.
いろいろありますが生きてます.

ちょっと時間ができ(?)ので,前々からやろうとしていたSTM32の開発環境の構築にトライ.

とりあえず必要なものをインストール.
eclipse & プラグインのCDTはすでに入っていたので,

次に入れるものはクロスコンパイラな模様.
で,みんな口を揃えてCodeSourceryG++推しなようなのでググって入れてみる.
が,本家ページ行くと今の最新版は違う名前の模様(?)
とりあえず Sourcery CodeBench Lite をダウンロードしてインストール.
Ubuntuだと.binが実行できず困った.
http://etherpod.org/blog/?p=1494
ここのブログに助けられなんとかインストール.

で,あれだろ?後はオプションつけてコンパイルすれば俺の勝ちだなと思ってみるも,
全然オプションがわからない.

とりあえずAtollic true stdio という開発ボードが推してる,ツールを入れてmakefileを作成してみる.
オプションがすごい量.もちろんサッパリわからない.
一つひとつ地道ーに見てみます.

これを機に積んであったGNUmakeも読んだという気合の入れようですよ。
わからないということがわかっただけでしたが。

オプションの記述は
http://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html
http://www.sra.co.jp/public/sra/product/wingnut/ld/ld-ja.html#SEC_Top
ここらへんを参考にしてみた。本家はどこに書いてあるんだろう←

-lm
lはライブラリの名前の前にくっついて、ライブラリの読み込みをさせる。ってことでm.aを読み込んでる。
m.aは数学ライブラリ。

-mthumb
正直良くわからない。thumbコードにするぜってオプションなのか?
とりあえずデフォルトが32bit長の命令なのを、16bitにしてるんじゃないかと思っている。
浮動小数点演算の高速化なんて記事もみつけた。ここらへんは今後検証したい。

-mhard-float
ハードウェア小数点演算を使いますよ。でしょうどうみても。これは設定画面で選択した。

-mcpu=cortex-m4
どうみてもCPUの選択。

-mfpu=fpv4-sp-d16
ハードウェアで小数点演算を行う場合の、小数点演算ユニットの種類の選択。
まぁ、作成されたコードがfpv4-sp-d16と書いてあるので、きっとこれがのってるに違いない。

ここから下はリンカに渡すオプションな模様。まとまった資料に出会えなかった。
多分ココらへんは必要ないのではないか?
-Wl,--gc-sections -T$(LINK_SCRIPT) -static
http://blog.kmckk.com/archives/2601869.html
うーん、GCみたいなもの…?まぁ要らない関数を分けてくれますと。
後ろについてるものはもうね。ほら…なんですかね。-staticは静的リンクってこと?
LINK_SCRIPTは別の行で指定されている。デフォルトの挙動ではなく他のスクリプトを実行している。

-Wl,-cref "-Wl,-Map=$(BIN_DIR)/hoge.map"
クロスリファレンステーブルを出力。で、出力場所を変更してるってことか?
全然わからない。

-Wl,--defsym=malloc_getpagesize_P=0x1000
グローバルシンボルをつくり、絶対アドレスをその値とすると。
0x1000がはどの部分の絶対アドレスなのかわかれば少しは試合になるんだろうか。



http://d.hatena.ne.jp/suikan+blackfin/20101202/1291297872

を参考にするかぎりリンカ回りは要らなそう。
他にいろいろ出力するのはなにか別の用途なんだろうか。


とりあえず根本て的な仕組みを理解していないので、なかなかしっくりこない。
とくにリンカ。


なにか勉強するのに良い物はありませんかね。
一体全体どういう本を読んだらいいのかも全然検討がつかないという…

大夫ハナシはそれてしまったけれども、長くなるのでこのぐらいに。
しばらくはちょくちょくやれそうなので、続きはおいおいやっていきます。

PageTop
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。