STM32G0シリーズは従来のSTM32F0シリーズに比べてクロックが向上し、価格も安くなっています。さらに新しいラインアップとしてG0**Jが登場し、SO8パッケージも追加されています。特にF0やG0といった低価格帯かつ小さいパッケージでI2Cを2つ搭載しているものはG0シリーズしかないため、I2Cを複数使用したい場合には非常に魅力的です。
ただ、SO8パッケージはSTM32マイコンのペリフェラル機能を8ピンに凝縮しているため、様々な犠牲が出ています。その1つとして困った現象が生じたため、今回紹介します。
主なSTM32G030J6、STM32G031J6のパッケージ起因犠牲点
@NRST、BOOTといったシステム関連のピンも他のピン機能と共用
AVBATが使用できない
BHSE(高速外部クロック入力)が使用できない
A、Bは用途によっては全く問題ありませんが、@がペリフェラル設定によっては厄介な問題を引き起こします。
データシートを見るとP.34 Table 12. Pin assignment and descriptionの注釈に「For the device in SO8N package, the PA0, PA1, and PA2 GPIOs are bonded with NRST on the pin 4. In order not to interfere with device functions, they must not be set in alternate function or in output but remain at all times in input configuration.」と記載がありました。
デバイスの機能と干渉を防ぐためには4番ピンは他の機能ピンや出力ピンとして設定禁止ということです。他の機能割付けや出力として設定するとリセットが効かなくなり、ファームの書き換え等ができなくなります。
また、PA14、PA13をSWCLK、SWDIOとして設定しない場合も注意が必要です。一度、I2CやUARTとして設定したファームを書き込みすると以降はST-Link Utility等からボタン操作1つでは認識できず、ファーム書き換えが簡単にはいきません。今回、困った現象としてPC14、PA14をUartに設定したところ、ST-Link Utilityから認識できない現象が発生し、ファームの書き換えができなくなってしまいました。
この現象はSO8パッケージ以外でもSWD端子に他の機能を割り付けると発生する問題ですが、従来のSTM32シリーズではBOOTピンがあったため、BOOTピンをHighにすればファームがロードされずに起動させることでファーム書き換えができました。STM32G0シリーズのパッケージによってはBOOTピンが除かれているため、従来の方法が使えません。
このような場合にファーム書き換えをする場合は4番ピンをGNDにつないだリセット状態で電源を投入します。ST-Link Utility等のConnectボタンを押してすぐに4番ピンをGNDから外すと再び認識し書き換えできるようになります。4番ピンを他の機能割付けや出力ピンとして設定するとこの方法も使用できないため、完全にファーム書き換えができなくなります。
STM32G030J6では4番ピンは未使用にした上で、ピンの制約はありますが、可能な限りPA14、PA13はデバッグ、書き込み用としてSWCLK、SWDIOを確保して設定した方が良さそうです。
記事が大変すばらしいので
直接リンクを張らせていただきました。
画像の一部を利用させていただきました。
たいへん、ありがとうございました。