mbedのコンパイラーを使ったファームウェアのコンパイルを行いSTM32F4 Discoveryボードに書き込むには、いくつかやり方があるようですが、ST-Linkユーティリティを使う方法について簡単に説明します。開発環境はUbuntu 16.04にST-Linkをインストールしたものです。

ST-Linkユーティリティーをインストールするにはこの動画を参考にすると良いと思います。

 

mbedのオンラインコンパイラーでSTM32F4 Discoveryと同じプロセッサーを搭載したSeeed Archというボードをプラットフォームとして選択します。

stm32f4disco_mbed_01

新規プロジェクトを作成します。(デフォルトでLED点滅プログラムの雛形が作成されます)

ここではプログラム名をstm32f4disco_mbed_blinkyとしました。

stm32f4disco_mbed_02

main.cppを開きLEDのGPIOピンの名前を修正します。

STM32F4 Discoveryの場合は緑のLEDがPD_12、オレンジがPD_13、赤がPD_14、青がPD_15です。今回はオレンジのLEDを点滅させるので

DigitalOut myled(PD_13);

とします。stm32f4disco_mbed_03

main.cppを保存してコンパイル。

stm32f4disco_mbed_blinky_ARCH_MAX.binというバイナリファイルがダウンロードされる筈です。(ファイルの名前はプログラム名_ボード名.binという形式です)

stm32f4disco_mbed_04

ST-Linkユーティリティーを使ってボードに書き込みます。

stm32f4disco_mbed_05

コマンドの実行結果(テキスト)

$ /usr/local/bin/st-flash write stm32f4disco_mbed_blinky_ARCH_MAX.bin 0x8000000
st-flash 1.3.1
2017-06-08T15:17:32 INFO src/common.c: Loading device parameters....
2017-06-08T15:17:32 INFO src/common.c: Device connected is: F4 device, id 0x10076413
2017-06-08T15:17:32 INFO src/common.c: SRAM size: 0x30000 bytes (192 KiB), Flash: 0x100000 bytes (1024 KiB) in pages of 16384 bytes
2017-06-08T15:17:32 INFO src/common.c: Attempting to write 20640 (0x50a0) bytes to stm32 address: 134217728 (0x8000000)
Flash page at addr: 0x08004000 erasedEraseFlash - Sector:0x1 Size:0x4000 
2017-06-08T15:17:33 INFO src/common.c: Finished erasing 2 pages of 16384 (0x4000) bytes
2017-06-08T15:17:33 INFO src/common.c: Starting Flash write for F2/F4/L4
2017-06-08T15:17:33 INFO src/flash_loader.c: Successfully loaded flash loader in sram
enabling 32-bit flash writes
size: 20640
2017-06-08T15:17:33 INFO src/common.c: Starting verification of write complete
2017-06-08T15:17:33 INFO src/common.c: Flash written and verified! jolly good!

 

僕の環境では/usr/local/bin にST-Linkユーティリティ(st-flash)がインストールされています。

 

この方法とCubeMXとSystem Workbench for STM32を使った方法とで、生成されたバイナリファイルの大きさを比べてみると、mbedオンラインコンパイラーでコンパイルした.binファイルは約20.6Kバイトに対してSystem Workbench for STM32を使った場合は4.2Kバイトと、だいぶファイルの大きさが違います。

大きなメモリを積んだボードですので、mbedに慣れている方はmbedコンパイラを使うとプログラムが簡単に書けて良いかもしれません。