Edited at

STM32CubeMXでSTM32F4Discoveryを動かす1~Lチカ編~

More than 3 years have passed since last update.


はじめに

 筆者がはじめてSTM32マイコンに触れたのは2012年である。ちなみにマイコンそのものを学び始めたのも同時期だ。

 その頃はプロジェクトを作成する際に利用するライブラリとして「StandardPeripheralLibrary」(以下SPL)が主流であったと記憶している。

 時は経ち久々にSTM32をいじろうかと思ったところ、どうも状況が様変わりしているようである。CubeMXだのHALライブラリだの見慣れない用語が飛び交っている。この辺の事情はSTM32 - 詳細表示 - チカラの技術 - Yahoo!ブログで解説されている。

 ST社が「これからはHALライブラリを使ってね」ということではそれに従わざるをえないだろう。CubeMXというGUIでのコード生成ツールも使い勝手が良さそうだ。これまでプロジェクトを新たに作成する際にはクロックの設定やそれに紐づくタイマの設定などに手こずっていたりしたが、GUIで一括管理できると意図せぬコーディングミスが潜む確率も格段と下がるだろう。

 SPLとHALライブラリとの間には全く互換性がないそうだ。CubeMXの恩恵を授かるにはHALライブラリについて一から学び直さなければならない。使ってみないとわからないことも多いので、まずは手持ちのSTM32F4DiscoveryをCubeMX+HALライブラリでいろいろいじってみようと思う。


開発環境

 筆者の開発環境は以下のとおりである。


  • OS: Windows7 32bit (VirtualBox上にインストールした)


  • IDE: Keil MDK-ARM v5.18


  • マイコンボード: STM32F4Discovery


 CubeMXを使って開発するためにはCubeMX本体とSTM32マイコンの各シリーズに対応するパッケージ(今回の場合STM32F4用)が必要である。

 CubeMXのインストーラは公式サイトから入手できる。

 STM32F4のパッケージはCubeMXを起動し、メニューバーの[Help]-[Install New Library]から「Firmware Package for Family STM32F4」を選択して[Install Now]をクリックすることで入手できる。


手順

CubeMXを使った具体的なプロジェクト作成手順を説明する。


  1. CubeMXを起動し、[New Project]を選択する。



  2. [Board Selector]タブから、下図のようにボードの種類を選択し、[OK]をクリックする。



3.マイコンの各ピンを設定するための画面が現れる。今回は何も設定をいじらず、このままの状態で進める。

4.コード生成のアイコンをクリックする。

5.[Project Name]や[Project Location]を入力する。[Toolchain/IDE]は筆者環境の場合[MDK-ARM v5]を選択する。入力が済んだら[OK]をクリックする。

6.コード生成が完了すると下図のようなウィンドウが現れる。[Open Project]をクリックする。

7.先ほど指定した[ToolChain/IDE]に対応するIDE(筆者の場合Keil MDK-ARM v5)が起動する。プロジェクトファイルの中から[main.c]をダブルクリックし、編集画面を表示させる。

8.[main.c]のmain()関数内にあるwhile文の中に以下のコードを追加する。


main.c

HAL_Delay(500);

HAL_GPIO_WritePin(LD3_GPIO_Port, LD3_Pin, GPIO_PIN_SET);
HAL_Delay(500);
HAL_GPIO_WritePin(LD3_GPIO_Port, LD3_Pin, GPIO_PIN_RESET);

9.STM32F4DiscoveryをPCに接続し、①コンパイル、②書き込み のアイコンを順番にクリックする。


結果

 上記手順に従ってプロジェクトを作成し、STM32F4Discoveryにプログラムを書き込むと、LD3(オレンジ色のLED)が1秒周期で点滅を繰り返すことが確認できた。


感想

 驚くほど簡単にプロジェクトを作成することができた。STM32F4Discoveryに至っては周辺回路や付属するデバイスを有効化するためのソースコードが自動生成されるので、動作させたいプログラムだけに集中してコーディングを進めることができる。

 HALライブラリに関しては確かにSPLとは記法が全く異なるが、ライブラリの中身を見ると使い方が説明されていたりするのでさほど覚え直すのに苦労しなさそうである。