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