CubeMXが生成するNucleo F722ZEのテンプレートにバグがある

一月ほど前、CubeMXが生成するシリアルコードにバグがあるのではないか、おそらくはクロック周波数の設定だろう、というエントリを書きました。

この問題に関しては、症状を100%再現する最小規模のプロジェクトと、比較用に問題なく動作するNucleo L152RE用のプロジェクトを用意したうえでコミュニティに報告していました。しかしながら、1ヶ月の間なんの音沙汰もありません。

STM32 HALに関しては新たにI2C Slaveの問題が発覚したこともあり、紫ライブラリの開発に行き詰まり感が出てきたため、この問題を掘り下げることにしました。その結果、CubeMXが生成するNucleo F722ZE用のテンプレートに初期値の設定ミスがあり、その結果シリアルが正しい速度で動作しないということがわかりました。

問題の初期値はマイコンのクロック入力周波数です。ここを8MHzとすべきところで、25MHzとなっていました。手元で正常動作を確認しているNucleo L152REやNucleo F746ZGでは8MHzとなっています。Nucleo F722ZEの設定を手作業で8MHzに変更したところ、文字化けがあっさり消えました。

CubeMX 5.0が生成するNucleo F722のテンプレートはHSEが25MHzになっている。
Nucleo 144の回路図によればHSE(PH0)は8MHzである

今回判明した根本原因とワークアラウンドは、コミュニティに報告済みです。

それにしても、SoC LSIのマスタークロックの設定が違っているということは、USBも、LEDチカチカも正常動作しなかったということです。かつては正常動作していたものがあるときからおかしくなっています。STは何らかの修正をしたあと、動作確認せずにリリースしているのでしょうね。

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください