[STM32CubeIDE] いい感じにクロック設定する

背景)

STM32CubeIDE を使うと、「Clock Configuration」のタブにて 「Resolve Clock Issues」 のボタンを押下すると、自動でエラーを解消してくれるが、ベストとは思えない設定で落ち着くことがあり疑問に思ったので、ちょっと調べた。

前提条件)

  • 外付けクリスタルは無い
  • USBを使えるように 48MHz を供給する必要がある
  • SDMMC1 にも 48MHz を供給したい
  • SYSCLK には 80MHz を供給したい(願望)

ポイント)

Connectivity > SDMMC1 と USB_OTG_FS を有効にした状態で 「Resolve Clock Issues」を実行した場合、以下のような設定が選ばれる。

  • PLL Source Mux は MSI を使う
  • MSI は 4000 kHz (= 4MHz) を指定
  • PLL M は /1
  • PLL *N は x16
  • PLL /R は /2
  • PLL SAI1 *N は x24
  • PLL SAI1 /Q は /2
  • System Clock Mux は PLLCLK を使う
  • CLK48 CLock Mux は PLLSAI1Q を使う

上記の構成が指定された結果、SDMMC1とUSBには48MHzが供給されるが、SYSCLK は 32MHz となり、やや遅くて少し残念。そこで下記のように変更すると良い。

  • PLL Source Mux は MSI を使う
  • MSI は 4000 kHz (= 4MHz) を指定
  • PLL M は /1
  • PLL *N は x40
  • PLL /R は /2
  • PLL SAI1 *N は x24
  • PLL SAI1 /Q は /2
  • System Clock Mux は PLLCLK を使う
  • CLK48 Clock Mux は PLLSAI1Q を使う

このような構成にすることで、SDMMC1 と USB_OTG_FS に 48MHz を供給しつつ、SYSCLK に 80MHz を供給できる。

注意事項

USB_OTG_FS には 48MHz を供給する必要があるが、 HSI から作ったクロックを供給することはできないらしい(精度の問題による制限事項)。 外部クリスタルを利用した HSE クロックもしくは、MSI クロック から作り出した 48MHz じゃなければいけない。

コメントを残す

メールアドレスが公開されることはありません。