残念なことに、これまで続けていたSTM32L0によるGPSロガーの開発は中断しなければならなくなった。非常に悔しい思い。
理由はかなりシンプル。国内だけど駐在しなければならなくなったということ。状況としてはGPSロガーとして必要となるSTM32の機能の使い方がわかり、いったんブレッドボード上にハードを組み上げ、ソフトを追加していたところで起きた出来事だった。
ソフトウェアを作り上げていくことで気づいた点を幾つかあげてみる。
- AVRマイコン + Arduinoの構成と比較し、STM32 + HAL Driverよりもコードのサイズが大きい(!?) 分析が必要だが、以前作ったAVRマイコン + Arduinoライブラリよりもコードサイズが大きくなった。ソフトウェアの構造を変えたからなのか?それともMPUのコード効率の差なのか?それぞれのライブラリの大きさの差に起因するのか等、もう少し調べなければ分からないですが、少し意外だった。
- STM32シリーズにより使用できる機能に差異がある点に注意 この点をについては有識者にとっては当たり前なのかもしれないけど当方にとってはちょっとした「落とし穴」だった。EEPROMやCANの有無くらいかと思っていたが、SDIOの有無についても差があったとは!急遽SDカードへのアクセスはSPI経由で行うように変更したのだった。
- MPUの処理性能はAVRマイコンよりも凄そう STM32L0の初期状態におけるMPUのクロック周波数が2MHzなのだが、この状態でも115200bpsで送受信を行ってもデータの取りこぼしがなかった。
- ソースコードデバッグができる環境は当たり前だが便利 当方の技術不足と言ってしまえばそれまでなのだが、AVRマイコンではMac上でソースコードデバッグ環境をEclipse上で構築できなかったが、STM32では比較的容易に構築できた。AVRもWindows上ならAtmel Studioなる統合環境がありソースコードデバッグができるのだがエミュレータ環境は使いたくないし…
- STM32/HAL Driverに関する日本語の情報が少ない 最も苦労したのがこの点。Arduinoではこの点は非常に充実している。STM32の場合、「Standard Peripheral Library」から「HAL Driver」に変更したことにより、更に情報が少なくなってしまった。この2つにライブラリの類似点はあるのだが、完全には一致しない。加えてSTM32ファミリーによっては機能に互換性がない部分もあるようで、HAL Driverの仕様が若干異なっている。当方はADCではまってしまった。STM32L0と比較的情報が多いSTM32F0では「Rank」等、若干差異があるようだ。
- HAL Driverは一部使いにくい 使用した機能のなかではUSARTやADCは同期I/Fは使いにくかかった。はっきり言って非同期I/F以外は使い物にならなかった。同期I/Fの場合、ADCは複数のチャンネルを扱えないし、USARTは頻繁にエラー発生により送受信できなくなるし…
- ユニバーサル基板上に実装しにくい… STM32にはDiscoveryやNucleoという格安の評価基板が売られているのだがいかんせん大きい。STM32はDIPパッケージはないし、SSOPはピン数が少ない。QFPパッケージならピン数は多いが半田付けしにくいし変換基板を使うと大きくなるし…個人で扱いやすいパッケージを作って欲しいものです。