meta data for this page
  •  

# STM32

現在自分がメインで使っているマイコンがSTM32です. モータを回して遊ぶことが多いので,タイマが多く,PWM出力が高機能なマイコンが好きで,なおかつインクリメンタルエンコーダがハードウェアが食ってくれるマイコンがいいなぁと思ってさまよった結果これにたどり着きました.

メモを兼ねて紹介を書きます.

# 開発環境

## IDE

2018年現在ならTrueStudioを使うのが一択と言ってもいいと思います. TrueStudioは,2017年12月にSTM32のプロバイダである[STマイクロが買収](http://www.st.com/content/st_com/en/about/media-center/press-item.html/c2839.html)し,現在は無料で全機能が使えるようになっています. ただし,ダウンロード時に氏名とメールアドレスだけ提出する必要があります.

- [公式ページ](https://atollic.com/truestudio/)

## コードジェネレータ

STM32には,CubeMXという強力なコードジェネレータが[公式で提供](http://www.st.com/ja/development-tools/stm32cubemx.html)されています. CubeMXを使うと,GUI上でマイコンのピン設定などをして,ボタンを押すだけで初期化コードを書き出してくれます. 特にややこしいクロック周りの設定も,とてもわかり易く設定できるので助かります.

個人的には,コードジェネレータとしてよりも,マイコンの選定をする段階でCubeMX上で色々試せるのがポイントです. 最近のマイコンはひとつの物理ピンに複数の機能をもたせることが多く,本当にフル機能を使えるわけではない場合が多いです. STM32も同様で,マイコンの選定時にピン数と機能だけで選んでみたら実際にはその機能を同時利用するにはピンが足りなかった…なんてことがしばしばあります. CubeMXを使うと,GUIでポチポチ設定していくだけで各ピンの競合などもわかりやすく,だいぶ苦労が軽減されます.

とても便利なCubeMXなのですが,吐き出すコードがいまいちです. そもそもHAL自体が冗長な上に,ユーザが追記してよい部分というのがコメントで区切られているため,かなり煩雑に見えます. まぁ,それでも一度使ってしまうと手放せないくらいには楽なんですが…

## ライブラリ

STM32の低レイヤを扱うライブラリは,公式からHALとLL APIという形で配布されています. 前述のCubeMXではマイコンによりHALしか出力できないものと,HALとLLのどちらも出力できるものがありますが,LL APIも拡充されておりそのうち全機種対応になるでしょう. 以前はStandard Peripheral Library (SPL) というものが配布されていましたが,現在は更新も止まっているため使う機会は無いでしょう.

HALのほうがハードウェアの隠蔽性が高く移植性が高いということになっていますが,どうにも冗長でしかもハードウェアのフル機能を使いこなせない場合があります(たぶん.やってみてできなかったことがいくつかある). なのでLL APIに期待しているわけですが,まだあまり触れていないので評価はそのうちに…