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 ビット、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 を利用する場合には、マイクは正常に機能しないことになります。