STM32F7 Discoveryでmbed_blinkyとかが動いた
DISCO_F746NGはmbedプラットフォームに登録されていますが、Pre-order のリンクがあるだけで、オンラインコンパイラに追加できません。しかしmbed-srcにはすでにDISCO_F746NGのソースがありますので、GCCでビルドして使えるかためしてみようと思います。
GCCはLaunchpadがすでにcortex-m7対応してるようなのですが、STM32cubeF7のデモアプリもビルドしたくて、SW4STM32をインストールしたので、こっちのGCCを使うことにしました。
mbed-srcをチェックアウトして、ビルドスクリプトでビルドします。private_settings.pyは無くてもよいですが、warningがでるので作っておきます。
$ git clone https://github.com/mbedmicro/mbed.git $ cd mbed $ touch workspace_tools/private_settings.py $ python workspace_tools/build.py -mDISCO_F746NG -tGCC_ARM DISCO_F746NG target is not yet supported by toolchain GCC_ARM DISCO_F746NG target supports ARM, uARM, IAR toolchains Completed in: (0.00)s Build skipped: * GCC_ARM::DISCO_F746NG
むむ、GCC_ARMでコンパイルできなくされているのでDISCO_F746NGの設定にGCC_ARMを追加してみます。それから、GCCのmcutypeにcortex-m7fというのが無いみたいなので、cortex-m7に変更してビルドします。
$ diff -U3 workspace_tools/targets.py.orig workspace_tools/targets.py --- workspace_tools/targets.py.orig 2015-07-24 17:29:50.254856800 +0900 +++ workspace_tools/targets.py 2015-07-24 17:42:23.361956100 +0900 @@ -769,9 +769,9 @@ class DISCO_F746NG(Target): def __init__(self): Target.__init__(self) - self.core = "Cortex-M7F" + self.core = "Cortex-M7" self.extra_labels = ['STM', 'STM32F7', 'STM32F746', 'STM32F746NG'] - self.supported_toolchains = ["ARM", "uARM", "IAR"] + self.supported_toolchains = ["GCC_ARM", "ARM", "uARM", "IAR"] self.default_toolchain = "uARM" self.detect_code = ["0815"] $ python workspace_tools/build.py -mDISCO_F746NG -tGCC_ARM --silent Building library CMSIS (DISCO_F746NG, GCC_ARM) [Warning] stm32f7xx_hal_pcd.c@1152: In function 'PCD_WriteEmptyTxFifo': comparison between signed and unsigned integer expressions [-Wsign-compare] [Warning] stm32f7xx_hal_pcd.c@1167: In function 'PCD_WriteEmptyTxFifo': comparison between signed and unsigned integer expressions [-Wsign-compare] Building library MBED (DISCO_F746NG, GCC_ARM) [Warning] i2c_api.c@417: In function 'i2c_slave_read': array subscript has type 'char' [-Wchar-subscripts] Library: libmbed.a Completed in: (58.12)s Build successes: * GCC_ARM::DISCO_F746NG
とビルドはとおりました。次にこのmbedライブラリのテストプログラムをビルドしてみます。テストプログラムのビルドはmake.pyで行います。-p0 はテストプログラム番号です。-dオプションで直接書き込みます。
$ python workspace_tools/make.py -mDISCO_F746NG -tGCC_ARM -p0 -d /mnt/mbed Building project BASIC (DISCO_F746NG, GCC_ARM) Compile: main.cpp Compile: test_env.cpp Link: basic Elf2Bin: basic Image: ~/work/mbed/build/test/DISCO_F746NG/GCC_ARM/MBED_A1/basic.bin
動かないサンプルもありますが、ひどいことにはならなそうなので、次はmbed_blinkyをビルドしてみます。
$ mkdir mbed_blinky $ sh <<SOURCE #include "mbed.h" DigitalOut myled(LED1); int main() { while(1) { myled = 1; wait(0.2); myled = 0; wait(0.2); } } SOURCE $ python workspace_tools/make.py -m DISCO_F746NG -t GCC_ARM --source ~/work/mbed/mbed_blinky --buid ~/work/mbed/mbed_blinky -d /mnt/mbed Building project MBED_BLINKY (DISCO_F746NG, GCC_ARM) Compile: main.cpp Compile: test_env.cpp Link: mbed_blinky Elf2Bin: mbed_blinky Image: ~/work/mbed/mbed_blinky/mbed_blinky.bin
これでmbed_blinkyが動きました。次は他のI/Fも触っていきたいと思います。