stm32 m7 · 2015-10-30 · アプリケーションコードを記述 36...

46
September 2015 IAR Systems K.K FAE Team. STM32 M7 ソフトウェア開発入門

Upload: others

Post on 04-Mar-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: STM32 M7 · 2015-10-30 · アプリケーションコードを記述 36 タイマー開始関数と、タイマー割り込みでLEDトグル関数を追加 main関数内、初期化処理と

September 2015

IAR Systems K.K

FAE Team.

STM32 M7

ソフトウェア開発入門

Page 2: STM32 M7 · 2015-10-30 · アプリケーションコードを記述 36 タイマー開始関数と、タイマー割り込みでLEDトグル関数を追加 main関数内、初期化処理と

本ドキュメントについて

2

目的

ARM用統合開発環境であるARM用IAR Embedded Workbench(EWARM)とSTマイクロエレクトニクス社(ST社)提供のサンプルプロジェクト、および設計支援ツールを使用して、ST社評価ボード用のソフトウェアを実際にビルド・デバッグする手順を紹介します。

内容

STM32 M7評価ボードラインナップ

STM32CubeFx同梱サンプルプロジェクトのビルド

サンプルプロジェクトを実ボードでデバッグ実行

EWARMのデバッグ機能一部紹介

STM32CubeMXのプロジェクト設定方法

STM32CubeMX生成プロジェクトをEWARMで実装してデバッグ

※本ドキュメントは、2015年9月現在のIARシステムズWebサイト、およびEWARMバージョン7.40.3を基に作成しています。

Page 3: STM32 M7 · 2015-10-30 · アプリケーションコードを記述 36 タイマー開始関数と、タイマー割り込みでLEDトグル関数を追加 main関数内、初期化処理と

168 Employees with HQ in Uppsala, Sweden

Listed in Stockholm/Nasdaq

R&D investment 32% of revenue

32 years in the industry

Uppsala

Munich

Sao Paulo

Tokyo

Seoul

Shanghai

London

Paris

San Francisco

Dallas

Boston

Los Angeles

+Distributor representation in

43 countries

24 hour technical support in

13 languages

0

5

10

15

20

0

5

10

15

20

2010 2011 2012 2013License # Operating Margin

Licenses

# (000’s) Operating

Margin %

2010 - 2013

Stability and growth

IAR SYSTEMS— A LEADING GLOBAL VENDOR

Page 4: STM32 M7 · 2015-10-30 · アプリケーションコードを記述 36 タイマー開始関数と、タイマー割り込みでLEDトグル関数を追加 main関数内、初期化処理と

STM32 M7

評価ボードラインナップ

Page 5: STM32 M7 · 2015-10-30 · アプリケーションコードを記述 36 タイマー開始関数と、タイマー割り込みでLEDトグル関数を追加 main関数内、初期化処理と

STM32F7(M7)

5

STM32F7DISCOVERY (F7)を例に記載

他のボードはシリーズを置き換えて読むことで対応可能

F7シリーズ用 ボードプロジェクト

ST Part number Series MCU Core Package Max Clock(MHz) Flash(KB) RAM(KB)

STM32F7DISCOVERY F7 STM32F746NGH6 M7 BGA216 216 1024 340+4

STM32756G-EVAL2 F7 STM32F756NGH6 M7 BGA216 216 1024 340+4

Page 6: STM32 M7 · 2015-10-30 · アプリケーションコードを記述 36 タイマー開始関数と、タイマー割り込みでLEDトグル関数を追加 main関数内、初期化処理と

STM32CubeF7

同梱サンプルプロジェクトのビルド

Page 7: STM32 M7 · 2015-10-30 · アプリケーションコードを記述 36 タイマー開始関数と、タイマー割り込みでLEDトグル関数を追加 main関数内、初期化処理と

EWARMを起動

7

スタートメニューから起動

すべてのプログラム > IAR Systems > IAR Embedded Workbench for ARM 7.xx.x > IAR Embedded Workbench

Page 8: STM32 M7 · 2015-10-30 · アプリケーションコードを記述 36 タイマー開始関数と、タイマー割り込みでLEDトグル関数を追加 main関数内、初期化処理と

STM32CubeF7のサンプルを起動

8

TIM_TimeBaseプロジェクトを開く

Project.ewwを選択して、[開く]

[ファイル] > [開く] > [ワークスペース]

STM32Cube_FW_F7_V1.1.0¥Projects¥STM32746G-Discovery¥Examples¥TIM¥TIM_TimeBase¥EWARM

Page 9: STM32 M7 · 2015-10-30 · アプリケーションコードを記述 36 タイマー開始関数と、タイマー割り込みでLEDトグル関数を追加 main関数内、初期化処理と

STM32CubeF7のサンプルをビルド

9

ソースコードを表示

Example > User > main.c をダブルクリック

Page 10: STM32 M7 · 2015-10-30 · アプリケーションコードを記述 36 タイマー開始関数と、タイマー割り込みでLEDトグル関数を追加 main関数内、初期化処理と

STM32CubeF7のサンプルをビルド

10

行番号を表示する

ツール>オプション エディタ > [行番号の表示]にチェック

行番号が表示される

Page 11: STM32 M7 · 2015-10-30 · アプリケーションコードを記述 36 タイマー開始関数と、タイマー割り込みでLEDトグル関数を追加 main関数内、初期化処理と

STM32CubeF7のサンプルをビルド

11

メイクを実行する

エラーが0なら成功

ツール > オプション メッセージ > ビルドメッセージの表示 > [全て] に変更することで詳細ビルド情報を表示

Page 12: STM32 M7 · 2015-10-30 · アプリケーションコードを記述 36 タイマー開始関数と、タイマー割り込みでLEDトグル関数を追加 main関数内、初期化処理と

サンプルプロジェクトを

実ボードでデバッグ実行

Page 13: STM32 M7 · 2015-10-30 · アプリケーションコードを記述 36 タイマー開始関数と、タイマー割り込みでLEDトグル関数を追加 main関数内、初期化処理と

ST-LINKの接続

13

ST-LINKとPCの接続 > デバイスドライバインストール

デバッグ用 オンボードST-LINK

メインMCU

初回のみデバイスドライバのインストールが実行

http://www.st.com/st-web-ui/static/active/en/resource/technical/document/data_brief/DM00179227.pdf 2015年8月29日 ST社Webサイトより抜粋

USBミニケーブル

Page 14: STM32 M7 · 2015-10-30 · アプリケーションコードを記述 36 タイマー開始関数と、タイマー割り込みでLEDトグル関数を追加 main関数内、初期化処理と

STM32CubeF7のサンプルをデバッグ

14

デバッグモードに移動 実行ファイルのフラッシュ書き込み、デバッグセッション初期化

デバッグモード開始

Page 15: STM32 M7 · 2015-10-30 · アプリケーションコードを記述 36 タイマー開始関数と、タイマー割り込みでLEDトグル関数を追加 main関数内、初期化処理と

STM32CubeF7のサンプルをデバッグ

15

実行の制御

実行

ステップアウト

ステップイン

ステップオーバ

ブレーク

リセット

次のステートメント

カーソルまで実行

デバッグの終了

Page 16: STM32 M7 · 2015-10-30 · アプリケーションコードを記述 36 タイマー開始関数と、タイマー割り込みでLEDトグル関数を追加 main関数内、初期化処理と

STM32CubeF7のサンプルをデバッグ

16

実機でデバッグ実行

LEDが1秒間隔で点滅

main.c Timer割込みハンドラ内にブレークポイント

行番号の左をシングルクリック ※もう一度クリックで解除

ステップイン実行で、コードの動作を追う

※サンプル動作はボードにより異なる

Page 17: STM32 M7 · 2015-10-30 · アプリケーションコードを記述 36 タイマー開始関数と、タイマー割り込みでLEDトグル関数を追加 main関数内、初期化処理と

EWARMのデバッグ機能一部紹介

Page 18: STM32 M7 · 2015-10-30 · アプリケーションコードを記述 36 タイマー開始関数と、タイマー割り込みでLEDトグル関数を追加 main関数内、初期化処理と

EWARMの豊富なデバッグ表示

18

表示メニュー概要

各種ブレークポイント情報

逆アセンブリ画面

メモリ表示

CPUレジスタ、周辺レジスタ表示

変数ウォッチ

Printf出力表示

静的変数リアルタイムウォッチ

Page 19: STM32 M7 · 2015-10-30 · アプリケーションコードを記述 36 タイマー開始関数と、タイマー割り込みでLEDトグル関数を追加 main関数内、初期化処理と

EWARMのデバッグ機能:レジスタ

19

GPIO変化をレジスタウィンドウで見てみる 表示 > レジスタ 現在のCPUレジスタ > GPIOD

LED変更コードを通ると レジスタの変化箇所が 赤く変わる

Page 20: STM32 M7 · 2015-10-30 · アプリケーションコードを記述 36 タイマー開始関数と、タイマー割り込みでLEDトグル関数を追加 main関数内、初期化処理と

EWARMのデバッグ機能:ターミナルI/O

20

ソースコードを編集し、EWARM内でprintfを表示する

#include “stdio.h”を追記

printf(“Hello!World¥n”);を追記

[メイク] [ダウンロードしてデバッグ]

表示 > ターミナルI/O printfの実行結果がターミナルI/Oに表示される

Page 21: STM32 M7 · 2015-10-30 · アプリケーションコードを記述 36 タイマー開始関数と、タイマー割り込みでLEDトグル関数を追加 main関数内、初期化処理と

EWARMのデバッグ機能:ライブウォッチ

21

ソースコードを編集し、定期的にカウントアップされる静的変数を表示

割込み関数に[static int count = 0;]を追記 [count++;]を追記 [メイク] [ダウンロードしてデバッグ]

表示 > ライブウォッチ [式]をクリックしcountを登録 CPUを停めずに変数の値を取得

※静的変数のみ登録可能

Page 22: STM32 M7 · 2015-10-30 · アプリケーションコードを記述 36 タイマー開始関数と、タイマー割り込みでLEDトグル関数を追加 main関数内、初期化処理と

STM32CubeMXの

プロジェクト設定方法

Page 23: STM32 M7 · 2015-10-30 · アプリケーションコードを記述 36 タイマー開始関数と、タイマー割り込みでLEDトグル関数を追加 main関数内、初期化処理と

STM32CubeMXを起動

23

スタートメニューから起動

すべてのプログラム > STMicroelectronics> STM32Cube > STM32CubeMX

[New Project]を選択

Page 24: STM32 M7 · 2015-10-30 · アプリケーションコードを記述 36 タイマー開始関数と、タイマー割り込みでLEDトグル関数を追加 main関数内、初期化処理と

STM32CubeMXでプロジェクト設定

24

デバイスをベースとするか、評価ボードをベースとするか選択

タブクリックで切り替える

評価ボードをベースとすると基本的なピン配置は 設定済みで開始できる

Page 25: STM32 M7 · 2015-10-30 · アプリケーションコードを記述 36 タイマー開始関数と、タイマー割り込みでLEDトグル関数を追加 main関数内、初期化処理と

STM32CubeMXでプロジェクト設定

25

DISCOVERYボードをベースとする

Discovery

STM32F7

STM32F746G-DISCO

Page 26: STM32 M7 · 2015-10-30 · アプリケーションコードを記述 36 タイマー開始関数と、タイマー割り込みでLEDトグル関数を追加 main関数内、初期化処理と

STM32CubeMXでプロジェクト設定

26

ピン配置および周辺機能の使用を選択

D14を左クリックして GPIO_Outputを選択

D14を右クリックして Enter User Labelを選択

LED1を入力

Page 27: STM32 M7 · 2015-10-30 · アプリケーションコードを記述 36 タイマー開始関数と、タイマー割り込みでLEDトグル関数を追加 main関数内、初期化処理と

STM32CubeMXでプロジェクト設定

27

ピン配置および周辺機能の使用を選択

TIM3のClock Sourceを [Disable]から[Internal Clock]に変更

Page 28: STM32 M7 · 2015-10-30 · アプリケーションコードを記述 36 タイマー開始関数と、タイマー割り込みでLEDトグル関数を追加 main関数内、初期化処理と

STM32CubeMXでプロジェクト設定

28

Clock Configurationで各ブロックへの供給クロックを設定

PLL168 MHz からHSI 16MHzに変更する

クロック源

システムクロック選択 ※PLLCLK > HSIに変更

CPUメインクロック

Page 29: STM32 M7 · 2015-10-30 · アプリケーションコードを記述 36 タイマー開始関数と、タイマー割り込みでLEDトグル関数を追加 main関数内、初期化処理と

STM32CubeMXでプロジェクト設定

29

各周辺機能の設定

Configurationタブからボタンクリックで設定

点滅用TIM3を設定

ボタン、LED用 GPIO設定

Page 30: STM32 M7 · 2015-10-30 · アプリケーションコードを記述 36 タイマー開始関数と、タイマー割り込みでLEDトグル関数を追加 main関数内、初期化処理と

STM32CubeMXでプロジェクト設定

30

TIM3モジュールの設定

プリスケーラ 16000

リロードカウント 1000

TIM3global interrupt [Enabled]にチェック

16,000サイクルごとに1カウントアップし、1,000カウントごとに割り込みが発生。 ※16,000×1,000 = 16M => 1秒に1回割り込み

Page 31: STM32 M7 · 2015-10-30 · アプリケーションコードを記述 36 タイマー開始関数と、タイマー割り込みでLEDトグル関数を追加 main関数内、初期化処理と

STM32CubeMXでプロジェクト設定

31

GPIO設定

評価ボード選択で、基本機能箇所は設定済み

GPIOIのPin1は LED1に設定済み

Page 32: STM32 M7 · 2015-10-30 · アプリケーションコードを記述 36 タイマー開始関数と、タイマー割り込みでLEDトグル関数を追加 main関数内、初期化処理と

STM32CubeMXでプロジェクト設定

32

コード生成オプションの設定

ドライバ用のSTM32CubeF7を Webからダウンロード

Project > Settings

プロジェクトファイル名 ※LED_Blink

プロジェクト保存場所 ※C:¥STM32_workspace¥STM32F746G-DISCO

数分から十数分かかる

Page 33: STM32 M7 · 2015-10-30 · アプリケーションコードを記述 36 タイマー開始関数と、タイマー割り込みでLEDトグル関数を追加 main関数内、初期化処理と

STM32CubeMX生成プロジェクトを

EWARMで実装してデバッグ

Page 34: STM32 M7 · 2015-10-30 · アプリケーションコードを記述 36 タイマー開始関数と、タイマー割り込みでLEDトグル関数を追加 main関数内、初期化処理と

STM32CubeMXでプロジェクト生成

34

ソースコードとEWARM用プロジェクトファイルを出力

LED_Blink以下にプロジェクトファイルと ドライバなどが生成される

Project.ewwを ダブルクリック

Page 35: STM32 M7 · 2015-10-30 · アプリケーションコードを記述 36 タイマー開始関数と、タイマー割り込みでLEDトグル関数を追加 main関数内、初期化処理と

STM32CubeMXでプロジェクト生成

35

初期化コードを含んだプロジェクトが生成される

ユーザコードは /* USER CODE BEGIN x */ /* USER CODE END x */ の間に記述する

HAL_xxx()はSTM32CubeF7の提供する ドライバAPI関数

MX_xxx()はSTM32CubeMXが生成した 初期化関数

Page 36: STM32 M7 · 2015-10-30 · アプリケーションコードを記述 36 タイマー開始関数と、タイマー割り込みでLEDトグル関数を追加 main関数内、初期化処理と

アプリケーションコードを記述

36

タイマー開始関数と、タイマー割り込みでLEDトグル関数を追加

main関数内、初期化処理と whileループの間に HAL_TIM_Base_Start_IT(&htim2); を追加

main関数終了後に void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { if(htim ->Instance == htim3.Instance) { HAL_GPIO_TogglePin(GPIOI,GPIO_PIN_1); } } を追加

※有効化関数や、データ入力関数はSTM32CubeF7のExampleコードを参照する

Page 37: STM32 M7 · 2015-10-30 · アプリケーションコードを記述 36 タイマー開始関数と、タイマー割り込みでLEDトグル関数を追加 main関数内、初期化処理と

プロジェクトの実行

37

メイク後、ダウンロードしてデバッグ

実行

ステップアウト

ステップイン

ステップオーバ

ブレーク

リセット

次のステートメント

カーソルまで実行

デバッグの終了

Page 38: STM32 M7 · 2015-10-30 · アプリケーションコードを記述 36 タイマー開始関数と、タイマー割り込みでLEDトグル関数を追加 main関数内、初期化処理と

プロジェクトのデバッグ

38

ブレークポイントを設置し、コードの流れを解析 追加した割り込みハンドラ内にブレークポイントを設定

表示>コールスタック

現在のコードが、どの関数から呼ばれているか 確認可能

Page 39: STM32 M7 · 2015-10-30 · アプリケーションコードを記述 36 タイマー開始関数と、タイマー割り込みでLEDトグル関数を追加 main関数内、初期化処理と

STM32CubeMXで設定変更

39

クロック設定を変更し、プロジェクト再生成

EWARMのデバッグを中止

System Clock MuxをPLLCLKに変更

CPUクロック 216MHz

コード生成

Page 40: STM32 M7 · 2015-10-30 · アプリケーションコードを記述 36 タイマー開始関数と、タイマー割り込みでLEDトグル関数を追加 main関数内、初期化処理と

EWARMでプロジェクト再読み込み

40

プロジェクトを読み込んで、再ビルド ソースコードの変更が通知されるので、[すべてはい]を選択

クロック設定コードが変更されている

システムクロックが16Mから168Mになったので 1秒から100m秒弱にLEDトグルに変更

Page 41: STM32 M7 · 2015-10-30 · アプリケーションコードを記述 36 タイマー開始関数と、タイマー割り込みでLEDトグル関数を追加 main関数内、初期化処理と

まとめ

Page 42: STM32 M7 · 2015-10-30 · アプリケーションコードを記述 36 タイマー開始関数と、タイマー割り込みでLEDトグル関数を追加 main関数内、初期化処理と

まとめ (1/2)

42

STM32Cube Fx同梱のサンプルプロジェクトを使うことで、豊富な周辺機能を実機で、すぐに試すことができる。

EWARMのデバッグ機能を使うことで、変数やメモリ、レジスタなどの値を確認し、状態把握や問題の特定を効率よく行うことができる。

Page 43: STM32 M7 · 2015-10-30 · アプリケーションコードを記述 36 タイマー開始関数と、タイマー割り込みでLEDトグル関数を追加 main関数内、初期化処理と

まとめ (2/2)

43

STM32CubeMXを使用することで、初期化設定をグラフィカルに行うことができる。

生成されたEWARM用プロジェクトで、すぐにビルドし デバッグを試すことができる。

STM32CubeMXのルールに従ってユーザコードを記述することで、何度でも初期化設定をやり直すことができる。

Page 44: STM32 M7 · 2015-10-30 · アプリケーションコードを記述 36 タイマー開始関数と、タイマー割り込みでLEDトグル関数を追加 main関数内、初期化処理と

本資料について

Page 45: STM32 M7 · 2015-10-30 · アプリケーションコードを記述 36 タイマー開始関数と、タイマー割り込みでLEDトグル関数を追加 main関数内、初期化処理と

本資料取り扱い上の注意

45

本資料は2015年9月1日時点の情報を基に作成されており、将来変更の可能性 のあるものです。あわせてご紹介する設定や機能に関連して、動作保証をお約束するものではございませんので、ご了承ください 本資料で提供している情報は、ご利用されている方のご判断・責任においてご使用ください。提供した情報に関連して、ご利用される方が不利益等を被る事態が生じたとしても、弊社及び執筆者は一切の責任を負いかねますので、ご了承ください。 本資料の内容に関する弊社または各社へのお問合せはご遠慮ください。 本資料及びデータの再配布・無断転用・転載等はご遠慮ください。

Page 46: STM32 M7 · 2015-10-30 · アプリケーションコードを記述 36 タイマー開始関数と、タイマー割り込みでLEDトグル関数を追加 main関数内、初期化処理と

商標について

46

• IAR Systems, IAR Embedded Workbench, C-SPY, C-RUN, C-STAT, visualSTATE, Focus on Your Code, IAR KickStart Kit, I-jet, I-scope, IAR, および IAR Systems のロゴタイプはIAR Systems ABが所有する商標または登録商標です。

• ARMおよびCortexは、ARM Limited(またはその子会社)のEUまたはその他の国における登録商標です。CoreSightは、ARM Limited(またはその子会社)のEUまたはその他の国における商標です。 All rights reserved.

• STM32は、STマイクロエレクトロニクスの登録商標です。

• その他、本資料中の製品名やサービス名は全てそれぞれの所有者に属する商標または登録商標です。