• 検索結果がありません。

mbed-nucleo-f401re-offline-works

N/A
N/A
Protected

Academic year: 2021

シェア "mbed-nucleo-f401re-offline-works"

Copied!
18
0
0

読み込み中.... (全文を見る)

全文

(1)

STM32-NUCLEO向け

オフライン作業ひととおりやってみました

mbed祭り2014@春の大阪

(2)

• 重い腰を上げてやっとmbedに対応に乗り出したST。mbed対応は、 数年前から⽔⾯下で進めていたSTM32マイコンエコシステムのリ ニューアルの一部という位置付けです。実際に対応されたものが出 てくると、どう使っていけるか?というところで悩んでいます。導 き出したひとつの答えと、それをもとにした作業の中で、いちユー ザーとして体験・会得した事柄をご紹介したいと思います。話のタ ネは、mbed SDKを使って何かをつくった、というよりも、設定を 調整してmbed SDKライブラリをビルドした事例、開発環境エクス ポート形式の追加など、STM32-NUCLEOをmbedのプラットフォー ムとして使ってもらうためのオフライン作業結果です。 • 自己紹介 • 矢郷 洋一(やごう ひろかず) • STマイクロエレクトロニクス(株)マイクロコントローラ製品部 • ST製マイコン製品の技術サポート、邦訳マニュアルの校正をして います。といってもマイコン担当部署に異動してからまだ3年目 です。経験豊富な「マイコンマスター」たちに圧倒されながら腕 を磨く日々です。以前は、テレビ放送受信機向けアプリケーショ ンプロセッサの分野で似た仕事をしていました。 2

(3)

2013

STM32 Ecosystem: News summary

3

Tools (IAR, Keil,…) Software Firmware Hardware Discovery Kit F0 Std Lib STM32F0 USB Lib STM32F4 USB Lib STM32F0 Discovery Kit F4 Std Lib STM32F4 2014 – New elements Nucleo Boards All STM32 covered STM32Cube HAL STM32Cube Middleware Free and open source IDE Mbed core B e y o n d S T M 3 2 STM32 CubeMX mbed.org ST Tools (MicroXplorer STMStudio..)

mbed

(4)

mbed対応プラットフォーム

4

STM32-NUCLEO基板

基板ピン互換。

Arduino header

(5)

NUCLEO – Arduino Headers

5

(Arduino UNO R3互換ピンヘッダ)

(6)

NUCLEOシリーズ

6 F1:最古のSTM32マイコンシリーズ F401:消費電⼒と性能の バランスが現時点で一番いい L1:当時低消費電⼒⽤途に 設計されたSTM32マイコン F0:小さめなSTM32マイコン Cortex-M3 Cortex-M4 Cortex-M3 Cortex-M0 Cortex-M0+ Cortex-M4 念願のCortex-M0+搭載STM32マイコン。L1シリーズに対する 製品フィードバックをもとにして低消費電⼒をテーマに設計。 F0: 低価格 L0: 低消費電⼒

(7)

mbed、どう使えるだろうか?

mbed SDKはマイコンファームウェア開発の敷居を下げ

るという特⻑があるので:

平常業務でのソフトウェアプラットフォームとして使え

ないか?

• デモ環境の構築、トラブルシューティング時の再現環境の構築に 役⽴ちそう・・・ • ==> ブレークポイントを張りたい。デバッガを使えるようにし たい。

マスマーケットに使えそう?

• ==> LPCXpresso IDEのような無償IDEがあるといいなあ・・・。 そういえば事業本部が無償IDEとして「CooCox CoIDE」という のを紹介してたな・・・。 7

(8)

オフラインコンパイル・デバッグ

• 現時点のmbedクラウド開発環境では、NUCLEO向けにオンライン IDEからKeil-uVisionプロジェクト形式でexport可能。exportすると コンパイル済のmbed SDKライブラリとアプリケーションのソース ファイルmain.cppがローカルPCにダウンロードされるので、 Nucleo_blink_led/サンプル+NUCLEO-F401REでやってみたとこ ろ、⾒事につまづく。exportされるmbed SDKライブラリはハード ウェアFPU設定 = “無効”設定でコンパイル済なのに、exportされる uVisionプロジェクトオプションがハードウェアFPU設定 = "有効"に なっている・・・。 • main.cpp: ハードウェアFPU使用でコンパイルされる。 • mbed SDKライブラリ: ハードウェアFPU非使用でコンパイル済。 • SystemInit()実⾏後もCPACRレジスタが0のまま。 • main.cppでwait(0.2)のような浮動小数点を取り扱う個所で Floating-point instruction実⾏時にHard-fault例外が起きる。 8

(9)

対処

ひとまずuVisionのプロジェクトオプションを調整。

[Porject] – [Options for Target …] – [Target]タブ

Floating Point Hardware = Not Used

「Hard FPUを使えるようにしたいんですけどー、」と言

われたらどうしよう・・・・・・・。

(10)

mbed SDKフルビルドにチャレンジ

必要なもの

• Python ==> 2.7.6をインストール。

• C:¥Python27;を環境変数PATHに追加。

• mbed masterブランチ ==> .zipスナップショットをダウンロー

ド @ https://github.com/mbedmicro/mbed。 • mbed-master/workspace_tools/private_settings.py ==> http://d.hatena.ne.jp/va009039/20130809/p1を参考に追加。

達成目標

• ハードウェアFPU = “有効”設定でmbed SDKライブラリを NUCLEO-F401RE向けにビルドする。

課題

• どうやれば「ハードウェアFPU = 有効」設定になるんだろ う・・・? SystemInit()から地道に遡る。 10

(11)

mbed SDKフルビルドにチャレンジ

編集が必要なファイル:

• mbed-master/workspace_tools/targets.py

[workspace_tools/targets.py]:

• class NUCLEO_F401RE(Targets): • …

• self.core = “Cortex-M4” ==> “Cortex-M4F”に変更

• この変更がworkspace_tools/toolchains/__init__.pyに影響する。

[workspace_tools/toolchains/__init__.py]:

• class mbedToolchain: • ... • CORTEX_SYMBOLS = { • …

• "Cortex-M4" : ["__CORTEX_M4", "ARM_MATH_CM4"],

• "Cortex-M4F" : ["__CORTEX_M4", "ARM_MATH_CM4", "__FPU_PRESENT=1"],

• }

(12)

mbed SDKフルビルドにチャレンジ

ビルド。

• > cd …¥mbed-master¥workspace_tools

• > python build.py -t uARM -m NUCLEO_F401RE

ビルドしたmbedがmbed-master/build/mbedに出⼒さ

れる。

オンラインコンパイラからエクスポートしたmbed/を

mbed-master/build/mbed/で置き換えて、uVisionの

ハードウェアFPU設定=”有効”にしてNucleo_blink_led

プロジェクトをリビルド。

うまく動いた・・・。

12

(13)

対応エクスポート形式

13

(platform example) NUCLEO-F401RE FRDM-KL05Z mbed LPC1768

Keil uVision 4 OK OK OK

LPCXpresso N/A N/A OK

GCC NG NG OK

GCC (GNU) NG OK OK

IAR Systems NG NG OK

CooCox IDE NG OK NG

Codered N/A N/A? OK

mbed Online IDE OK OK OK

ZIP Archive OK OK OK

(14)

対応エクスポート形式

14

(platform example) NUCLEO-F401RE FRDM-KL05Z mbed LPC1768

Keil uVision 4 OK OK OK

LPCXpresso N/A N/A OK

GCC NG NG OK

GCC (GNU) NG ==> OK OK OK

IAR Systems NG NG OK

CooCox IDE NG ==> OK OK NG

Codered N/A N/A? OK

mbed Online IDE OK OK OK

ZIP Archive OK OK OK

無償IDEが使えた方がいいだろうなあ。ターゲットはここだな・・・。 達成目標

(15)

無償IDE(CoIDE)への対応にチャレンジ

CoIDEには下記の外部ツールチェーンを使ってみます。

• GNU Tools for ARM Embedded Processors (GCC_ARM)

• そのためCoIDEプロジェクトでこのツールチェーンのコンパイル・リ ンクオプションを設定することになります。Makefileがあれば容易。

必要な作業:

• workspace_tools/export/coide.pyを編集。 • workspace_tools/export/gccarm.pyも編集。 • workspace_tools/export/coide_nucleo_f401re.coproj.tmplを 追加。 • gcc_arm_disco_f407vg.tmplが既にあるので、これをもとに gcc_arm_nucleo_f401re.tmplをつくる。 • GCC_ARM形式でエクスポートしてMakefileを得る。 • Makefileでコンパイル・リンクオプションを把握する。 • 既にある.coproj.tmplをベースにして、XMLコードをNUCLEO-F401RE向けに調整する。 15

(16)

無償IDE(CoIDE)への対応にチャレンジ

エクスポート。

• Python jinja2パッケージが必要。インストール後、project.py。

• > cd …¥mbed-master¥workspace_tools

• > python project.py -m NUCLEO_F401RE -p 38 -i coide

• -p 38: テスト番号38 = [ 38] MBED_10: Hello World

• main()実⾏時に”Hello World”をシリアル出⼒した後、LED点滅。

CoIDE v1.7.6をインストール。外部ツールチェーンの

bin/ディレクトリパスをツールに理解させる。

CoIDEからターゲットへの接続時にEclipse環境で必要な

オンチップデバッガのOpen-OCD不要。

• CoIDE内蔵デバッガがST-Link & J-Linkに対応している。

(17)

いつかやりたいこと

サポート業務で使っているソフトウェア治具のmbedへの

ポーティング。

17 UART Type commands Parse commands command line interpreter libug + core user codes

applet applet applet

standard peripheral library . . . hardware CMSIS (for STM32x) applet uCJIG

(18)

以上です。

参照

関連したドキュメント

ᄑᛵ᝭ȾɕᤛȶȲǾᒲऺ࣊ɁᯚȗǾȗɢəɞαᭅॴȟᯚȗʬʑʵȺȕɞȦȻȟɢ ȞɞǿȦɁျᝲᄑᛵ᝭Ɂᆬᝓͽഈȟާ஧ȾȺȠɞȦȻȟǾÌÅÓ ʬʑʵɁТɟȲཟ ɁˢȷȺɕȕɞǿ

[r]

※規制部門の値上げ申 請(平成24年5月11 日)時の燃料費水準 で見直しを実施して いるため、その時点 で確定していた最新

[r]

①正式の執行権限を消費者に付与することの適切性

消費電力の大きい家電製品は、冬は平日午後 5~6 時前後での同時使用は控える

2012 年度時点では、我が国は年間約 13.6 億トンの天然資源を消費しているが、その

2012 年度時点では、我が国は年間約 13.6 億トンの天然資源を消費しているが、その