Hatena Blog細胞

@shimezikun 思いつきやメモなど

STM32CubeIDEでSTM32F4Discoveryのデモプロジェクトをビルドする

はじめに

この記事はSTM32CubeIDEでSTM32F4DiscoveyのDemonstrationsプロジェクトをビルドするための備忘録です。作業の勢いで書いているので間違っている部分もあるかもしれません。参考程度にしてください。STM32F4Discoveryは、STM32F407というマイコンの評価ボードです(秋月電子での発売日が2011年なので少し古めです)。そしてSTM32CubeIDEはSTマイクロエレクトロニクスが2019年5月に発表したSTM32向けのIDEになります。

環境

  • OS
  • STM32CubeIDE
    • 1.4.2
  • STM32F4Discovery
    • MB997C (PCB revision C)
  • Project
    • Demonstrations

デモプロジェクトの作成

STM32CubeIDEを開き、File > New > STM32 Projectと選択すると、STM32 Projectの別ウインドウが開きます。このウインドウからExample Selectorタブを選択し、左側のExample FilterからでSTM32F4DiscoveryのExampleを絞り込んでいきます。絞り込めたらDemonstrationsを選択しNextをクリックしてプロジェクトを作成していきます。

f:id:shimezikun:20201003162036p:plain
Example Selector

ビルド(失敗)

Demonstrationsプロジェクトをビルドしてみましょう。Project > Build allを選択もしくはCtrl-Bでビルドします。

make: *** No rule to make target 'C:/Users/***/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c', needed by 'Middlewares/STM32_USBD_Library/Core/usbd_core.o'.  Stop.
"make all" terminated with exit code 2. Build might be incomplete.

はい。失敗しました。usbd_core.cが無いようです。

原因

f:id:shimezikun:20201003164639p:plain
File not found.

Project Explorerで確認すると当該ファイル名はIDEには登録はされていますがファイル自体が存在していないようです。ファイルをダブルクリックで開いてみるとFile not foundと表示されます。Workspaceを直接エクスプローラで覗いてみてもファイルはありませんでした。DemonstrationsをSTM32CubeIDEのプロジェクトにコンバートした時に発生したバグでしょうか。

対処法

ライブラリのダウンロード

不足しているファイルを補います。具体的にはSTMicroがGitHubにあげているSTM32CubeF4リポジトリからダウンロードしてきます。
github.com
上記のSTM32CubeF4ライブラリをcloneもしくはDownload zipしてローカルに保存しておきます。

ファイルのコピー

ダウンロードしたライブラリから不足しているファイルを探して手動でコピーします。Project Explorerに不足ファイルをドラッグアンドドロップするとコピーできます。ファイルを上書きする旨を確認するダイアログが出たらOverwriteもしくはOverwrite allを選択してください。workspaceにファイルを直接コピーするのは止めた方が良いです。STM32CubeIDE(というかeclipse)がおかしくなります。

私の場合はMiddlewaresとBSPディレクトリ以下のファイルが不足していたので手動でコピーしました。ざっと見て不足しているファイルが無くなったらビルドをしてみましょう。

えいっ。

f:id:shimezikun:20201003171713j:plain
lis302dl.h

あっ…。

ライブラリとインクルードパスの修正

加速度センサのヘッダファイルが存在しないみたいです。先ほどダウンロードしたライブラリから追加します。エラー表示に従いlis302dl.hとlis3dsh.hを、lis302dl.cとlis3dsh.cと同じディレクトリにコピーします。確認ダイアログが出た場合はCopy filesを選択してみてください。
再ビルドします。えいっ。

../Dirvers/Components/lis302dl.h:48:10: fatal error: ../Common/accelero.h No such file or directory
#include "../Common/accelero.h"
         ^~~~~~~~~~~~~~~~~~~~~
compilation terminated.

……。共通ライブラリが無いみたいです。ダウンロードしたライブラリから./Common/以下を探してドラッグアンドドロップで丸ごとコピーします。
再々ビルドします。えいっ。

Finished building target: Demonstrations.elf
 
arm-none-eabi-size   Demonstrations.elf 
   text	   data	    bss	    dec	    hex	filename
  18120	    568	   3888	  22576	   5830	Demonstrations.elf
Finished building: default.size.stdout
 
arm-none-eabi-objdump -h -S  Demonstrations.elf  > "Demonstrations.list"
Finished building: Demonstrations.list
 
arm-none-eabi-objcopy  -O binary  Demonstrations.elf  "Demonstrations.bin"
Finished building: Demonstrations.bin
 

17:22:17 Build Finished. 0 errors, 0 warnings. (took 6s.197ms)

やっとビルドが通りました。良かったですね。成果物をSTM32F4Discoveryに焼いてみて確認してみましょう。評価ボードとPCをMicroUSBで接続すれば加速度マウスになります。

所感

  • 動かない物をリリースしないで
  • eclipseベースのIDEはしんどい