(UTC)標準で入っているJ-Link関連の物のバージョンが古いため、STM32H7でのデバッグでは少し調子が悪そうに動きます。そのため、今回は無理やりバージョンアップする方法を紹介します。downloadsから、自分の環境にあったものをダウンロード。インストーラの形式で配布されているので、指示に従ってインストール。(x86)\SEGGER\JLink_V652」にインストールしましたので、ご自身の環境に合わせて読んでください。「C:\ST\STM32CubeIDE_1.0.0\STM32CubeIDE\plugins\com.st.stm32cube.ide.mcu.externaltools.jlink.win32_1.0.0.201904160814\tools\bin」にあります。「C:\ST\STM32CubeIDE_1.0.0\STM32CubeIDE\plugins\com.st.stm32cube.ide.mcu.externaltools.jlink.win32_1.0.0.201904160814\tools\bin」内にコピーします。「C:\ST\STM32CubeIDE_1.0.0\STM32CubeIDE\plugins」内部を「JLink」などで検索すると目的のディレクトリが見つかります。(念の為バックアップ取っておいたほうがいいと思います。SoftwareがCubeIDE内で利用できるようになります。このページでLチカをしました。前回はSTM32G4+LLという構成でLチカをしていますが、STにはLLに非対応なマイコンもあります。そこで今回は、GPIOCtrl.hppとGPIOCtrl.cppをほんの僅かに変更して、STM32H7+HALで全ての機能が動くようにします。以下、既にSTM32H7のプロジェクトがCubeMXを用いて吐かれてる状態から書きます。1前回のソースこれが前回のソースです。{ON();}}2次のように変更する以下のように変更します。//LLは用意されていないのでHALを利用する。{ON();}}これだけです。(内容が薄くてすいません。)このように、システムの中核のClassをすこし変更すれば、マイコンを変更しても対応できます。やる気になれば、別のメーカーのマイコンへの移植も容易にできます。CubeIDE環境で、C++にて開発する特にCubeMXなどを弄ることなく、C++を用いて開発するTipsです。最近発売されたG431のNucleoボードを、C++なソースでLチカすることを目指します。想定している読者はCubeIDEがある程度扱える中級者です。時間にして30分くらいの作業かと思います。以下、執筆時の環境です。Projectから、CubeMXを用いて雛形を生成したところからの話です。※環境についてライブラリはGPIO→LLを、RCC→HAL利用しています。PA6を追加でGPIO_Outputとして追加しています。V1.0.0を利用しています。Language:C++を選択しています。(これを選んだところでC++ネイティブなソースがCubeMXから出てこないので使えないんですけどね)また、ペリフェラル等の設定ファイルをmain.cに書かずに、別のファイルに吐き出すオプションもつけています。これが無いとmainが肥大化して読みにくいです。1ディレクトリを作る+Pathを通すC++で開発する以上、1Classに対して1ファイルが一般的なので、標準のInc/Src内に大量にファイルが必ずできます。ディレクトリを作ります。Folder(フォルダ名MyClass)MyClassを選択して、Fileタブ->New->Folder(フォルダ名Inc)MyClassを選択して、Fileタブ->New->Folder(フォルダ名Src)と操作します。この段階で以下のようになるはずです。次にPathを通します。Symbolsで以下のように追加します。C++の両方にPathを通す必要があります。C++に対しても同様の設定をしてください。2Classを作成するFileタブ->New->ClassでClassを作成します。コンストラクタやデストラクタはお好みで。コンストラクタとは、オブジェクト生成時に叩かれる関数、デストラクタとは、オブジェクトがスコープから外れる等の理由で破棄される際に叩かれる関数です。私の個人的な感想だと、ハードウェアに近い処理ほど、オブジェクトが破棄されることはないため、使わない事が多いです。生成された後に、然るべき場所にファイルを移動しましょう。ここではMyClassのIncにヘッダ、Srcにソースファイルを配置しています。ファイルの移動はドラッグ+ドロップでできます。今回のClassはGPIOの制御なので、以下のように記述しました。mGPIOStatus(GPIO_OFF)はメンバイニシャライザです。関数内での代入よりちょっと早いです。参考:http://jagabeeinitialize.hatenablog.com/entry/2018/01/21/192043マイコンと相性が良いですね。GPIO_PIN_5);myIO.ON();みたいな感じで使うことを想定して書きました。続いて神クラスを作ります。普通はタブーなのですが、ちょっとした理由で必要なんです。同様の要領で以下のように作ってください。Godだと思った?残念、Deusでした。DeusClassは以下のように実装してください。GPIO_PIN_6);myGPIO1.ON();myGPIO2.OFF();while(1){myGPIO1.Toggle();myGPIO2.Toggle();HAL_Delay(1000);}}3Wrapperを作成するやっとこれらをMainに読ませます。Mainに読ませてはいけません。Wrapperファイルを作ります。以下のように配置してください。*///このClassだけは、C/C++の架け橋なので、//.hppの#includeがHedder側でできない。//なのでソース内に記述する。cppWrapper(void){Bosatsu.Ctrl();}わざわざbosatsuを作った理由は、WrapperではhppのIncludeができないので、C++の記述ができず、例えばbool型などが扱えません。非常に使いづらいので、これを回避するためだけに2重にWrapしているイメージです。3Mainに記述するようやくmain.cに記述します。*/}4Debugするこれでようやく完成です。たかがLチカなのに!お疲れさまでした。面倒臭かったですよね?ここまでコストを払ってまでC++で開発するメリットは勿論あって、Cに比べてカプセル化が容易です。ソースを汚す手法でしか、(例えば積分演算子を)複製できませんが、C++ならばClassのオブジェクトとして複製できます。デメリットもあり、それはソースが非オブジェクト指向の言語に比べて肥大化しやすい→技術的負債が発生することです。これを回避するために、プログラマたちは、テスト駆動開発などの、管理しやすいソースを記述する方法が考案されていたりします。いつかはそのあたりの話も書きたいと思います。CubeIDE環境で、UTF-8に対応する「ええっ!?このIDEはUTF-8に対応していないの???」いや、対応はしているんです。私達が文字を認識できないだけでして...早速環境の設定をしていきます。以下、執筆時の環境です。開発したいプロジェクトのプロパティを開きます。Mac:Command+I)を押してください。適当に画像のようにチェックを入れればOKです。私はWindowsのほか、Macでも開発をするので、Other:Linuxに設定してあります。Macの方はここで終わりです。内容が無い記事でごめんなさい。以下Windowsの方。2フォントを変更するCubeIDEの標準のフォントは、一部日本語に対応していません。Fontsを開きます。Fontを、フォント名をConsolasからお好きなものに変更します。読みやすいと思います。Takaoフォントは、https://launchpad.net/takao-fontsからTakaoFonts_xxxxx.xx.zipをダウンロードして、インストールするだけで、Windows環境でも利用できるようになります。これでコメントアウトが文字化けして困る事もなくなりました。以上です、お疲れ様でした。・J-Linkを繋げたいとか、諸々の都合でJTAGで接続することがあるかと思います。毎回接続ピンが行方不明になって調べているので、メモとして残しておきます。みんな細かいことよりさっさと接続関係が欲しいのは理解していますから。このとき、基板上のST-LinkV2/1にあるCN2のジャンパはすべてオープンにしてあります。1JTAGのピンについてJ-Linkのデータシート・UM08001によると以下のようになっています。20-pinのピン配置は、(デバッガのオプション的なピンを除いて)どのデバッガでもほとんど変わりはなく、STLinkV2/V3等でも僅かな違いがあるものの、利用できます。次のようにつなぎます。signal参考にしたデータシートはJ-Linkのデータシートのほか、F405データシートであるDocID022152が参考になります。2Nucleoボードとのピンの関係これらより、3V3,GND,PB4,PA15,PA13,PA14,PB3,NRSTを接続すれば動作することがわかりました。Nucleoボードの場合、ピンアサインがめちゃくちゃなので、自分でマイコンピンとの対応を考える必要があります。UM1724P.35には以下のような図があります。これを見て比較するのが楽かと思います。以上の作業を得て、一番最初の接続関係が導けます。Libraryを利用すると、簡単に高速な演算ができます。できることは、三角関数や平方根だけに留まらず、行列操作、FIRフィルタ・FFT、PIDコントローラ、クラーク変換・パーク変換等、幅広く入っています。導入することで利用できる関数は以下のページにまとめられています。https://www.keil.com/pack/doc/cmsis/dsp/html/modules.htmlさて、このCMSIS-DSPですが、故・TrueStudioでの環境構築は、わかりやすくまとめられておりますが、CubeIDEでは少し操作する項目が増えておりますのでまとめてみます。以下、執筆時の環境です。(UTC)マイコンSTM32F446RE1ライブラリの追加STM32Cubeのディレクトリから以下の2ファイルをコピーします。これらをプロジェクトフォルダ内にコピーします。Windows環境でしたらユーザフォルダ内にSTM32Cubeがあるかと思います。Vxxxxは適宜読み替えてください。>Linker>Librariesの設定で以下の2項目を登録します。(先程arm_cortexM4lf_math.aをコピーしたディレクトリ)を選択します。endian,fpuの略。endian)のfpuなしのmathライブラリは使う機会があるのか疑問。precision)を扱えるものもある。3Includeをする関数を使いたい.c/.cppファイルにて、以下を定義してIncludeします。マイコンボードによって変更します。別のCPUの時は適宜読み替えてください。3足りないものを追加する試しにこの段階でビルドしてみましょう。次のような怒られが発生するはずです。^~~~~~~~~~~~(以前のTrueStudio環境では、この段階で勝手に足りないものを取ってきてくれて、ビルドが通った記憶があります。)いろいろ足りないので、必要なファイルをIncに追加します。STM32Cube\Repository\STM32Cube_FW_F4_Vxxxx\Drivers\CMSIS\DSP\Include内にある、arm_math.harm_const_structs.harm_common_tables.hをインクルードできる場所に追加します。(例えばプロジェクト内のInc)以上の操作にて、CMSIS-DSPのライブラリが利用できるようになります。試しに以下のようにmainの内部を変更して、コードを実行してみます。*/ブレークポイントを打って実行をすると、以下のように動作の確認ができるかと思います。今回は手抜きをしたのでタイマを動かして動作時間の解析等はしませんでしたが、タイマを動作させて実行時のタイマ値を読んだりすると面白いかと思います。Tips今回は説明の便宜上、必要なものを全てプロジェクトフォルダやIncに入れていますが、別のフォルダにパスを通して、ライブラリに必要なもの一式を入れると見やすくて良いかと思います。2019年8月25日モータの開発環境をA基板上に収めたモータの開発環境は非常に散らかります。モータ・インバータ・電源と3つの要素があり、それぞれを配線が結ぶからです。片付けるのが大変だし、何かと異常が発生していても気づきにくいので、秋月のA基板の上に収めました。使用している環境としては、P-NUCLEO-IHM001のキットhttps://jp.rs-online.com/web/p/power-management-development-kits/9064630/をSTM32F446http://akizukidenshi.com/catalog/g/gM-10176/で開発。電源は秋月のこちらを利用。http://akizukidenshi.com/catalog/g/gM-10663/現在オブザーバ構成中の為、ひたすらMATLABとIDEをにらめっこ。軸の改良など秋月にて、お盆前に以下のようなリール台を取り扱い始めました。611-1http://akizukidenshi.com/catalog/g/gT-14461/店舗には日本アルミット製の100g品のリールが入らない旨の注意書きがありましたが、構わず買ってきました。Goot製のものは難なく入りますが、やはりアルミットのはんだは入りません。入らないので、軸を作り直します。寸法を測定して3DCADで書き起こして、3Dプリンタで出力します。無事にアルミット製のはんだも使えるようになりました。ハンダ付けの作業中に、リールが机から転がり落ちる事が多々あったので、快適になったと感じております。需要があるか分かりませんが、作成した軸については、382円(300円+送料)にて頒布しようと思います。三井住友銀行へ銀行振込のみとなります。普通郵便での配送となります。ご希望の方はコメントもしくはioloa.yutaka@gmail.comまでご連絡ください。2019年8月15日サイトをリニューアルしました。サーバの変更に従い、Webページもリニューアルしました。