STM32F4-Discovery 用FM音源プログラム -- TGSTM32F4 (9)

STM32F4-Discovery の外部接続用ヘッダ・コネクタ (P1、P2) に出ている信号で、ボード上のデバイスと接続されていない「未使用」のピンをまとめた図を作りました。
ポート名と信号名が併記されているのが、ボード上のデバイスと接続されているピンで、ポート名だけのピンからは、そのピンに割り当て可能な信号うち主要なものを「端子」の形で示してあります。
「MIC_」で始まっている信号は、MEMS audio sensor (いわゆるシリコン・マイク) の MP45DT02 で、「CODEC_」は DAC の CS43L22、「MEMS_」は MEMS 3 軸加速度センサ の LIS320DL を表しています。
FSMC (Flexible Static Memory Controller) や DCMI (Digital CaMera Interface) については、パッケージのピン数が 100 ピンと少なく、共用している他のファンクションにより分断されてしまい、実際上は利用不可なので考慮してありません。

左の図は、ボード左側のヘッダ (P1) のピン・アサインです。



左の図は、ボード右側のヘッダ (P2) のピン・アサインです。


MIDI 入力用として少なくともひとつのシリアル入力が必要になります。
MIDI 出力は特に必要ありませんが、FM 音源プログラム以外のアプリケーションのシリアル入出力として、RX、TX をセットで確保しておきます。
また、キャラクLCD / スイッチ入力 のインターフェースとして、以前に作った PIC / AVR によるシリアル-パラレル変換を利用することを考えていて、そのためのシリアル入出力も 1 組必要になります。
ボード上のデバイスと重ならないシリアル (USART) 入出力をまとめると次のようになります。
(3 月 22 日 / 23 日追記: PA2 と PA3 の信号名が入れ替わっていたのと、PD6 の信号名が誤っていたのを修正しました)

ヘッダ ポート 信号名
P1-11 PA1 UART4_RX
P1-13 PA3 USART2_RX
P1-14 PA2 USART2_TX
P1-35 PB11 USART3_RX
P1-40 PD8 USART3_TX
P1-41 PD9 USART3_RX
P2-24 PB7 USART1_RX
P2-30 PD6 USART2_RX
P2-34 PD2 UART5_RX
P2-38 PC11 UART4_RX / USART3_RX
P2-47 PC6 USART6_TX

USART2 と USART3 については、RX、TX ペアで確保できますが、USART1_RX、UART4_RX, UART5_RX、USART6_TX については RX、TX のいずれか一方しか利用できません。
FM 音源プログラム用としては、USART2、USART3 のうち一方を MIDI 用、もう一方を LCD 用に使うことになると思います。
FM 音源プログラム用としては、さらに

  • ジー/アイドル LED 表示用出力ポート 1 ビット
  • (legacy) MIDI / serial MIDI 判別用入力ポート 1 ビット
  • CPU 負荷率計測用 AD コンバータ入力 1 チャネル

が必要になりますが、LED はボード上に実装されているものを利用するつもりなので、残りの入力ポート 1 ビット、AD 入力 1 チャネルを割り付けを決定すれば良いことになります。
これは、他の信号の割り付けを決定したあとに、残り物のポートの中から選べば十分です。
FM 音源プログラム以外のアプリケーション、たとえば MIDI-to-CV を PWM を利用した DAC で実現する場合を考えると、内蔵タイマ・モジュールの中でも TIM1、TIM8 はタイマ・クロック周波数が 168 MHz と高く好都合です。
14 ビット分解能の設定でも、168 [MHz] / 16384 = 10.254 [kHz] と比較的高い PWM 周波数が得られます。
幸いに、ボード上のデバイスと重ならないピン上に、TIM1、TIM8 それぞれ 4 ch の PWM 出力を確保でき、合計 8 ch 分を出力できます。

ヘッダ ポート 信号名
P1-21 PB1 TIM1_CH3N / TIM8_CH3N
P1-22 PB0 TIM1_CH2N / TIM8_CH2N
P1-26 PE8 TIM1_CH1N
P1-27 PE9 TIM1_CH1
P1-28 PE10 TIM1_CH2N
P1-29 PE11 TIM1_CH2
P1-30 PE12 TIM1_CH3N
P1-31 PE13 TIM1_CH3
P1-32 PE12 TIM1_CH4
P2-45 PC8 TIM8_CH3
P2-46 PC9 TIM8_CH4
P2-47 PC6 TIM8_CH1

MMC / SD カードを使った応用では、ボード上のデバイスには使われていない SPI2 を利用してインターフェースすることになります。
SDIO (Secure Digital Input/Output inteface) は、ボード上の DAC CS43L22 と重なりますし、「趣味の電子工作」を楽しんでいる単なる個人であり、SD アソシエーションに参加しているわけではありませんから、SDIO は使用できず、SPI モードでの利用を選択するしかありません。

ヘッダ ポート 信号名
P1-36 PB12 SPI2_NSS
P1-37 PB13 SPI2_SCK
P1-38 PB14 SPI2_MISO
P1-39 PB15 SPI2_MOSI

STM32F407 には、USB OTG コントローラが 2 系統内蔵されていて、一方は従来からある FS (Full Speed、 12 Mbps) 対応のコアで、もう片方が HS (High Speed、480 Mbps) 対応のコアです。
USB_OTG_HS コアについては、HS で利用するためには、480 Mbps 対応の ULPI PHY を外付けすることが必要になります。
FS (12 Mbps) までで良ければ、内蔵の FS PHY を利用することができます。
以下に示すように、SPI2 の端子と重なっているので、SPI2 と USB_OTG_HS コアは排他利用になります。

ヘッダ ポート 信号名
P1-36 PB12 OTG_HS_ID
P1-37 PB13 OTG_HS_VBUS
P1-38 PB14 OTG_HS_DM
P1-39 PB15 OTG_HS_DP

176 ピンデバイスであれば、SPI2 の信号は PI0 〜 PI3 にもマップされているので同時使用が可能ですが、100 ピンデバイスでは無理な話となります。
I2C については、CS43L22 のコントロールのために I2C1_SDA, I2C1_SCL が使われていますが、初期設定のあとは、ポリュームの設定を変えたり、ミュートしたりしない限り I2C を介しての通信は行われません。
利用したいデバイスの I2C アドレスが CS43L22 のアドレス (0x4A) と重ならず、通信タイミングに関しても双方が邪魔にならなければ、I2C1_SDA, I2C1_SCL に目的のデバイスを接続することができます。
I2C1 とは別の I2C バスが必要な場合には、I2C2、I2C3 が利用できます。

ヘッダ ポート 信号名
P1-34 PB10 I2C2_SCL
P1-35 PB11 I2C2_SDA
P2-43 PA8 I2C3_SCL
P2-46 PC9 I2C3_SDA

ただし、PB10 はマイク (MP45DT02) のクロック入力につながっていますから、I2C2 を利用する場合には、マイクは正常に機能しないことになります。