不確定特異点

広く深く、ところどころ超深く

STM32F4 Discovery の開発環境 (1)

Cortex-M4 コアが載っているマイコン基板 STM32F4 Discovery をゲットしました。(なぜか画像が横向き…)

f:id:tanakahx:20150821234926j:plain

コアクロックは Max 168MHz まで回せ、1M Flash + 192 KB SRAM のメモリ付き、というマイコンにしてはリッチなスペックにも関わらず価格は 2000 円という非常にコスパの良い基板です。三軸加速度センサとか USB OTG とかオーディオセンサとか DAC とか色々盛りだくさんな感じです。ST-LINK/V2 が組み込まれており、USB ケーブルで PC と接続するだけで Flash に書き込めるので、別途特別なライタは不要なのがうれしいですね。

まずは ST-LINK/V2 を使った Flash ライタプログラム stlink の環境から整えていきます。

github.com

普通に clone して、README 通りに以下のコマンドを実行。

$ ./autogen.sh
$ ./configure
$ make

configure で libusb がないとのエラーが出たので、以下のように追加インストールしました。

$ sudo apt-get install libusb-1.0-0-dev

実際に ROM データを Flash に書き込むには次のようなコマンドを実行します。(image は ROM データ)

$ ./st-flash write image 0x8000000

データシートを見ると 0x8000000 番地は Flash 領域で 0 番地にエイリアスされているようですので、ここに書いた ROM データで 0 番地から起動するということになります。

最初、VirtualBox 上の Linux から USB 接続しようとしたのですが、上記のコマンドを実行すると、

2015-08-21T14:24:34 WARN src/stlink-usb.c: Couldn't find any ST-Link/V2 devices

のようなエラーが出てしまいましたが、これは次の 2 点の設定が必要でした。

VirtualBox は Settings ⇒ Ports を次のように設定します。

f:id:tanakahx:20150822004038p:plain

続いて、Linux/etc/udev/rules.d に以下のファイルを置きます。

/etc/udev/rules.d/49-stlinkv2.rules

# stm32 discovery boards, with onboard st/linkv2
# ie, STM32L, STM32F4.
# STM32VL has st/linkv1, which is quite different

SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3748", \
    MODE:="0666", \
    SYMLINK+="stlinkv2_%n"

# If you share your linux system with other users, or just don't like the
# idea of write permission for everybody, you can replace MODE:="0666" with
# OWNER:="yourusername" to create the device owned by you, or with
# GROUP:="somegroupname" and mange access using standard unix groups.

最後に次のコマンドでこの設定ファイルを再読み込みします。

$ sudo udevadm control --reload-rules

lsusb を使って正しく認識されているかを確認できます。

$ lsusb
Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 002: ID 0483:3748 SGS Thomson Microelectronics ST-LINK/V2

ちゃんと ST-LINK/V2 と表示されました。これで st-flash コマンドで Flash 書き込みができるようになりました!