ラベル F401RE の投稿を表示しています。 すべての投稿を表示
ラベル F401RE の投稿を表示しています。 すべての投稿を表示

2014年11月1日土曜日

mbedオフライン環境にEm::Blocks IDEを使う(Nucleo F401RE編)



Em::Blocks IDEをNucleo F401REのmbedのオフライン環境に試してみました。
本体がC++で書かれているのでCoIDEやLPCXpressoIDEに比べて軽快に動きます。
GCCコンパイラは内蔵されているので別途インストールする必要はありません。

Em::Blocks IDEのインストール

次のサイトから EmBlocks_2.30.zip をダウンロードする。
http://www.emblocks.org
http://www.emblocks.org/web/downloads-main
(ファイルサイズは40Mバイトと小さいのだが回線が細いようなのでダウンロードに20分くらいかかってしまった)
展開して、EmBlocks_2.30.exe を実行する。

プログラムのエクスポート

mbedオンラインコンパイラからプログラムを emblocks でエクスポートする。


exportしたファイル(mbed_blinky_emblocks_nucleo_f401re.zip)を展開しておく。

Em::Blocksで mbed_blinky.eix をインポートする。


《重要》 mbedライブラリを最初にリンクするように移動する。(Project build options)
最後にリンクしているとmbedライブラリのwait関数(wait_api.c)とシステムライブラリ のwait関数(syswait.c)が衝突してリンクエラーになります。


ビルドする。buildフォルダに 実行ファイル mbed_blinky.elf が作成されます。


実行ファイルを書込むだけの機能は内蔵されていないのでデバッガを開始させて書込む。
Reset Run でプログラムを実行します。


(2014/11/1)
---

2014年10月23日木曜日

mbedオフライン環境にCoIDEを使う



Nucleo F401REのmbedのオフライン環境にMDK-Liteを使っていたのだが、
32Kバイトを超えるコードはリンク出来ないのでサイズ制限のないCooCox CoIDEを試してみました。

CoIDEのインストールと設定


CooCoxのサイトからCoIDEをダウンロードしてインストールする。
http://www.coocox.org/CooCox_CoIDE.htm
http://www.coocox.org/Tools/coIDE-1.7.7.exe 422MB(442,827,819バイト)

CoIDEを起動して、Toolchain Path を設定する。


本来はgccを新規にインストールするのだが、LPCXpresso付属のgccを使う。


プログラムのエクスポート


mbedオンラインコンパイラのexportの変更によりmbedライブラリが付くようになりましたのでmbed-srcへの変更は必要なくなりました。
mbedオンラインコンパイラからexportする前にmbedライブラリを mbed-src に切替える。
(mbedライブラリを削除して mbed-src をインポートする)
http://developer.mbed.org/users/mbed_official/code/mbed-src/


プログラムをToolchain CooCox CoIDE形式でエクスポートする。


exportしたファイル Nucleo_blink_led_coide_nucleo_f401re.zip を展開する。

CoIDE でプロジェクトファイル Nucleo_blink_led.coproj を開く。(Open Project…)

リビルドする。(Rebuild)

実行コードをNucleo-F401REに書き込み、実行する。(Download Code To Flash)

現在の問題点

wait()関数が速くなってLチカが10倍くらい速く動く。
しかし、printf()を実行した後なら正しい時間間隔になる。原因は未調査です。

(2014/10/23)
(2014/11/1)修正 mbed-srcへの変更、現在の問題点を削除。
---

2014年6月15日日曜日

Nucleo F401REでpython-on-a-chipを動かす



python-on-a-chipオンラインコンパイラで使っているバーチャルマシンはmbedライブラリで構築されているので
mbedのプラットフォームならターゲットを比較的容易に追加する事が出来ます。

Nucleo F401REの追加例。

バーチャルマシン

p14p/pinname.py でピン名称テーブルの作成。PinName.h
ヒープサイズ、ユーザのバイトコードの開始アドレスの設定。main.cpp
Nucleo F401REはAnalogOutクラスが無かったのでダミークラスとして追加。main_nat.cpp
mbedオンラインでコンパイルしてバーチャルマシンのバイナリーを作成。pymite_F401RE.bin

オンラインコンパイラ

ターゲットのメニューに ST Nucleo F401RE を追加。pymbed_bt_ace.html
ターゲットに f401re を追加。pymbed.py

ソースコード:
https://code.google.com/p/python-on-a-chip/ バーチャルマシン本体
http://mbed.org/users/va009039/code/pymite/ オンラインコンパイラ用のバーチャルマシン
https://bitbucket.org/va009039/pymbed/ オンラインコンパイラ

(2014/6/15)
---

2014年6月12日木曜日

Nucleo F401RE用のUSBホストライブラリの試作



Nucleo F401REはmbedのUSBホストでサポートされていないので簡易版を試作してみました。

ホストチャネルドライバ(stm32f4xx_hal_hcd.c)を改造してKL46Z-USBHostのハードウェア依存部分への
インターフェースを互換にしたので、USBDeviceのようにターゲットを切替えるだけでNucleo F401REと
FRDM-KL46Zは同じライブラリを使えるようにしました。
ですのでKL46Zで使うだけなら以前に作成したKL46Z-USBHostと完全互換です。

KL46Zの場合は1つのエンドポイントパイプを全てのエンドポイントが共有して送受信していましたが、
F401REでは8個のエンドポイントパイプ(ホストチャネル)を持っているので、
コントロール転送、バルク転送、インタラプト転送、アイソクロナス転送で分けて使っています。

たぶん、KL46Zのように共有できると思うのですが、ホストチャネルHALTの仕組みを完全に理解していないのと、
デバッグで各チャネルのレジスタの振る舞いがみたいので、暫時分けています。
今のところアイソクロナス転送は1つだけに限定しています。

ホストチャネルドライバは汎用USBホストに使うよりは、
あらかじめ接続されるUSBデバイスが解っているUSBホストの作成には相性がよさそうです。

現在の重大な不具合はUSBメモリへの書き込みが出来ない。
BOT(バルクオンリー転送)での書き込みに失敗します。
送信FIFOの容量が足りないのか、連続トークンOUTがいけないのか今後調べてみたいです。


使用例をmbedサイトに置きました。KL46Z用のサンプルプログラムでライブラリを入れ替えただけです。
他にもGPSレシーバー(バルク転送IN)、マウス(インタラプト転送IN)は動きました。

Webカメラの使用例(アイソクロナス転送IN)
F401RE-USBHostC270_example

BTstackでの使用例、Bluetoothマウスからの受信のみ。(インタラプト転送IN、バルク転送IN,OUT)
F401RE-BTstack_example

参考:
stm32f4xx_hal_hcd.c
stm32f4xx_ll_usb.c
RM0368 Reference manual STM32F401xB/C and STM32F401xD/E advanced ARM-based 32-bit MCUs
UM1720 User manual STM32Cube™ USB host library

(2014/6/12)

USBメモリへの書き込み不具合を解消しました。
F401RE-USBHost

(2014/6/13追加)
---