Project

General

Profile

Actions

DevEnv » History » Revision 11

« Previous | Revision 11/23 (diff) | Next »
mole lord, 08/29/2020 01:53 PM


開発環境

STM32CubeIDEは全部入りで楽なのですが、以下の問題があります。

  • ファームウェアライブラリとして最新版しか使えない(CubeMX上で古いファームウェアライブラリを選択できない)
  • ファームウェアライブラリのパスがWindowsのログイン名によって異なり、IDEプロジェクトを他人の環境で再現するのが困難

STMicroのファームウェアライブラリはバージョンが上がると新しいバグが入ることが多く、ライブラリのバージョンが固定できないのは「完成したソフトを半年後にリビルドすると動作しない」原因になります。
そこで、CubeIDEは避け、バージョンの固定ができる下記のような開発環境を考えました。

注:開発PCのOSがWindows10であることを前提としています。

この開発環境の場合、Eclipseに依存せずコマンドラインのみでビルドが行えるという利点があります。

インストール

基本的に、 GNU MCU Eclipse のサイト の右側にある DownloadsやInstallのリンク先の記事に従っています。
ただし、xPack Managerでコンパイラまで入れるとコンパイラのバージョン管理がしづらくなる欠点があるので、コンパイラに関してはねむいさんの公開している手順を参考にしています。

まずtoolchainとeclipse

  1. ねむいさんのぶろぐ-Windows10対応軽量シンプルなARMマイコンのGCCビルド環境を構築する(2020年度版) の手順に沿ってC:/Devzフォルダを作ります
  2. 他のPCにインストールするとき手間を省くために、C:/Devzをzip圧縮して保存しておきます
  3. あとでeclipseやCubeMXをインストールするための、中身がカラのC:/Dev0フォルダを作ります
  4. GNU MCU Eclipseのリリース物 から、 20200127-1311-gnumcueclipse-4.7.2-2019-12-R-win32.win32.x86_64.zip をダウンロードします
  5. 上記zipを C:/Dev0 に展開します
  6. eclipseを動かすために、https://jdk.java.net/14/ からOPENJDK14をダウンロードして展開し、jdk-14.0.2をjreにリネームして、C:/Dev0/eclipse/ に移動します(C:/Dev0/eclipse/jre/bin/javaw.exeとなるように)
  7. C:/Dev0/eclipse/eclipse.exe をダブルクリックして、起動するか確かめます
    • 起動できたら、この時点では何もする必要はないので、終了させます
    • javaがインストールされていない場合、eclipse.exeを起動しようとするとjavaランタイムが見つからないという趣旨のダイアログが出ます

この時点で以下のようなフォルダ構成になります。

C:/
+-Dev0
| +-eclipse/
|   +-jre/
+-Devz/
  +-ARM/
  |  +-launchpad/
  +-Coreutils/

eclipse上でJTAG(SerialWire)デバッガを使えるようにする

  1. ゆっきぶろぐ-【丁寧解説】GNU MCU Eclipseのインストール に倣い、XPackのインストールまで終わらせます
    • Node.jsのインストーラでは、 □Automatically install the necessary ~のチェックはつけなくても大丈夫です
  2. コマンドプロンプトで xpm install --global @gnu-mcu-eclipse/openocd します
  3. コマンドプロンプトで xpm install --global @gnu-mcu-eclipse/qemu します
  4. ゆっきぶろぐ-【丁寧解説】GNU MCU Eclipseのプロジェクト作成手順【画像多め】 に倣い、CMSIS Packs managerの初期化まで終わらせます

eclipse起動のためのバッチファイルを作る

以下の2つのファイルを、C:/Dev0に作ります。

armgcc.cmd

@echo off
set tooldir=C:\Devz
set gccdir=%tooldir%\ARM\launchpad
rem set PATH=%gccdir%\bin;%gccdir%\arm-none-eabi\bin;%tooldir%\Coreutils\bin;%PATH%
set PATH=%gccdir%\bin;%tooldir%\Coreutils\bin;%PATH%
set tooldir=
set gccdir=

armeclipse.cmd

@echo off
call armgcc.cmd
start C:\Dev0\eclipse\eclipse.exe

armeclipse.cmdをダブルクリックすると、arm用のgccにパスが通った状態でeclipseを起動できるようになります。

CubeMXを使えるようにする

STM32CubeMXを動かすために、OPENJDK8を入れます。
ただし、レジストリへの設定も必要なようでSunオフィシャルな?OpenJDKだとうまくいかないので、 adoptopenjdk で配布されているものを使います。
参考 ST Community - With Windows 10 I installed openjdk version 1.8.0_222 but STM32CubeMX does not see that openjdk is there. Says it can not find java runtime environment. The readme with STM32CubeMX said openjdk would work.

  1. https://adoptopenjdk.net/ へアクセスします
  2. ●OpenJDK 8(LTS) と ●HotSpot が選択された状態で、Latest Releaseをクリックしてダウンロードします
  3. AdoptOpenJDKのインストーラでは、 Set JAVA_HOME variableJavaSoft(Oracle) registry keys を「ローカルハードドライブにインストール」します
    • インストールパスはあまり気にする必要ありません。デフォルトでも、 C:/Dev0/jdk8でもよいです
  4. STM32CubeMX をダウンロードし、インストールします
  5. スタートメニューからSTM32CubeMXを起動します
  6. メニューバーのHelp-Updater Settingsを選びます
  7. Repository Folderを C:\\Dev0\\CubeRepo に直します
    • デフォルトのままだと、他人の環境でeclipseプロジェクトを再現するとき困るので、変えています
  8. STM32CubeMXを閉じます

ボード毎にやること

OpenOCDではST-Linkは扱えない?ようなので、Nucleo上のST-Link部分をJ-Linkに書き換えます。
なお、STM32G系のNucleoボードはST-Link/V3なので、J-Link化は非対応のようです。 参考: STLink conversion utility for STLink v3

Converting ST-LINK On-Board Into a J-Link に従ってください。

  • J-Link化されたものと元のST-Link/V2-1の見分け方
    • デバイスマネージャでも識別できますが面倒です
    • ST-Linkの場合は、PCに挿すとUSBメモリ風にドライブとして認識されます
    • J-Link化後は、PCに挿してもストレージデバイスとして認識されなくなります
    • TeraTermを起動して、COMポートの名前を見ることでも識別できます

プロジェクト毎にやること

CubeMXでピン設定の初期化コードを吐き、Eclipseでそれを取り込み、ビルド、デバッグしてLEDチカチカまでする例です。

CubeMXでプロジェクト作成

  1. CubeMXを起動します
  2. ACCESS TO BOARD SELECTOR をクリックします
  3. Commercial Part Numberに f429 と入力すると NUCLEO-F429ZI が候補に出るので、それを選択します
  4. 画面右下のボード画像をクリックし、右上の Start Projectをクリックします
    • この画面のDocs&Resourcesタブで、UsersManual(UM1974.pdf 回路図入り)などが入手できます
  5. Initialize all peripherals with their deafult Mode? と聞かれたらNoを選びます
    • 今回使わないペリフェラルまで有効化されて邪魔なので、Noを選んでいます
    • Noを選んでも、LEDなどごく一部は最初から有効に設定されます
  6. Project Manager タブをクリックし、以下のように設定します
    • Project Name は nuc-f429-blink
    • Project Location は C:\work\stm32\ide_ws1
    • Application Structure は Advanced
    • Toolchain Folder Location は 気にする必要ありません
    • Toolchain/IDE は Makefile
    • Minimum Heap Size は 0x0 (FreeRTOSのヒープを使うつもりのため)
  7. 画面左のCode Generatorをクリックし、以下のように設定します
    • 〇Add necessary library files ~ をクリック(FWライブラリのソースはバージョン管理の対象にしたくないため)
    • □Enable Full Assert をチェックします
  8. 右上の GENERATE CODE をクリックします

この時点でCubeMXのプロジェクトファイル .ioc と、自動生成されたファイル群をgitリポジトリにコミットしておくと、どこを手で書き換えたかはっきりするので開発しやすいです。

Eclipseで取り込み

  1. バッチファイル armeclispe.cmd をダブルクリックしてEclipseを起動します
  2. Workspace: に C:\work\stm32\ide_ws1 を入力し、Launchします
  3. □Always show Welcome at start up のチェックを外したあと、Welcomeを閉じます
  4. メニューバーの File - New - Makefile Project with Existing Code を選びます
  5. Exising Code Location右のBrowse...をクリックし、 C:\work\stm32\ide_ws1\nuc-f429-blink を選びます
  6. Toolchain for Indexer Settings は ARM Cross GCC を選び、Finishします Toolchain選択

この状態だと、プロジェクトをBuildしようとしたときに「Cannot run program "": Launching failed」と出て失敗するので、まだ手順の続きがあります。

  1. https://yukblog.net/gnu-mcu-eclipse-project/ に沿って、CMSIS Pack Managerの初期化を済ませます
  2. https://yukblog.net/gnu-mcu-eclipse-project/ に沿って、CMSIS Pack(今回の場合はF4xx用)のインストールを済ませます
  3. C/C++パースペクティブに戻します
  4. プロジェクトを右クリック-Propretiesを開きます
  5. C/C++ Build-Settings で、Devicesタブを開き、Devices-STMicroelectronics-STM32F4 Series-STM32F429-STM32F429ZI を選択して、Apply and Closeします

これでBuildに成功するようになります。

なお、プロジェクトのProperties-C/C++ BuildのBehaviorタブで □Enable parallel buildしておくと、ビルド時に開発PCのCPUコアを複数使用するのでビルドが高速になります。

ソース修正

まだコードを何も書いていないので、LEDを点滅させるためにmain.cを修正します。

  /* USER CODE BEGIN WHILE */
  while (1)
  {
    HAL_GPIO_TogglePin(LD1_GPIO_Port, LD1_Pin);
    HAL_Delay(500);
    /* USER CODE END WHILE */
  1. Eclipse上または適当なテキストエディタで、 Core/Src/main.c を開きます
  2. main()のwhileの中に /* USER CODE BEGIN END WHILE */ と書かれているのを探して、上記のようにコードを挿入します
  3. Ctrl-Bでビルドします
  4. プロジェクトを右クリック-Debug As-Debug Configurationsを選びます
  5. GDB SEGGER J-Link Debugging をダブルクリックします
    • nuc-f429-blink Default ができます
  6. Debugボタンを押すと、デバッグ実行が開始され、main()の先頭でbreakした状態で止まります
    • Debugボタンを押すとJ-LinkのTerms of useの画面が出るので、□Do not show ~のチェックをして、Acceptします
    • Terms of useの画面で手間取ってエラーになった場合は、Run-Debug history-nuc-f429-blinkでやり直してください

トラブルシューティング

  • CubeMXが起動しない
    • AdoptOpenJDKのインストールが済んでいるか確認します
  • プロジェクトをBuildしようとしたときに「Cannot run program "": Launching failed」と出て失敗する
  • Eclipse上のmakeの出力が文字化けする
    • C:/Devz/Coreutils/share/locale/ja/LC_MESSAGES/make.mo を適当にリネームします
    • ja/LC_MESSAGES/make.mo が見つからなければ英語表記になるので、文字化けは解消します


累計表示回数:200

Updated by mole lord 3 months ago · 11 revisions