UP

beeperの使い方

stm8lにはbeeperというブザー音を出すための専用の機能がある。

圧電スピーカーのつなぎ方

beeper使用例

beeper用の外部端子はPA0だがこれはSWIMと兼用なのでセラミックスピーカーを 写真のように直でつないでしまうとプログラムの書き込みやデバッグができない。 スイッチを付けて切り離せるようにするか適当な抵抗を直列に入れる必要が ある(経験的には1kΩを入れればSWIMも使え音もそこそこ出た)。

プログラムの書き方

STM8L15x Standard Peripherals Libraryにはbeeperの使用例が 載っていない(?たぶん)。

beeperを使用するためには初期化としておおよそ
  CFG->GCR |= CFG_GCR_SWD; /*disable SWIM interface*/
  CLK_PeripheralClockConfig(CLK_Peripheral_BEEP, ENABLE);
  CLK_BEEPClockConfig(CLK_BEEPCLKSource_LSI);
  BEEP_Init(BEEP_Frequency_1KHz);
が必要のようである(他に音程を校正したりできる)。2行目以降はライブラリの ヘルプを見ればわかることだが、stm8lはリセット後はPA0がSWIMに割り当てられて いるので1行目も必要(stm8sの場合はオプションバイトで設定する)。 あとは
  BEEP_Cmd(ENABLE); 
  BEEP_Cmd(DISABLE); 
でON、OFFできる。

参考

RM0031
1.3.2 SWIM ディセーブル
デフォルトでは、MCU リセット後、SWIM ピンは、デバッグ用またはフラッシュ /EEPROM プログ
ラミング用の外部ツールとの通信ができるように設定されます。このピンをアプリケーションによっ
て汎用 I/O として使用できるように設定できます。このためには、CFG_GCR レジスタの SWD ビッ
トをセットします。

プログラム例

断続的にビープ音を出すプログラム。main.c:
void main(void)
{
  CFG->GCR |= CFG_GCR_SWD;/*disable SWIM interface*/
  CLK_PeripheralClockConfig(CLK_Peripheral_BEEP, ENABLE);
  CLK_BEEPClockConfig(CLK_BEEPCLKSource_LSI);
  BEEP_Init(BEEP_Frequency_1KHz);

  /* Infinite loop */
  while (1)
  {
    BEEP_Cmd(ENABLE); 
    delay_ms(100);
    BEEP_Cmd(DISABLE); 
    delay_ms(100);
  }
}
beepとclkのライブラリ(とstm8l15x.h)に依存。あとはdelay.h/c、 stm8l15x_conf.h。
プロジェクト一式(zipファイル)mbeep.zip


2012.03
mm@ils.uec.ac.jp