いつものように Twitter を眺めていたところ、こんなサイトへのリンクを発見。↓
なになに?ん??
あ...Atolic True Studio と System Workbench for STM32 が新規使用非推奨になってる!?!?!?
まさかの事態です。でも、どうやら STM32CubeIDE という新たな IDE が登場しているらしいです。
CubeMX と OpenOCD などてんこもりの IDE のようです。いいですね〜〜〜
早速文句ですが、ここまでやってくれているんだったら CubeProgrammer も内包してほしかったとおもいます。
さっそく Mac 版をダウンロードして、インストールします。zip ファイルは展開すると dmg イメージになりますね。ダブルクリックしてマウントします。
そして表示されたウィンドウはこちら。
どうやらインストールに順番があるらしいです。指示に従ってインストールします。
使ってみよう
今回は STM32F042K6Tx (いつもの F303 ではありませんが...)をやってみます。この IDE はやはり Eclipse ベースのようです。
結論から言うと、CubeMX のコード生成機能、IDE の使い勝手は TrueStudio や SystemWorkbench と殆ど変わりません。これらの IDE を使っている人はすぐに移行できると思います。
プロジェクト作成
画像のみ載せますので、雰囲気で感じ取ってください。
メインの画面
デフォルトで .ioc ファイルが開かれています。これが CubeMX に相当する機能のようです。
適当に PF0 を GPIO_Output にしてみました。
設定が終わったら、保存をするかツールバーの黄色い歯車ボタンを押すとコード生成がされます。
Src/main.c
を見ると早速コードが生成されているっぽいです。メイン関数にも適用されています。
Lチカコードを書く
先程設定した PF0 でLチカしてみましょう。こんなコードでどうでしょうか。
できたら、例の金槌ボタンを押してビルド。System Workbench よりも断然速いです!
書き込もう
ST-LINK あるいは J-Link をつなげて虫のアイコンをクリックします。すると小さいダイアログが出てくるので(各プロジェクト初回の1回のみ)、STM32 C/C++ Application を選択します。
デバッグプローブの設定は、このようにして出てきたウィンドウでできます。OK をクリックすると書き込みが始まります。
このままデバッグ開始もできますし、ツールバーの停止ボタンを押してデバッグをしないということもできます。再度 USB ケーブルを抜き差しすると書き込まれたプログラムがひとりでに動き出します。
愚痴
タブがスペース2個であるというのは変わっていないよう。Eclipse のデフォルト設定が4個分なのに、なぜ2つにした。。。しかもスペース2つというのはかなり少数派なのではないだろうか?個人的にはかなり気持ち悪いですねぇ。それ以外はかなり良くできていて、コード生成からプログラム書き書きまでかなりシームレスに行うことができると思います。
CubeMXを排除して使ってみる
で、僕はレジスタ手打ち原理主義者なんですよ。なので頑張って CubeMX をプロジェクトから追いやろうと思います。
そのためにやったことは次のような感じです。
- .ioc ファイルを削除
Drivers/STM32F0xx_HAL_Driver/Src
をまるごと削除Src/stm32f0xx_hal_msp.c
,Src/stm32f0xx_it.c
を削除Inc/stm32f0xx_it.h
,Inc/main.h
を削除
これで余計なファイルが削除できましたね。最後に Src/main.c
を以下のようにまっさらにすれば完璧です。
#include "stm32f0xx.h"
int main(void) {
while(1) {
}
return 0;
}
素晴らしい!まっさらできれいな環境の出来上がりです。
先程の PF0 をLチカしてみましょう。こんなコードですかね。
#include "stm32f0xx.h"
void ms_wait(uint16_t ms) {
SysTick->LOAD = 1000 - 1;
SysTick->VAL = 0;
SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;
for(uint16_t i = 0; i < ms; i++) {
while( !(SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk) );
}
}
int main(void) {
RCC->AHBENR |= RCC_AHBENR_GPIOFEN;
GPIOF->MODER = 0b01; // output
while(1) {
GPIOF->ODR ^= 1;
ms_wait(1000);
}
return 0;
}
はい、速攻でLチカできました。Atolic TrueStudio と違って _Msk
系のマクロが生きていたのが嬉しいですね。
コンパイラのバージョン
モダンな時代に生きる我々にとってはコンパイラのバージョンは三度の飯より大事なのです。C言語はもう枯れているからいいとして、C++ に関しては C++17 になってようやく近代になった(C++14 は中世、C++11 は古代)ので、少なくとも25歳以上の男子は C++17 以下を使うとなると人権の侵害になります。
ちなみに、C++20 はまだ現代になりきれていない近代だと思います。
ということで C++ コンパイラ、arm-none-eabi-g++
を探してみましょう。Mac では /Applications
にインストールされるため、こんなシェル芸で見つけられますね。
$ find STM32CubeIDE.app -name "arm-none-eabi-g++" | xargs -n1 -I {} echo {} -v | bash
どうやら2箇所に該当の物があるらしいですが、どちらも 7.3.1 でした。C++ の日本語リファレンスページによると、どうやら C++17 に対応しているよう。やったー!
コメント
But, never try to run using Catalina, because you will have a hard time.
Hi, klay
I know how Catalina is really bad for embedded programming. Many people has reported that some serial drivers and connectivity of MCU or FPGA is made very bad and bad.
So I WILL keep Mojave as it is, except Xcode and Safari updates.