STM32での圧電スピーカーの使い方

前回はArduinoで圧電スピーカーを使ってみたので、今度はSTM32で使っていきたい。

CubeMXでピンの設定を行う

圧電スピーカーを使うので「A0」のアナログピンを使うことにした。


設定は「PA0」を「TIM2_CH1」に設定する。

TimersからTIM2の設定を変更する。
ModeのChannel1を「PWM Generation CH1」に設定する。
ConfigrationのParameter SettingsのPrescalerを「84」に設定する。


設定が終わったら、保存を行いコードを更新する。

main.cでプログラムを書いていく

Arduinoのtone()関数をSTM32ようにモドキ物を作成してみた。

TIM_MasterConfigTypeDef sMasterConfig = {0};
TIM_OC_InitTypeDef sConfigOC = {0};
int period;
void periodSet(int p){
 htim2.Init.Period = p;
 sConfigOC.Pulse = p/2;
 HAL_TIM_Base_Init(&htim2);
 HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1);
}

void tone(int freq,int ms){
 long peri;
 peri=1000000L/(long)freq;
 period = (uint16_t)peri;
 //htim2.Init.Period = Hz;
 //HAL_TIM_Base_Init(&htim3);
 periodSet(period);
 HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);
 HAL_Delay(ms);
}

void noTone(int ms){
 HAL_TIM_PWM_Stop(&htim2,TIM_CHANNEL_1);
 HAL_Delay(ms);
}

MX_TIM2_Initの関数にある下の二行をコメントアウトしておく。
TIM_MasterConfigTypeDef sMasterConfig = {0};
TIM_OC_InitTypeDef sConfigOC = {0};

あとは、メイン関数の中に作成したモドキ物のtone()関数を書き込めば一応動いた。
tone(440,1000);
noTone(1000);

HAL_Delayの部分を今後別の方法で時間をカウントするものに改造しておきたい。

実際に音を鳴らしてみた感じがこちら。
おそらく「ラ」の音が鳴ってるはずである。
絶対音感がないので「ラ」の音である保証はしない。



コメント

このブログの人気の投稿

STM32CubeIDEに日本語化プラグインを導入する

STM32F401でLチカをする(LED点灯)

STM32F401-Nucleoでシリアル通信をやってみる