6 years, 6 months ago.

Nucleo F303K8で外部クロック(MSO又はクリスタル)を使用したい

Nucleo F303K8で電子工作をしています。 CANを500kbpsで使用しているので内部発振では少々不安があります。 出来れば外部発振器を使いたいのですが使えていません。どなたか解決法をご存じないでしょうか?

「NucleoはPF0にオンボードのST-LinkからのMSOを入力すれば自動でクロック源をHSIからHSEに変えてくれる」という記述を見ましたので、Nucleoのマニュアルに沿ってSB4,SB8をONにし、SB5,6,7,17をOFFにしましたが、HSEになっていないようです。 Mbedライブラリは151を使用しています。

下の記事を参考にHSIかHSEかの判断をしました。

https://os.mbed.com/questions/77039/Use-external-clock-signal-HSE-in-Nucleo-/

次にSW4STM32へエクスポートしてtargets.jsonを見てみると、F303K8はクロックソースのvalue値が

"value": "USE_PLL_HSI" となっていたので、HSI以外を選択できない設定なのかと思い

"value": "USE_PLL_HSE_EXTC|USE_PLL_HSE_XTAL|USE_PLL_HSI" 又は

"value": "USE_PLL_HSE_EXTC"

としても結果は変わりませんでした(念のためデバッガでRCCレジスタを見てみましたがHSIが有効、HSEが無効になっていました)

"HSE"でmbedライブラリ内を検索するとHSEを有効にするような記述は見つかるのですが、私にはそれらをどう使うか理解が及びませんでした。

ご存知の方いらっしゃいましたらよろしくお願いします。

1 Answer

6 years, 6 months ago.

Koyamaさん
私も気になり確認しました。
ご指摘の通り、現在のMbed(Rev.151)では、いくらハードウェアでPF1ピンに8MHzの外部クロックを供給しても、パワーオンリセットを含めMbedの通常シーケンスでは、HSIベースの64MHzのクロックにしかなりません。
ハードウェア修正部分は、SB6のショートをオープンとし、SB4をショートしています。
ST供給のHALに起因する不具合と思われます。
確かなことは判りませんが、リファレンスマニュアルを読む限りPLLの設定は一度Disableとして再設定しなければならないところを強引に変えようとして失敗しているようでした。
そこで、起動後、HSI=8MHzのPLL無のクロックとし、PLLを停止後にHALのルーチンを呼び出したところ、72MHzのHSEベースで動作しました。
チェックプログラムを作成してみましたので、試してみてください。
STMシリーズは、ボードは廉価で機能も充実して好きですが、ソフトウェア(HAL)の完成度が低く、困る時があります。

Import programcheck_SysClk_for_F303K8

Check program for STM32F303K8 System Clock


オシロスコープや周波数カウンタがあれば、PA8にMCOを出力しましたので、周波数変更が行われていることが確認できます。
後程、notebookにも経緯をまとめて置きたいと思っています。
この設定で、CAN通信が使えるといいですね。

回答ありがとうございます。 リンク先の通りに作業した結果、私の望んだ通りの動作をしていることを確認しました。 (HSEを使用して72MHzで動作しています)

クロック源の設定はかなり複雑なんですね。 回答のプログラムを読んで、勉強させて頂きます。 これからCANのプログラムを作って試してみようと思います。

また、過去の英文の投稿にも返答頂きありがとうございました。

posted by sh koyama 02 Oct 2017