こんにちは、2週間ぶりのしゅうです。
ちょっとトラブルがありましてブログ公開が遅れてしまいました泣
今回は、まず先にマイコン選定をします。その後、発生したトラブルについて説明と解決策を記していきます。
マイコンの選定
初めての自作マウスなので、細かいことはあまり気にせずとりあえずよく使われているSTM32マイコンを選定します。
こちらの資料に2019年のマイクロマウス大会に出場された機体情報が記録されています。今回僕が作る、クラシックサイズの機体情報はp45から載っています。
ざっくり見ていくと、STM32F303やF405シリーズが多いですね。それに習いつつ、秋月電子などでの入手性を考えて、STM32F303K8とSTM32F405RGまで絞りました。そして、前回まで使っていたBlue Pillに乗っているF103C8の上位版であるF103RBも検討しようと思っています。
それらの違いについてまとめてみます。
STM32… | F103RBT6 | F303K8T6 | F405RGT6 |
---|---|---|---|
ピン数 | 64 | 32 | 64 |
電源電圧 {min ~ max} [V] | 2.0 ~ 3.6 | 2.0 ~ 3.6 | 1.8 ~ 3.6 |
クロック [MHz] | 72 | 72 | 168 |
メモリ {Flash, SRAM} [KB] | 128, 20 | 64, 16 | 1024, 192 |
GPIO | 51 | 25 | 51 |
ADCチャンネル数 | 16 | 9 | 16 |
SPI | 2 | 1 | 3 |
I2C | 2 | 1 | 3 |
以上より、使用可能なピン数や機能を考えるとF405が有力そうです。
また、F303はメモリが少なめなので、プログラム制作時にかなりカツカツになってしまうそうです。ソフトウェアは苦手な方なので、それに関しては特に融通が効くようにしたいですね。したがって、容量が1番多いF405にしようと思いましたが、秋月を見てみると在庫切れだそうです…2021/06/17時点では在庫が復活しているそうです!商品ページはこちら
BluePillの上位互換であるF103から使うことにします。開発ボードをとりあえず買っちゃいましょう!こちらになります。
今回用意した開発環境は、STM32シリーズであればほとんど環境を変えずに開発ができることが大きな利点ですね。
とりあえずLチカ…?
早速届いたので、恒例のLチカをやります。だけど!今回実は、Nucleo-F103RBに書き込みができなくなってしまいました。そこで、今回はそれに至る経緯と解決策を記していきます。
プログラムの設定
Nucleo-F103RBでは、PA5ピンがLD2(緑色のLED)に接続されています。なので、STM32CubeMXでSTM32F103RBTxを選択し、PA5ピンをGPIO_Outputに設定してコードを出力しましょう。プロジェクトマネージャーで、プロジェクト名と使用ツールを指定し忘れないようにしましょう。ツールは前回同様、Makefileを使います。
あとは以下の2行を追加してからmakeするだけです。
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5); HAL_Delay(1000);
書き込み用の.cfgファイルは、今回使用しているマイコンがBluePillと同じSTM32F1シリーズであるため変更する必要がありません。
実行するときだけ、.elfファイルの指定先を間違えないようにしましょう。
書き込み時にエラーが発生する場合は、Nucleo-F103RB側のリセットボタン(右側、黒いボタン)を押してから再度実行しましょう。
原因究明と解決
しかしこの後、ちょっとプログラムを変更して再度書き込みをしようとしても次のようなエラーが返ってきました。このエラーをみると、対象と通信がうまく確立できていなさそうです。
$ openocd -f ./openocd.cfg -c "flash_elf build/LED_blink.elf" Open On-Chip Debugger 0.11.0 Licensed under GNU GPL v2 For bug reports, read http://openocd.org/doc/doxygen/bugs.html Info : auto-selecting first available session transport "hla_swd". To override use 'transport select '. Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD Info : clock speed 1000 kHz Info : STLINK V2J30M19 (API v2) VID:PID 0483:374B Info : Target voltage: 3.234578 Error: init mode failed (unable to connect to the target)
いろいろ調べたところ、SYSのDebugをSerial Wireにしていなかったのが原因かもしれません(参考記事)。
今回の開発ボードにはDebuggerとしてSTM32F103CBT6がくっついております。おそらく、プログラムを書き込む際にこの子を介してF103RBT6と通信するので、それ用のピン設定をしておく必要があるそうです。
SYSの設定
それでは、System CoreのSYSのDebugをSerial Wireに変えましょう。詳しくは以前の記事を参照してください。
これでプログラムを出力して、再度ビルドしておきましょう。
リセット!
どうしてもopenocdで通信が上手くいかないので、統合開発環境に一旦切り替えていこうと思います。こちらからSTM32CubeIDEをダウンロードしてインストールしましょう。特に特別なことはしませんが、macOSの場合、開発元が認証できないのでインストーラーやプログラムを起動する時にシステム設定のセキュリティから承認する必要があります。起動すると以下のような画面が表示されます。
Start a new project from an existing STM32CubeMX configuration file (.ioc)をクリックして、STM32CubeMXの方で作ったプロジェクトを読み込むことができます。新しいプロジェクトを立ち上げるので、最初に設定したワークスペースに保存されます。
ピン設定のみ引き継がれるので、書き加えたプログラムは引き継がれないので注意しましょう
書き込み!
まだ僕自身、STM32CubeIDEの使い方を学んでいるところですが、とりあえず行ったことを書いていきます。デバッグツールをもっと使っていけたらいいかもしれませんね。
まず初めに、.iocファイルしかないので、そのままプログラムを出力します(これはもしかしたらプロジェクトを立ち上げた時に自動生成されていたかもしれないです)。
次にビルドをします。トンカチのアイコンからビルドしましょう(これで現在のプロジェクトをビルドできたり、debugとrelease版で分けてビルドもでできます)。
注意:Command+B、またはこちらのアイコンから行うと、全てのプロジェクト(複数プロジェクトを同時に開くことができるそうです)をビルドしてしまうそうです。
そして、開発ボードを接続した状態で、次のアイコンをクリックしましょう。
実行後、画面下の方で結果が表示されています。特に問題はなさそうですね。開発ボードの方もLEDが点滅しているので無事できました!
まとめ
以上で今後使うマイコンが決まりました。また、ディスコンや何かしらの事情があったときに、今の開発環境のおかげでSTM32マイコンであれば、あまり苦しまずに変更が効くことがわかりました。
そして、ひとまずは統合開発環境を使っていく予定です。今後、openocd経由で書き込みをする方法がわかればそちらに戻そうかと思っております。
次回はセンサやAD変換を扱っていきます!これを扱うためにUAR通信にチャレンジしていきます!