STM32F401 BlackPillボードでSTM32に入門してみる

電子工作を改めていろいろやってみたくなって。Arudinoは環境整っててすごく良いと思うんですが、 bootloaderのオーバーヘッドを含んだ上で、USB関係書きたくなるとATMEGA32U4って結構カツカツじゃない?って意見をみて蟹になったので。

買ったのはタイトルの通りSTM32F401のBlackPillボードで、これは対象のチップ1つだけとそれを動かすためだけの物が載ったシンプルなボード。
USB Type-C端子があり、給電やUSB通信の他、ブートローダーが導入されていればここからイメージの書き込みも可能。

USB端子と逆側にはデバッカー接続用のピンがあり、ここにST-LINK等のデバッカーを接続することでイメージの書き込みと動作中のデバッグが可能になる(らしい)

環境構築

せっかくなら一旦Arudinoではなく公式環境で書いてみたいと思い、”STM32CubeIDE”と”STM32CubeProgrammer”をセットアップ。
ダウンロードにユーザー登録が必要だったけど、無料でダウンロードして利用できる。
メールには結構広告が来るので気になる人はすぐにoffった方がいいかも。

Lチカまで

何も考えずにインストールしたIDEで新しいプロジェクトを開くと、真っ先にチップと利用するピンを設定する画面が出てくる。
これはSTM32CubeMXと言う初期化コード自動生成ツールのためのUI。意識せずとも入ってくるんですね。


ここで設定した内容は、機能初期化ソースの自動生成に使われる。
なので、ボードで買っていてもピン設定はボードに合わせて完全にする必要は無く、使用したいピンだけ設定すればそれでいいみたい。

ピン設定を保存するとこんな風に聞かれて、

自動生成されたmain.cのコードにピンの初期化コードが含まれている。

色々コメントがあるけれど、我々ユーザーが書くコードはこのコメントのBEGIN~ENDの間に書く必要がある。さもなくば自動生成のタイミングで消されてしまう。

Lチカのコードはどこかで見たこんな感じで、USER CODE 3のwhile(1)のループ内書いている

    /* USER CODE BEGIN 3 */
	  HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET); //LEDを点灯
	  HAL_Delay(500); //500ms待つ
	  HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET); //LEDを消灯
	  HAL_Delay(500); //500ms待つ
  }
  /* USER CODE END 3 */

ここで使っている関数は、HAL関数と呼ばれる、ハードウェアを抽象化した実装を可能にするHALライブラリが提供してくれている物のよう。
現在CubeMXで吐くソースはHALライブラリを使っているので、自ずと見る事にはなる様子。
頭に”HAL_”が付いているHAL関数自体のドキュメントはPDFで転がっているのを見ることができるようですが、なんとも見づらい・・・

調べた所、ここまでの通りプロジェクトを作っていると、ファームウェア等に伴ってサンプルプログラムが勝手にDLされている様子。
STM32 HALの勉強方法 – Qiita とあったので自分の環境で探したところ、
C:/Users/[ユーザー名]/STM32Cube/Repository/STM32Cube_FW_F4_V1.27.1/Projects/STM32CubeProjectsList.html
なんてところにありました。デフォルトワークスペースディレクトリ(C:/Users/[ユーザー名]/STM32CubeIDE)のお隣ですね。
Projectsディレクトリには、各サンプルプロジェクトが入っている。ここにHALを使ったものが色々とあり、基本的な機能はここのサンプルから学べる。
ただし自動生成ではないコードなので、自分のプロジェクトに落とし込むにはサンプルのmain.cの処理から、自動生成される初期化の部分を省いて自分のソースに移してくる必要がある。
この点面倒だけど、注意してみていくと何が初期化されているかを何となく把握できるようになるので無駄ではないと思った。個人の感想。

ソース書けたらビルドしてボードに書き込むわけですが、ここで問題が発生。
st-link互換ライターを買ってあったんですが、まったく認識できない。ライターのファーム更新なんかもしましたがだめ。なのでBOOTボタンを押しながらRESET、するとUSB経由での書き込みが出来るモードになる。CubeProgrammerでUSBモードでコネクト、ビルドして出てきたHEXを書き込む。これでLチカは無事に動いた。

ここまでやって思った事

なんといっても楽なので、Nucleoボード買って学習して、小さくしたりする需要が出てきたところでBlackPillボードを買うほうが良いと思った。

Nucleoボート高いと思い込んで避けたんですが、ちゃんとした所で買えばそこまで高くない。
BlackPillボードとデバッカ買うならさして変わらない位だった。なんだかな。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です