training stm32-ecosystem rev5

STマイクロエレクトロニクス
STM32ファミリ開発環境のご紹介
Dec- 2015
内容
1. STM32開発環境の紹介
開発環境の紹介
3. まとめ
• STM32の主な開発環境
• 開発ツールの使い分け
• STM32Cube
• Nucleo
• X-Nucleo
2. Nucleoを使用した実習
を使用した実習
• ツールチェーン&ライブラリの準備
• 実習1:ツールの動作確認
• 実習2:LED点滅
2
STM32の主な開発環境(1/2)
統合開発環境
デバッガ
- KEIL社 MDK-ARM
- ST社 ST-LINK/V2
- IAR社 EWARM
- KEIL社 U-LINK
- Atollic社 TrueSTUDIO
- IAR社 I-Jet
- ST社 System Workbench
- Raisonance社 R-LINK
評価ボード
OS
- eForce社 uC3 (µITRON)
- ST社 標準評価ボード
- ST社 簡易ボード「Discovery」
- ユーシーテクノロジ社 µT-kernel
- ST社 mbed対応ボード「Nucleo」
3
STM32の主な開発環境(2/2)
ソフトウェア・ライブラリ
その他の便利なツール
- 標準ペリフェラル
- STVP(FLASH書込みソフト)
- USBデバイス/ホスト
- イーサネット
- Clock Configuration Tool(クロック設定ツール)
- DSP
- MicroXplorer(MUXピン設定ツール)
- GUI
- STM Studio(変数監視視覚化ツール)
- オーディオ
- モーター
- 暗号化
- Java Evaluation Kit(Java環境構築キット)
- Matlab/Simulink Embedded Target
(Matlab/Simulink対応STM32用ブロックセット)
STM32Cube
Complete Embedded Software & Tools
4
STM32Cube
STM32Cubeの紹介(1/2)
• STM32Cube™は100% 無償のソリューションで以下のものを含みます:
• ソフトウェア設定ツール(PC上で動作)
• 様々なSTM32 用組込みソフトブロック
STM32CubeMX
PC上の設定ツール
ユーザコード
STM32Cube
組込みソフトウェア
ユーザの設定に応じた
Cコードの初期化ファイルを
自動生成
ミドルウェア
RTOS, USB, TCP/IP, Graphics...
ハードウェア抽象化レイヤ
6
STM32Cubeの紹介(2/2)
• TCP/IPスタック
• LwIP オープンソース規格
• USBライブラリ
• ホスト、デバイス・ライブラリ(ST)
• グラフィックス
ユーザコード
ユーザコード
• STemWin (STおよびSEGGER)
• ファイルシステム
STM32Cube
• FatFS オープンソース規格
• リアルタイムOS
ミドルウェア
• FreeRTOS オープンソース規格
(CMSIS-RTOSに準拠)
• サンプルプログラム
• 50種類のサンプルプログラム
• STM32の抽象化
STM32Cube
CMSIS
ハードウェア抽象化レイヤ
• 移植が容易なAPI
• すべてのSTM32に対応
• 全てのペリフェラルを網羅
• 量産対応
• 品質: CodeSonar™(高精度バグ検出ツール)
• サンプルプログラム
• 150種類の使用例
注意:青色はオープンソフトウェア
• 自由なライセンス形態
• オープンソースBSDライセンス
7
STM32Cube FW パッケージ ブロック図
Discovery ボード
標準評価 ボード
Nucleo ボード
ボード・デモ
ミドルウェア の参考例
ネットワーク
ネットワーク
LwIP TCP/IP
& Polar SSL
USB
ホスト & デバイス
グラフィックス
STemWin
ファイル
システム
FATFS
RTOS
FreeRTOS
ユーティ
リティ
ミドルウェア
HAL の参考例
ハードウェア抽象化レイヤ(HAL)
) API
ハードウェア抽象化レイヤ(
CMSIS
ボード・サポート・パッケージ
ボード・サポート・パッケージ
ドライバ
STM32F0
STM32F1
STM32L0
STM32L1
STM32 ファミリ
STM32F2
STM32F3
STM32F4
STM32F7
8
STM32CubeMXの紹介
9
STM32Cubeの関連資料一覧
UM1709: イーサネットを使用したIAPの一例
UM1713: LwIP TCP/IPスタックを使用したアプリケーション開発
UM1720: STM32Cube USB ホストライブラリ
ミドルウェア関連
UM1721: FatFsを使用したアプリケーション開発
UM1722: RTOSを使用したアプリケーション開発
UM1723: PolarSSLの一例
UM1725: STM32F4xx HAL(ハードウェア抽象化レイヤ)ドライバ説明書
UM1730: STM32F4のための STM32CubeF4ファームウェアパッケージ導入ガイド
UM1734: STM32Cube USB デバイスライブラリ
ミドルウェア関連
UM1743: STM32CubeF4 デモプラットフォーム
デモソフト関連
10
Nucleo
ARM mbed対応 Nucleoボード
• Nucleoボードは、STM32マイコン間で共通
• 2種類の拡張ヘッダ:
• Arduino Uno v3との接続
• Morpho ヘッダにより全てのペリフェラルへの
アクセスが可能
• オンボードST-LINK/V2-1デバッガとプログラマ:
• mbedの利用が可能
• ドラッグ&ドロップ プログラミングに対応
• Nucleoボード、および、外部のSTM32実装ボードを
ターゲットとして利用可能
• 試作に最適
• 安価なSTM32搭載ボードはファミリ間で共通部品を実装
• ハード/ソフトの両面での調整において費用的リスクを回避
• オープンコミュニティーの利点を享受
• 制限の無い拡張性能
• ペリフェラルシールドの巨大なエコシステム(Arduino)へ瞬時にアクセス可能
• mbedのオンラインIDEを無償で利用可能
12
Nucleoボード 詳細
13
全18種類
種類
Nucleo ボードのラインナップ
(2015年12月時点)
L053R8
L152RE L476RG
F030R8 F031K6
F042K6
F070RB F072RB F091RC
F103RB
F302R8 F303K8
F303RE F334R8
F401RE F410RB F411RE F446RE
14
X-Nucleo
X-Nucleo ボードの紹介
X-Nucleo ボード
Nucleo ボードに重ねて機能する、マイコンのペリフェラルを搭載した拡張ボードです。
X-Nucleoボード
Nucleoボード
16
全18種類
種類
X-Nucleoボードのラインナップ
(2015年12月時点)
カテゴリ
X-NUCLEO-6180XA1
X-NUCLEO-IKS01A1
近接センサ
X-NUCLEO-6180XA1
マイク
X-NUCLEO-CCA02M1
Bluetooth Low Energy
X-NUCLEO-IDB04A1
X-NUCLEO-IDB05A1
Sub-1GHz無線
X-NUCLEO-IDS01A4
X-NUCLEO-IDS01A5
NFC
X-NUCLEO-NFC01A1
WiFi
X-NUCLEO-IDW01M1
モータ・ドライバ
X-NUCLEO-IHM01A1
X-NUCLEO-IHM02A1
X-NUCLEO-IHM03A1
X-NUCLEO-IHM04A1
X-NUCLEO-IHM05A1
X-NUCLEO-IHM07M1
X-NUCLEO-IHM09M1
PLC
産業向け入出力
X-NUCLEO-PLC01A1
拡張
機能拡張
X-NUCLEO-IKA01A1
X-NUCLEO-IDS01A5
X-NUCLEO-NFC01A1
通信
X-NUCLEO-CCA02M1 X-NUCLEO-IHM01A1
モータ制御
X-NUCLEO-IDB04A1
X-NUCLEO-IDS01A4
X-NUCLEO-IHM03A1
製品型番
モーション・センサ
センサ
X-NUCLEO-IKS01A1
機能
X-NUCLEO-IHM07A1
X-NUCLEO-PLC01A1
17
STM32Cubeを使用した
Nucleo-F401の実習
事前に準備が必要なもの
• Windows7のインストールされたPC
• 管理者権限のあるユーザーアカウント
• IAR EWARM ver.7.40.5のインストールおよびライセンスの取得
• コードサイズ制限版
• Java VMのインストール
• インターネット環境
19
ツールチェーン&
ライブラリのインストール
サンプルプログラムを動かそう
• STM32Cube F4に付属しているサンプルプログラムを動かしてみましょう
• 以下の手順を踏みます
•
•
•
•
•
開発ツールをインストール
STLINKのドライバをインストール
NUCLEO-F401REを準備
STM32Cube F4を展開
サンプルプログラムを実行
21
本日使用する開発環境
評価ボード
NUCLEO-F401RE
(STM32F401搭載のmbed対応ボード)
統合開発環境
IAR社 EWARM v7.40.5
ソフトウェア・ライブラリ
STM32CubeF4 v1.8.0
STM32CubeMX v4.10.0
22
開発ツールのインストール
• IAR 7.40.5をダウンロードします
• インストーラーを起動してインストールします
• 立ち上げて評価用ライセンスをインターネット経由で入手します
23
STLINKドライバインストール
• エクスプローラでドライバの位置を開きます
• C:¥Program Files(x86) ¥IAR Systems ¥Embedded Workbench 7.xxxx ¥arm
¥drivers ¥ST-Link ¥Win_7-8
• stlink_winusb_install.batを実行します
24
Nucleo-F401REを準備
Nucleo-F401RE
25
STM32CubeF4をダウンロード
• STM32CubeF4を以下のURLからダウンロード
• http://www.st.com/web/catalog/tools/FM147/CL1794/SC961/SS1743/PF259243
26
STM32CubeF4を解凍(1/2)
• ダウンロードしたstm32cubef4.zipを解凍します
• C:¥Users¥<ログインユーザー名>¥STM32Cube¥Repositoryに
解凍します
• 注意:ログインユーザー名が日本語の方はここに解凍しても動作しません
ログインユーザー名が日本語の方はここに解凍しても動作しません!
ログインユーザー名が日本語の方はここに解凍しても動作しません!
該当する方はc:¥STに解凍します
に解凍します
該当する方は
27
STM32CubeF4を解凍(2/2)
• 以下のようなディレクトリ構成にします
• 注意:この後、STM32CubeMXでこのディレクトリを参照しますので、必ず
このディレクトリに解凍してください
28
STM32CubeMXのインストール
• http://www.st.com/stm32cubeからSTM32CubeMXをダウンロードします
• 解凍すると、SetupSTM32CubeMX-4.10.0.exeが入っていますので、ダブ
ルクリックして実行します
• 環境によってはJavaVMのダウンロードが始まります
• デフォルトのままインストールすると、デスクトップにアイコンができます
29
STM32CubeMXの起動
• 起動すると以下のような画面になります
30
インターネット接続の設定
• Help->Updater Settingからインターネット接続の設定を行います
31
ライブラリのダウンロード
• Help->Install New Librariesから最新のライブラリをダウンロードします
• 事前にzipファイルを所定の位置に解凍してある場合、チェックボックスが
緑色になります
• 注意:ネットワークへの接続が必要です!
32
C:¥STに解凍した方
• Help->Updater SettingsのUpdater Settingsタブで、Repository Folderに
“C:¥ST” を設定します
33
実習1:ツールの動作確認
サンプルプログラムを実行(1/7)
• 既存プロジェクトを開きます
• ファイル>開く>ワークスペース にて以下のファイルを指定
• STM32Cube_FW_F4_V1.8.0¥Projects¥STM32F401RENucleo¥Examples¥GPIO¥GPIO_IOToggle¥EWARM¥Project.eww
35
サンプルプログラムを実行(2/7)
• Embedded Workbench起動画面
36
サンプルプログラムを実行(3/7)
• プロジェクトの再ビルドを行います
最初に、オブジェクトコードが削除されます
最後に、エラーとワーニングの数が表示されます
37
サンプルプログラムを実行(4/7)
• ターゲットにダウンロードしてデバッガを起動
• プロジェクト > ダウンロードしてデバッグ
「ダウンロードしてデバッグ」
アイコン
38
サンプルプログラムを実行(5/7)
デバッグ用のツールバー
39
サンプルプログラムを実行(6/7)
ステップ
オーバ
リセット
ブレーク
ステップ
アウト
ステップ
イン
カーソル
まで実行
次の
ステート
メント
実行
クリック
ここで、「実行
実行」をクリック
実行
デバッグ
の中止
40
サンプルプログラムを実行(7/7)
• 実行結果
• 緑のLEDが点滅します
41
実習2:LED点滅
仕様
• NUCLEO-F401REを使用します
• NUCLEO-F401REにはあまり部品が載っていないので、USERボタンを
押すたびに、LD2をトグルするという仕様にします
43
詳細仕様
• USERボタンは割り込みで検知します
• メインループは以下のようにコーディングします
• While (1) {
• USERボタンが押されるのを待つ
• LD2をトグルする
• }
• 割り込みは以下のようにコーディングします
• If (割り込みがあった) {
• 変数に1を代入
• }
44
新規プロジェクトの作成
• STM32CubeMXを起動して、New Projectを選択します
• Series->F4、Line->F401、STM32F401RETxを選択します
45
USERボタン入力
• PC13をGPIO割り込み入力に設定します
46
LD2出力
• PA5をGPIO出力に設定します
47
クロック設定
• 以下のように設定します
•
•
•
•
•
System CLK Mux -> PLLCLK
PLL source -> HSI
PLL N -> 336
PLL P -> 4
APB1 Prescaler -> 2
48
GPIO設定(1/2)
• ConfigurationタブのGPIOボタンを押します
49
GPIO設定(2/2)
• 以下のように設定します
• PA5
• Output push-pull
• No pull-up and no pull-down
• High
• PC13
• External Interrupt Mode with Falling edge trigger detection
• No pull-up and no pull-down
50
NVIC設定(1/2)
• ConfigurationタブのNVICボタンを押します
51
NVIC設定(2/2)
• 以下のように設定します
• Priority Group
• 4bits for pre-emption priority 0 bits for subpriority
• System tick timer
• Enabled: Checked
• Preemption Priority: 0
• Sub Priority: 0
• EXTI Line[15:10] interrupts
• Enabled: Checked
• Preemption Priority: 1
• Sub Priority: 0
52
C言語生成
• Project->Settingを選択します
• Projectタブは以下のように設定します
•
•
•
•
Project Name -> F401RE_LEDonoff
Project Location -> C:¥ST¥
Toolchain Folder Location -> C:¥ST¥F401RE_LEDonoff
Tool chain -> EWARM
• Code Generatorタブは以下のように設定します
• Copy only the necessary library files
• Keep User Code when re-generating
• Delete previously generated files when not re-generated
• OKを押してダイアログを閉じます
• Project->Generate Codeを選択します
53
IARでコンパイル
• C言語の生成が終わると以下のようなダイアログがでます
ここを押すとIARが起動してプロジェクトを開きます
• または、C:¥ST¥F401RE_LEDonoff¥Projects¥EWARM¥Project.eww を
開きます
• ビルドしてエラーなくコンパイルが通るのを確認します
• このとき、プロジェクト>メイクも使用できます
54
ユーザー処理をいれる(1/3)
• “ボタンを押すと、LEDが点滅する”処理をいれます
• main.cに以下の処理を追加します
/* USER CODE BEGIN 0 */
__IO uint8_t Pushed;
/* USER CODE END 0 */
55
ユーザー処理をいれる(2/3)
• main.cに以下の処理を追加します
/* USER CODE BEGIN 3 */
/* Infinite loop */
while (1)
{
Pushed = 0;
while (Pushed == 0)
;
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);
}
/* USER CODE END 3 */
56
ユーザー処理をいれる(3/3)
• main.cに以下の処理を追加します
/* USER CODE BEGIN 4 */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if (GPIO_Pin == GPIO_PIN_13) {
Pushed = 1;
}
}
/* USER CODE END 4 */
57
IARでコンパイルおよび実行
• ビルドしてエラーなくコンパイルが通るのを確認します
• 実行して、USERボタンを押すたびに、LEDのON/OFFが切り替わるのを
確認します
• IARをデバッグ停止、ファイル>ワークスペースの保存、ファイル>ワーク
スペースを閉じる、を行い終了します
58
まとめ
まとめ
今回ご紹介したツールは開発方法に応じて、以下の様に使い分
けて頂く事をお薦めします。
スクラッチからコーディングする場合:
=> STM32CubeMX を使用
サンプルコードを修正する場合:
=> STM32CubeF4のサンプルプログラム
のサンプルプログラム を使用
60