STM32F4-Discovery/Nucleo-F401RE 用FM音源プログラム -- TGSTM32F4 (14)
久しぶりに秋葉原へ出かけて、
- 9.216 MHz 水晶振動子 (秋月)
- Nucleo-F401 (秋月)
- FM 音源チップ YMF297、YM2610 (FM 音源ガチャ)
- PIC32MX250F128B (秋月)
などを買ってきました。
FM 音源チップや、PIC32MX については別の記事で触れることにして、今回は STMicroelectonics 製の「Nucleo-F401RE」について取り上げます。
STM32F4-Discovery ボードと比較すると、
STM32F4-Discovery | Nucleo-F401RE | |
---|---|---|
搭載チップ | STM32F407VGT6 | STM32F401RET6 |
チップ・ピン数 | 100 ピン | 64 ピン |
最大クロック 周波数 |
168 MHz | 84 MHz |
ボード上の 周辺デバイス |
オーディオDAC、LED 4個、 加速度センサ、タクトSW シリコン・マイクなど |
LED 1個、タクトSWのみ |
外部クロック用 水晶振動子 |
実装ずみ (8 MHz) | なし |
Arduino 互換 コネクタ |
なし | あり |
mbed サポート | なし | あり |
チップ内蔵の周辺モジュールも、F407 にはあったイーサネット MAC や USB OTG HS MAC は F401 では省略されています。
ただし、これらのモジュールを使わないアプリケーションに対しては影響ありません。
FM 音源プログラムのような、ディジタル・オーディオ出力主体のアプリケーションでは、Nucleo-F401RE は STM32F4-Discovery に比べて、
点がデメリットになります。
ただし、F401 でも F407 同様に I2S 用の PLL が内蔵されているので、12.096 MHz の水晶振動子を使って、CPU を最高の速度の 84 MHz で動かし、USB 用の 48 MHz も供給しながら、ディジタル・オーディオ用のサンプリング周波数の 22.05 kHz、32 kHz、44.1 kHz、48 kHz などを 256 fs のマスター・クロック付きで誤差ゼロで実現できます。 (→こちらの記事)
Nucleo シリーズは、搭載チップが異なっていても、各ボートが同一の価格 (秋月価格では 1500 円) で販売されていますが、I2S 用 PLL が内蔵されているのは F4xx だけなので、ディジタル・オーディオ用途には F401RE を選ぶのが妥当です。
Nucleo では、外部クロック用の水晶発振回路の部品が全く実装されていません。 (20 pF コンデンサすらも)
また、ボード・リビジョンが「C-01」では、ST-LINK の MCU の MCO 出力から供給される 8 MHz クロックも接続されていないので、デフォルトの状態では内部 RC 発振回路による 16 MHz HSI クロックだけが PLL の入力クロックとして使えます。
一方、Discovery では、デフォルトで ST-LINK 側の MCO 8 MHz が有効な状態で、実装されている 8 MHz の水晶振動子は単なる「飾り」にしかなっていませんでした。 (→こちらの記事)
USB アプリケーションのように、正確な周波数が必要な場合には HSI では十分な性能が得られません。
これを解決する最も簡単な方法は、SB16 と SB50 のハンダ・ブリッジを導通させて ST-LINK 側の 8 MHz を入力する方法です。 8 MHz 以外を選べませんが、これなら追加のコストもかかりません。
ここでは、8 MHz 以外の外部クロックを利用するため、水晶振動子をボードに実装する方法を示します。
まず、デフォルトの状態のボードの状態の写真を下に示します。
これを機能させるには、
する必要があります。
水晶を差し替えられるように、3 ピンのシングル・インライン・ソケットを X3 の部分に実装しました。
X3 のエリアの中央部にパターンが走っているので、その部分に穴をあけるわけには行かず、ソケットの中央のピン (の基板に刺さる部分) を切断して、残りの部分にリード線をハンダ付けしてグラウンドに落とし、コンデンサ内蔵型セラミック振動子を使えるようにしています。
20 pF コンデンサについては、手持ちにサイズが適合するチップ・コンデンサがなかったので、基板裏面に通常のリード線タイプの 22 pF 積層セラミック・コンデンサを付けました。
SB60 はアナログ・グラウンドとディジタル・グラウンドを接続しているハンダ・ブリッジなので、22 pF コンデンサの片足を落としています。
なお、SB54 と SB55 は OSC_IN 端子と OSC_OUT 端子を拡張コネクタに引き出すためのハンダ・ブリッジで、発振への影響を少なくするためには除去する必要があります。
拡張コネクタから外部クロックを入力する必要がある場合には、SB55 は導通させたまま残しておきます。
12.096 MHz の水晶振動子を差し込むと下の写真のようになります。
この状態で、システム・クロック側と、I2S クロック側とが、それぞれ正しい周波数になることを確かめました。