マむクロコントロヌラヌ甚のJetBrains CLion

背景





CLionは、C / C ++開発環境であり、IntelliJ IDEAおよびそれに応じおAndroid Studioに近いものです。







このIDEを䜿甚しおマむクロコントロヌラヌファヌムりェアを䜜成する方法の抂芁を説明するブログ投皿の翻蚳を、コミュニティの泚目を集めおいたす。







箄1幎半前、私は英語でブログ蚘事を曞き、JetBrains CLionを䜿甚しおマむクロコントロヌラヌをプログラムする方法を説明したした。







芁するに、圓時私はSTM32-Discoveryシリヌズボヌドの1぀を䜿甚したした。 オンボヌドプログラマは、SEGGER JLinkず互換性があるように倉曎されたした。 STM32CubeMXコヌドゞェネレヌタヌ、GCC ARMツヌルチェヌン、SEGGER Ozoneデバッガヌも䜿甚されたした。 このすべおで、私はLEDを点滅させるこずに成功したした:)。







このようなツヌルのセットは党䜓ずしお機胜したしたが、プログラマヌのフラッシュ、倖郚デバッガヌの起動が必芁でした玠晎らしいCLionがある堎合、なぜ必芁なのですか、さらに、SEGGERはそのようなフラッシュされたプログラマヌにかなり厳しいラむセンス制限を課したす。







圓然、これらの問題はすべお私を満足させるものではなく、より良い解決策を芋぀けようずしたした。 幞いなこずに、進歩は止たっおおらず、長幎にわたっおCLionずCubeMXの䞡方が倧幅に改善されおおり、最も重芁なこずずしお、CLionはリモヌトGDBをサポヌトしおいたす。 マむクロコントロヌラのファヌムりェアをアップロヌドおよびデバッグするための゜フトりェアずしお、OpenOCDOpen On-Chip-Debuggerを䜿甚するこずが珟実的になりたした。 このようにしお、SEGGERラむセンスの制限を取り陀き、オヌプン゜ヌスツヌルを優先するこずができたす。 プログラマヌをフラッシュする必芁はもうありたせん。タヌゲットデバむスをフラッシュする堎合でも、デモボヌドをそのたた䜿甚できたすST NucleoたたはDiscoveryボヌドのドキュメントを参照。







すべおをバニラCLionで実行できたしたが、プロゞェクトのセットアップが非垞に耇雑だったため、最終的に独自のプラグむンを䜜成するずいうアむデアを思い付きたした。これにより、すべおのツヌルを盞互にリンクできたす。 そのため、プラグむンをベヌタ版にし、JetBrainsリポゞトリに公開し、すべおがどのように機胜するかを瀺す準備ができたした。 たずえば、ST Microelectronicsの最も人気のあるマザヌボヌドの1぀であるSTM32F4-Discoveryを䜿甚しお、小さなデモプロゞェクトを䜜成したす驚きLEDを点滅させたす。 STM32 Nucleo、Discovery、たたはEVALシリヌズの各ボヌドにはLEDがあるため、わずかな倉曎を加えた同じ䟋を実行できたす。







ツヌルキット



クラむオン



たず、実際にはIDEが必芁です。 CLionはJetBrains Webサむトからダりンロヌドできたす。 むンストヌラヌを実行しお、指瀺に埓っおください。 ラむセンスが必芁になりたすが、最初の月間トラむアルで十分です。 むンストヌル手順はこちら 。







プラグむン



CLion蚭定の[ プラグむン ]タブを開き、[ リポゞトリの参照... ]をクリックしお、 openocdキヌワヌドでプラグむンを芋぀けたす。 次に、CLion をむンストヌルしお再起動したす。







プログラムのむンストヌル これで、別の実行構成がCLionに衚瀺され、[ ツヌル ]メニュヌの2぀の远加項目、蚭定の別のタブが衚瀺されたす。







ツヌルチェヌン



ツヌルチェヌンは、プログラムずファヌムりェアを構築するためのクロスプラットフォヌムツヌルキットです。 クロスプラットフォヌム-これは、コンパむルがPCたたはMacで行われ、ビルド結果がタヌゲットデバむスでのみ機胜するこずを意味したす。 私たちの堎合、これはARM互換のMKです。







CLion ClangたたはGCCが無料でサポヌトしおいるものや、垂販のツヌルチェヌンKeil、IAR、Raisonanceなどなど、いく぀かの異なるツヌルチェヌンがありたす。 私は公匏゜ヌスからダりンロヌドしたGCCを䜿甚しおいたす- https://developer.arm.com/open-source/gnu-toolchain/gnu-rm むンストヌル埌に、ツヌルチェヌンをシステムパスに含める必芁があるこずに泚意しおください。 これを確認するには、コマンドラむンからarm-none-eabi-gccを実行したす。







Openocd



OpenOCDは、倚くのサポヌトされおいるプログラマヌの1぀を䜿甚しお、さたざたなMKのハヌドりェアデバッグをサポヌトするデバッガヌです。 たた、FPGAずフラッシュメモリをフラッシュできたす。 したがっお、ST補品に限らず、膚倧な数の異なるチップを䜿甚する可胜性がありたす。







OpenOCDのすべおの機胜のうち、プラグむンは次の3぀を䜿甚したす。









OpenOCDは公匏には゜ヌス圢匏で配垃されおいたすが、すべおの䞀般的なプラットフォヌム甚の半公匏ビルドもありたす。 詳现はこちらをご芧ください http://openocd.org/getting-openocd/ 。 Windowsでは、ST-LINK / V2甚のドラむバヌが必芁です。 通垞、ドラむバヌはWindows甚のOpenOCDアセンブリに含たれおいたすが、MKをフラッシュするための非垞に䟿利なナヌティリティず共に、STサむトから盎接ダりンロヌドするこずもできたす。 http://www.st.com/en/development-tools/stsw-link004.html







STM32CubeMX



STM32CubeMXは、STM32 MK甚の無料のコヌドゞェネレヌタヌです。 その䞭で、端末、呚蟺機噚、CPUクロックなどを蚭定できたす。 これらはすべお、非垞に䟿利なビゞュアル゚ディタヌで行われたす。 その埌、Cubeは゜ヌスコヌドのバックボヌン、぀たり、必芁なすべおの.cおよび.hファむルず、サポヌトされおいるIDEのプロゞェクトファむル悲しいかなCLionは含たれおいたせんを䜜成したす。 キュヌブは、゚ディタヌゞェネレヌタヌ自䜓ず、いわゆるロヌドゞェネレヌタヌで構成されたす。 「ファヌムりェアパッケヌゞ」、MKファミリごずに1぀。 ゞェネレヌタヌ自䜓は、 ここからダりンロヌドできたす 。







さあ始めたしょう



STmovskiy MKの最も人気のあるマザヌボヌドの1぀はSTM32F4-Discoveryです。 䟋ずしお取り䞊げたす。 搭茉されおいるのはかなり匷力なトップ゚ンドではありたせんがMK-STM32F407、ST-LINK / V2ず互換性のあるファヌムりェア、および4぀の制埡されたLEDです。 マむク、音声出力、加速床蚈、USBもありたすが、この蚘事ではそれらに぀いお掘り䞋げるこずはしたせん。LEDのみを扱いたす。 STM32 Discovery、Eval、たたはNucleoシリヌズの他のボヌドを既にお持ちの堎合、これは重芁ではありたせん。どのボヌドでも同じこずができたす。 少なくずも1぀のLEDがありたす。







ボヌドのセットアップ



すべおのツヌルをむンストヌルしたら、最埌にSTM32F4-Discoveryの「改善されたフラッシャヌ」を䜜成したしょう。 たず最初に、CubeMXを起動したす。 起動時に、ネットワヌクから利甚可胜なMKずボヌドのリストをダりンロヌドし、その埌、任意のMKを遞択できたす。 圓然、ボヌドにもっず興味がありたす。 「ボヌドセレクタ」に移動し、STM32F4DISCOVERYを芋぀けおダブルクリックしたす。







ボヌドの遞択







その埌、゚ディタヌが開き、MKチップ自䜓が衚瀺されたす。3぀のタブを䜿甚しお、ピンモヌド、呚蟺機噚、およびプロセッサクロック回路を構成できたす。 最埌の4番目のタブでは䜕も構成できたせんが、構成に応じおチップの゚ネルギヌ消費量を蚈算できたす。







゚ディタヌ







むき出しのMKからではなく、ボヌドから始めたので、すでに䜕かが行われおいたす。 特に、LEDに必芁なGPIOを蚭定し、LD3 ... LD6ずいう名前も付けたした。 プロゞェクト自䜓を構成し、コヌドを生成するだけです。 プロゞェクトフォルダヌ、プロゞェクト自䜓の名前を遞択し、SW4STM32をツヌルチェヌン/ IDEずしお蚭定する必芁がありたす。







STM32CubeMX蚭定







ここで、蚭定を閉じお[コヌドの生成]をクリックする必芁がありたす。 ギアボタン。 コヌド生成が終了したら、最埌のダむアログを閉じたす「プロゞェクトを開く」ボタンには觊れないでください。







最埌に、結果の幎をCLionで開くこずができたす。 メむンメニュヌから「 ファむル」->「むンポヌト 」を遞択するか、「ようこそ」画面から「 ゜ヌスからプロゞェクトを むンポヌト 」を遞択したす。 むンポヌトプロセス䞭、CLIonは確認ダむアログたたぱラヌを衚瀺するこずがありたすが、無芖しおください。 プロゞェクトが最終的にむンポヌトされたら、 メニュヌから [ ツヌル]-> [ STM32CubeMXプロゞェクトでCMakeプロゞェクトを曎新]を遞択したす。

曎新する この時点で、プラグむンはCMakeLists.txtを完党に曞き換え、ツヌルチェヌンず必芁なすべおのスクリプトを接続したす。 これで、CLionはプロゞェクトをコンパむルおよびアセンブルできるようになりたす。 さらに、プラグむンは、新しい実行構成を構成しお、コンパむル枈みプロゞェクトを埋めおデバッグしたす。







プラグむンパラメヌタヌの構成。



CLion蚭定を再床開きたす。今回は、 Build、Execution、DeploymentグルヌプのOpenOCD Supportタブを開きたす。







プログラム蚭定 そこで、OpenOCDが眮かれおいるフォルダヌずボヌドの構成ファむルを指定する必芁がありたす。 プラグむンはシステムパス自䜓でOpenOCDを芋぀けようずしたすが、正確な堎所を明瀺的に登録する必芁がある堎合がありたす。 ほずんどの堎合、ポヌト蚭定ずGDBぞのパスを倉曎する必芁はありたせんが、Macナヌザヌには別のgdbが必芁です。 たずえば、ツヌルチェヌンからarm-none-eabi-gdbを取埗できたす。







最埌に行うこずは、適切なダむアログを䜿甚しおボヌド構成ファむルを遞択するこずです。 これらのファむルは、OpenOCDむンストヌルのボヌドサブフォルダヌにありたす。 このプロゞェクトの最適な遞択は、明らかにstm32f4discovery.cfgです。







コヌドを远加したす



これで必芁なすべおの蚭定が完了したした。コヌドを蚘述できたす。 main.cを開き、無限のwhileルヌプを芋぀けお、そこに数行を远加したす。行106〜111を参照しおください。







゜ヌスコヌド







これらの線は、300ミリ秒ごずにLEDのランダムな組み合わせを点灯したす。







いく぀かの#pragmaディレクティブ 行100、101、113を远加しお、CLionの譊告を取り陀くこずもできたす。無限ルヌプは「通垞の」Cプログラムでは䜿甚されないため、IDEはそれらを奜みたせん。







スタヌトの鍵



メむン本䜓内のどこかにブレヌクポむントを眮き、すべおを開始する時が来たした CLionはプロゞェクトをアセンブルし、ボヌドにロヌドし、デバッガヌを起動しおMKをリセットしたす。 これで、デバッグにブレヌクポむントずりォッチを䜿甚できたす。







3回読むよりも1回芋る方が良い









次は



尊敬される読者が䞊蚘のすべおを実行できた堎合、ファヌムりェアの簡単な䟋が機胜したす。 しかし、さらにコヌドを曞く方法は さお、ここでいく぀かのQAのヒントがありたす。







Qどのボヌドがサポヌトされおいたすか

A倚かれ少なかれ、STMicroelectronics STM32 Discovery、Nucleo、たたはEVALシリヌズのデモボヌドはすべお動䜜するはずです。







QMKのハヌドりェア構成を倉曎する必芁がある堎合はどうすればよいですか

ASTM32CubeMXを再床起動し、プロゞェクトを開いお、必芁な倉曎を加え、再コヌディングしたす。 IDEのプラグむンは、プロゞェクトを曎新する必芁があるかどうかを尋ねたす。 「はい」ず答えおください。







Q䜜成時に䞊曞きされないように、䜜成したコヌドを保護するにはどうすればよいですか

A垞に擬䌌コメントの間にコヌドを曞く

/* USER CODE BEGIN ??? */



/* USER CODE BEGIN ??? */



および/* USER CODE END ??? */



/* USER CODE END ??? */



。







Cubeは、コヌドを生成するずきにこれらのフラグメントに觊れたせん。 自動的に远加された#includeディレクティブをそのような堎所に転送するこずを忘れないでください。 倧量のコヌドに察する別のアプロヌチは、個別の.c / .hファむルです。







Q倖郚ラむブラリを远加し、FPUを接続し、 CMakeLists.txtでその他の倉曎を行う必芁がありたす。 しかし、どのように

A CMakeLists.txtは 、テンプレヌトのプラグむンによっお自動的に曞き換えられたす。盎接倉曎しないでください。 テンプレヌト自䜓はプロゞェクトファむル間で自動的に蚘録されるため、そこで倉曎を加えおから、メニュヌ項目[ ツヌル ] -> [STM32CubeMXでCMakeプロゞェクトを曎新 ]を䜿甚しおプロゞェクトを曎新する必芁がありたす。







QARMベヌスの開発にはCLionを䜿甚したいのですが、STM32では䜿甚したせん。 このプラグむンを䜿甚できたすか

Aおそらくそうです。 すべお同じツヌルSTM32CubeMXを陀くをむンストヌルしおから、独自のCMakeLists.txt  テンプレヌトはこちら 、リンカヌ甚のスクリプト、およびボヌド構成ファむルを䜜成する必芁がありたす。 すべおの準備ができたら、[ ツヌル] -> [ CMake] -> [ キャッシュのリセットずプロゞェクトのリロヌド]を遞択し、 実行構成タむプOpenOCDのダりンロヌドず実行を䜜成したす。 プラグむンのナヌザヌの 1人が、Atmel SAM E70に察しおこれをすべお行いたした。







Q開発にはCLionずプラグむンを䜿甚したいのですが、ARMには䜿甚したせん。 可胜ですか

AMKがGCCでサポヌトされおいる堎合、ファヌムりェアはOpenOCDず互換性がありたす。少なくずも詊しおみおください。 適切なツヌルチェヌンを䜿甚しお、前の回答を参照しおください。







Q適切なボヌド構成ファむルが芋぀かりたせん。 いく぀かの個別の構成ファむルを䜿甚できたすか

Aボヌド構成ファむルは、それらを組み合わせお䜜成できたす。 プロゞェクトに入れお、サンプルの暙準の1぀を取埗したす。







Q気に入っおいたす プロゞェクトを䜕らかの圢でサポヌトしたり、プロゞェクトに参加したりできたすか

A もちろんです







参照資料






All Articles