記事の概要
STM32 Discovery開発ボードのSTM32F407 DISCOVERY Boardを用いて開発環境を構築し、LED点滅をさせるプロジェクトを作成します。
統合開発環境にはKeilの無料試用版を用います。
他のSTM32 Discovery開発ボードでも同様の手順で環境構築できると思います。
プロジェクトの作成にはCubeMXを使用する方法と使用しない方法があります。
本記事では、CubeMXを使用しない方法を紹介します。
Keilのインストール
Keilを以下のサイトからダウンロードしてください。
名前、e-mailなどの入力を求められますので、必要事項を入力してsubmitをクリックしてください。
以下のMDK***.EXEファイルをダウンロードして実行します。

インストール先を指定して(初期設定で問題なし)、次へをクリックします。
パッケージのインストール
インストール後、自動でパッケージのインストール画面が表示されます。
Boardタブを選択し、STM32F4-Discoveryをクリックすると、右画面が表示されます。
その中からKeil::STM32F4xx_DFPのInstallをクリックしてください。
後で追加でパッケージのインストールをしたい場合は、メニューのパッケージ・アイコンをクリックしてください。
新規プロジェクト作成(CubeMXを使用しない場合)
以下の動画を参考にして新規プロジェクトを作成します。
新規プロジェクト作成
新規プロジェクトを作成するには、Project→New $\mu$Vision Projectをクリックします。
プロジェクトの名称を設定して作成をクリックします。
「新しいフォルダ」から新規プロジェクト用のフォルダを作成して、そのフォルダ内に置くことをお勧めします。
マイクロプロセッサの指定
STM32F407 DISCOVERY Boardに使用されているのはSTM32F407VGT6なので、STM32F407→STM32F407VGTxをクリックします。
ソフトウェアコンポーネントの選択
次に、自動でソフトウェアコンポーネント設定画面が開きます。

各項目を以下のように設定します。
- Board Support
- STM32F4-Discovery
- CMSIS
- CORE
- Device
- Startup
- STM32Cube Framework(API)
- Classic
- オレンジ色の表示が出た場合はResolveをクリック
- Classic
- STM32Cube HAL
- 使用する周辺モジュールを追加で選択
- オレンジ色の表示が出た場合はResolveをクリック
- 使用する周辺モジュールを追加で選択
以下の画面のように、項目を選択時にオレンジ色になった場合は、Resoleveをクリックして必要な項目を自動選択します。

以上の設定完了後、以下の画面が開きます。Deviceにソフトウェアコンポーネントの設定が反映されています。
後でソフトウェアコンポーネントを再設定したい場合は、メニューのソフトウェアコンポーネント・アイコンをクリックしてください。
オプション設定
次に以下のオプション・アイコンをクリックしてオプション設定をします。
開発ボードをPCに接続した状態で、「Linker」タブのUseからST-Linkerを選択します。
次にUseの隣にあるsettingをクリックします。
場合によってはST-Linkのインストールもしくはアップデートが必要になります。
以下のようなアップデート画面が表示された場合は、Driver Connectをクリックしてドライバーを検索し、Yesをクリックしてアップデートします。
ST-Linkが検知されていれば、setting画面にST-Linkが表示されているはずです。
Flash DownloadのReset and Runにチェックを入れておきます。
これによりファームウェアを開発ボードにダウンロードすると、リセットを押さなくても自動でプログラムが開始するので便利です。
先に紹介した動画では、「C/C++(AV6)」タブにおいてDefineにUSE_HAL_DRIVERと入力し、Include Pathにプロジェクト・ファイルの置かれているフォルダを指定していましたが、私の環境ではこの設定は必要ありませんでした。
先に紹介した動画では、「Target」タブにおいて外部クリスタルを8MHzに設定していますが、実際には選択できません。
以下のサイトを見ますと、外部クリスタルはデバイスシミュレーションを使用する場合のみに設定できるので、開発ボードでデバッグする場合には設定する必要がないそうです。
新しいCortex-Mデバイスの周辺機器シミュレーションドライバーが利用できないため、この設定は.uvprojxプロジェクトでは無効になっているとのことです。
サンプルプロジェクトのビルドとダウンロード
次にLEDを点滅させるプログラムを作成して、ビルドとダウンロードしてみます。
ここでは、先の動画内で紹介されていた以下のサンプルプロジェクトを用います。
このサンプルプロジェクトは、HAL libraryを使用せず、レジスタの設定に値を代入しています。
なお、このサンプルプロジェクトのために、最適化レベルをO1からO0に変更します。
サンプルプロジェクトはforループを2000000回繰り返して一定の待機時間を作ります。
ですが最適化レベルがO1になっていると、これを無意味なforループと判定して削除してしまいます。

Projectメニューにおいて、ファイルを追加したいフォルダを右クリックしてAdd New Itme...を選択し、新規ファイルを追加します。
C言語ファイルのmain.cを作成して、フォルダの適当な場所に置きます。
main.cに先ほどのサンプルプロジェクトのmain.cをコピー&ペーストしてから、メニューに表示されているビルド・アイコンをクリックします。
ビルドが成功したのならば、メニューに表示されているダウンロード・アイコンをクリックします。
書き込みに成功すると、(オプション設定において、書き込み後に自動でリセット開始する設定にしたので)LED点滅が始まります。
Debug→Start/Stop Debug Sessionをクリックすれば、デバック画面に遷移します。
ブレークポイントを置くなどしてRUNをクリックすれば、デバックが開始されます。
Start/Stop Debug Sessionを再度クリックすればデバック終了します。
HAL libraryの利用
サンプルプロジェクトと同じことを、HAL libraryを利用して書き直すと以下のようになります。
# include "stm32f4xx.h"
int main(){
// Loop Variables
uint32_t i;
__HAL_RCC_GPIOD_CLK_ENABLE();
GPIO_InitTypeDef myLEDconfig;
myLEDconfig.Mode = GPIO_MODE_OUTPUT_PP;
myLEDconfig.Pin = GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15;
HAL_GPIO_Init(GPIOD, &myLEDconfig);
while(1)
{
HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15);
// Delay
for(i = 0; i < 2000000; i++){}; // Loop repeats 2,000,000 implementing a delay
}
}
CubeMXによる新規プロジェクト作成
本記事では解説しませんが、CubeMXを使用する方法は以下を参照してください。
以下の動画とQiita記事が参考になります。
CubeMXは以下からインストールできます。