2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

STM32 Discovery開発ボードのKeilを用いた開発環境構築

Last updated at Posted at 2022-01-23

記事の概要

STM32 Discovery開発ボードのSTM32F407 DISCOVERY Boardを用いて開発環境を構築し、LED点滅をさせるプロジェクトを作成します。

統合開発環境にはKeilの無料試用版を用います。
他のSTM32 Discovery開発ボードでも同様の手順で環境構築できると思います。

プロジェクトの作成にはCubeMXを使用する方法と使用しない方法があります。
本記事では、CubeMXを使用しない方法を紹介します。

Keilのインストール

Keilを以下のサイトからダウンロードしてください。

名前、e-mailなどの入力を求められますので、必要事項を入力してsubmitをクリックしてください。
以下のMDK***.EXEファイルをダウンロードして実行します。

Keilインストール2.png

次へをクリックします。
Keilインストール3.png

チェックボックスに同意して、次へをクリックします。
Keilインストール4.png

インストール先を指定して(初期設定で問題なし)、次へをクリックします。
Keilインストール5.png

名前、email、所属を入力して、次へをクリックします。
Keilインストール6.png

インストール完了後、次へをクリックします。
Keilインストール7.png

インストールが成功すると以下の画面が表示されます。
Keilインストール8.png

パッケージのインストール

インストール後、自動でパッケージのインストール画面が表示されます。
パッケージインストーラ.png

Boardタブを選択し、STM32F4-Discoveryをクリックすると、右画面が表示されます。
その中からKeil::STM32F4xx_DFPのInstallをクリックしてください。
パッケージインストーラ2.png

後で追加でパッケージのインストールをしたい場合は、メニューのパッケージ・アイコンをクリックしてください。
パッケージインストーラ0.png

新規プロジェクト作成(CubeMXを使用しない場合)

以下の動画を参考にして新規プロジェクトを作成します。

新規プロジェクト作成

新規プロジェクトを作成するには、Project→New $\mu$Vision Projectをクリックします。
新規プロジェクト作成1.png

プロジェクトの名称を設定して作成をクリックします。
「新しいフォルダ」から新規プロジェクト用のフォルダを作成して、そのフォルダ内に置くことをお勧めします。
新規プロジェクト作成2.png

マイクロプロセッサの指定

次にマイクロプロセッサの指定画面が表示されます。
新規プロジェクト作成3.png

STM32F407 DISCOVERY Boardに使用されているのはSTM32F407VGT6なので、STM32F407→STM32F407VGTxをクリックします。
新規プロジェクト作成3b.png

ソフトウェアコンポーネントの選択

次に、自動でソフトウェアコンポーネント設定画面が開きます。

新規プロジェクト作成4a.png

各項目を以下のように設定します。

  • Board Support
    • STM32F4-Discovery
  • CMSIS
    • CORE
  • Device
    • Startup
    • STM32Cube Framework(API)
      • Classic
        • オレンジ色の表示が出た場合はResolveをクリック
    • STM32Cube HAL
      • 使用する周辺モジュールを追加で選択
        • オレンジ色の表示が出た場合はResolveをクリック

以下の画面のように、項目を選択時にオレンジ色になった場合は、Resoleveをクリックして必要な項目を自動選択します。

新規プロジェクト作成4b.png

以上の設定完了後、以下の画面が開きます。Deviceにソフトウェアコンポーネントの設定が反映されています。
後でソフトウェアコンポーネントを再設定したい場合は、メニューのソフトウェアコンポーネント・アイコンをクリックしてください。
新規プロジェクト作成5.png

オプション設定

次に以下のオプション・アイコンをクリックしてオプション設定をします。
新規プロジェクト作成6a.png

開発ボードをPCに接続した状態で、「Linker」タブのUseからST-Linkerを選択します。
新規プロジェクト作成6b.png

次にUseの隣にあるsettingをクリックします。
場合によってはST-Linkのインストールもしくはアップデートが必要になります。
以下のようなアップデート画面が表示された場合は、Driver Connectをクリックしてドライバーを検索し、Yesをクリックしてアップデートします。
新規プロジェクト作成6c.png

ST-Linkが検知されていれば、setting画面にST-Linkが表示されているはずです。
新規プロジェクト作成6d.png

Flash DownloadのReset and Runにチェックを入れておきます。
これによりファームウェアを開発ボードにダウンロードすると、リセットを押さなくても自動でプログラムが開始するので便利です。
新規プロジェクト作成6e.png

先に紹介した動画では、「C/C++(AV6)」タブにおいてDefineにUSE_HAL_DRIVERと入力し、Include Pathにプロジェクト・ファイルの置かれているフォルダを指定していましたが、私の環境ではこの設定は必要ありませんでした。

先に紹介した動画では、「Target」タブにおいて外部クリスタルを8MHzに設定していますが、実際には選択できません。
新規プロジェクト作成6h.png

以下のサイトを見ますと、外部クリスタルはデバイスシミュレーションを使用する場合のみに設定できるので、開発ボードでデバッグする場合には設定する必要がないそうです。
新しいCortex-Mデバイスの周辺機器シミュレーションドライバーが利用できないため、この設定は.uvprojxプロジェクトでは無効になっているとのことです。

サンプルプロジェクトのビルドとダウンロード

次にLEDを点滅させるプログラムを作成して、ビルドとダウンロードしてみます。
ここでは、先の動画内で紹介されていた以下のサンプルプロジェクトを用います。

このサンプルプロジェクトは、HAL libraryを使用せず、レジスタの設定に値を代入しています。

なお、このサンプルプロジェクトのために、最適化レベルをO1からO0に変更します。
サンプルプロジェクトはforループを2000000回繰り返して一定の待機時間を作ります。
ですが最適化レベルがO1になっていると、これを無意味なforループと判定して削除してしまいます。

新規プロジェクト作成6i.png

Projectメニューにおいて、ファイルを追加したいフォルダを右クリックしてAdd New Itme...を選択し、新規ファイルを追加します。
新規プロジェクト作成7.png

C言語ファイルのmain.cを作成して、フォルダの適当な場所に置きます。
新規プロジェクト作成7b.png

main.cに先ほどのサンプルプロジェクトのmain.cをコピー&ペーストしてから、メニューに表示されているビルド・アイコンをクリックします。
新規プロジェクト作成8.png

ビルドが成功したのならば、メニューに表示されているダウンロード・アイコンをクリックします。
書き込みに成功すると、(オプション設定において、書き込み後に自動でリセット開始する設定にしたので)LED点滅が始まります。
新規プロジェクト作成9a.png

Debug→Start/Stop Debug Sessionをクリックすれば、デバック画面に遷移します。
新規プロジェクト作成9b.png

ブレークポイントを置くなどしてRUNをクリックすれば、デバックが開始されます。
Start/Stop Debug Sessionを再度クリックすればデバック終了します。
新規プロジェクト作成9c.png

HAL libraryの利用

サンプルプロジェクトと同じことを、HAL libraryを利用して書き直すと以下のようになります。

main.c
# 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は以下からインストールできます。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?