STM8S-Discovery プログラム 「STM8SDP」

STmicro 製 STM8S マイコン評価ボード「STM8S-Discovery」用のプログラム「STM8SDP」です。 SD/MMC カード内の無圧縮リニア PCM の wave ファイルを再生するプログラムです。

Raisonance 社製の C コンパイラを、ST Toolset の ST Visual Develop 環境で使用して作成しています。 ライセンス認証をしていない、1 KB / 4 KB 制限のあるコンパイラでコンパイル可能です。 Ride7 環境や、Cosmic 社製のコンパイラには未対応です。

SD/MMC カードのアクセスのため、ChaN さんの「ぷち FatFS」を利用しています。

アーカイブ・ファイルは ZIP で圧縮してあります。

解凍すると、「stm8sdp」フォルダが作られます。

HEX ファイルも含まれていますから、コンパイルせずに、ST Visual Programmer (STVP) を 使って、直接書き込むこともできます。

オーディオ出力は、ディジタル・オーディオ用 16 ビット・シリアル入力 DAC に対応しています。

「FMmelody」プログラムでは PWM DAC 出力として使っていた TIMER1 の CH4 出力 (PC4 / TIM1_CH4、コネクタ CN2-5 番ピン) を、ここでは SD/MMC カードの SPI クロックのために利用していますから、 ハードを共用する場合には影響がないようにしてください。

16 ビット・シリアル DAC は いわゆる「標準フォーマット」の

のデータ形式に対応しています。 実際に回路を組み、動作を確認しているのは BU9480 (ROHM) だけです。 BU9480 以外の DAC では、オーディオ出力がジッタを持つ可能性があります。

48 / 44.1 / 32 / 22.05 kHz サンプリングをサポートしています。

CPU クロックは 16 / 16.384 / 16.9344 / 18.432 MHz に対応しており、各クロック周波数に対する、 実際のサンプリング周波数の誤差は以下の表のようになります。

CPU クロック
(MHz)
サンプリング
周波数(kHz)
実際の fs
(kHz)
誤差
(%)
  16.0000    22.050    22.039    -0.05  
  32.000    32.000     0  
  44.100    44.199    +0.22  
  48.000    47.904    -0.20  
  16.3840    22.050    22.022    -0.13  
  32.000    32.000     0  
  44.100    44.043    -0.13  
  48.000    47.906    -0.19  
  16.9344    22.050    22.050     0  
  32.000    31.952    -0.15  
  44.100    44.100     0  
  48.000    48.109    +0.23  
  18.4320    22.050    22.048    -0.01  
  32.000    32.000     0  
  44.100    44.096    -0.01  
  48.000    48.000     0  
もちろん、CPU クロック周波数の変更には、基板に実装されている 16 MHz の水晶発振子を取り外して、目的の周波数の物と交換する必要があります。

もし換装するなら、約 15 % のオーバークロックになりますが、どのサンプリング周波数でも誤差の小さい 18.432 MHz をおすすめします。

16 ビット DAC とのインターフェースのために、Timer2 と SPI モジュールを使用しています。

SD/MMC カードとのインターフェースは Timer1 モジュールを利用したソフトウェア SPI で実現しています。

プログラム・サイズの制限のため、非常に基本的な機能しか実現できていません。 機能としては次のようになります。

するだけのプログラムです。

PG1 (コネクタ CN2-12 番ピン) に接続されたスイッチの設定を読み込むのはプログラム開始時だけで、 演奏中にスイッチを操作しても何も起きません。

選択可能なファイル名やサンプリング周波数の変更にはソース・プログラムを書き換えて再コンパイルが必要です。

デフォルトでは、

 SW  サンプリング周波数  ファイル名 
 OFF 44.1 kHz 44100.WAV
 ON 32 kHz 32000.WAV

となっています。

最大サンプリング周波数は、使用する SD カードの性能によりますが、 手持ちの Kingston 製 2GB micro SD カードでは 50 kHz 程度まで再生できる実力があります。

FAT32 には対応していないので、4 GB 以上の SDHC カードは使用できません。

wave ファイルのパラメタは一切見ず、指定のサンプリング周波数/16 ビット/ステレオに決め打ちで、 ファイル・ヘッダ部分もスキップせず、オーディオ・データとして再生してしまうために、 最初の部分でクリック・ノイズが発生します。

プログラムのロジックとしては、エラーのリトライや、活線挿抜には対応しておらず、 正常終了の場合でも、エラーの場合でも、単に main() 関数の実行を終了するだけになっています。

しかし、C のランタイムの機能として、main() 関数を終了後、 ループして再び main() 関数の実行に入るので、期せずして 繰り返し演奏および活線挿抜の機能が実現されることになります。

エラーがあっても正しく抜けずに、どこかで引っかかってしまうと、ハングアップ状態になります。 また、カードを抜いたあと、ノイズが再生され続ける可能性もあります。

改定内容

 2010/03/05 版

 2010/03/04 版

 2010/03/02 版

 2008/02/28 版