#背景
STM32の開発環境構築(無償でなんとかなる範囲)でずっと悩んでいました。
mbedはオンラインでの開発が前提のため、ネットワークの関係でアクセスできない環境&デバッガを使用できないのでNG。(自分がmbedでデバッガを使用する方法を知らないだけかもしれませんが…)
EclipseにARMのToolChainを入れて、OpenOCDと連携させようとしても上手くいかない。。
色々と試して、ようやく開発環境ができたのでメモ。
#環境
OS:Windows10 64bit
#ソフト
ソフト名:Sytem Workbench for STM32
URL:www.st.com
Eclipseベースの統合開発環境です。
#参考サイト
参考にしたサイトは以下。
開発環境構築
http://yuqlid.hatenablog.com/entry/2016/06/13/004001
OpenSTMの日本語化
http://d.hatena.ne.jp/replication/20150703/1435928324
#手順
(1) インストール
以下のサイトにアクセス。
http://www.openstm32.org/HomePage
ユーザ登録後に、環境に合うインストーラをダウンロード。Windows10用はないが、ひとまずWindows7用で動作する模様。
ファイル:install_sw4stm32_win_64bits-v1.14.0.exe
System WorkbenchはEclipseベースのソフトなので、Javaのランタイムが必要。インストールされてない場合はSystem Workbenchのインストール最中にDLサイトに誘導してくれるのでJREをインストール。
(2) System Workbenchの日本語化
前述の通り、System WorkbenchはEclipseベースのソフトなのでPleiades適用で日本語化が可能。以下のサイトからダウンロードし、readmeの記載内容に従って適用する。(readmeを読めば分かる程度の簡単な手順なので詳細は割愛。)
Pleiadesダウンロードサイト
http://mergedoc.osdn.jp/
(3) ST-LINK/V2-1のインストール
ST-LINK/V2-1のUSBドライバが必要なため、インストールされていなければ以下からダウンロードしてインストールする。
http://www.st.com/ja/embedded-software/stsw-link009.html
(4) プロジェクト作成
System Workbenchを起動。
初回起動はworkspaceをどこにするか聞いてくるので適当に指定(自分の場合はC:\Ac6\work)。
・「ファイル」→「新規」→「Cプロジェクト or C++プロジェクト」を選択。
プロジェクト名:適当に設定
プロジェクトタイプ:Ac6 STM32 MCU Project
ツールチェーン:Ac6 STM32 MCU GCC
「次へ」を選択。
・構成の選択で、Debug,Releaseを選択。
自分の場合はReleaseはしばらく使用予定ないのでDebugのみ選択。
「次へ」を選択。
・MCUのコンフィグレーションを選択。
使用するチップを選択。公式に出ている開発ボードであればドロップダウンリストから選択。
今回使用する基板はNucleoのstm32f411reなので、以下の通り選択。
系列:STM32F4
Board:STM32F411RE
・ファームウェアを選択
以下の3つから選択する。
- No firmware
- Standard Peripheral Library(StdPeriph)
- Hardware Abstraction Layer(Cube HAL)
2,3のどちらも最初はインターネットからファームウェアをPCにダウンロードするため少々時間がかかる。
以上でプロジェクト作成は完了。
参考までに。
3のCube HALはペリフェラルの抽象化を行い、移植性向上を狙ったドライバ。ペリフェラルの抽象化をしているだけあり、シンプルな使用方法では使いやすい。
→さらにRTOSやUSB,TCP/IPのミドルウェアを追加したのがCubeMXという話っぽいです。(間違っていれば指摘お願いします) CubeMXの話は、コメントに@mt08さんの詳細解説があるので参照。
2のStdPeriphはペリフェラルを直接使用するドライバのみの提供。リファレンスマニュアルとドライバを見ながら実装するイメージ。
#動作確認
一定間隔でユーザLEDを点滅させ、デバッガで様子をみる。
(1) プロジェクトのファームウェアはStdPeriphで作成。Nucleoのstm32f411reは、ユーザLEDがPA5に接続されていることに気を付けてコーディングする。
#include "stm32f4xx.h"
#include "stm32f4xx_gpio.h"
int main(void)
{
//GPIOにクロック供給
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
//GPIOの設定
GPIO_InitTypeDef pin_PA5;
pin_PA5.GPIO_Pin = GPIO_Pin_5;
pin_PA5.GPIO_Mode = GPIO_Mode_OUT;
pin_PA5.GPIO_OType = GPIO_OType_PP;
pin_PA5.GPIO_PuPd = GPIO_PuPd_DOWN;
//GPIOの初期化
GPIO_Init(GPIOA, &pin_PA5);
for(;;){
double i=0;
while(1){
i = i +1;
if(i>100000){
break;
}
}
GPIO_ToggleBits(GPIOA,GPIO_Pin_5);
}
}
(2) 「プロジェクト」→「プロジェクトのビルド」
(3) 「実行」→「デバッグの構成」
・Ac6 STM32 Debuggingを右クリックし「新規」を選択。
・分かりやすい名前を付けて「デバッグ」を押下。
(4) デバッグが開始される
main関数の先頭で自動的にbreakされるので、「再開」ボタンを押して再開する。適当な箇所にbreak pointを設定し、breakされるか確認する。
以上で、stm32の開発環境構築は終わりです。