STM32での圧電スピーカーの使い方
前回はArduinoで圧電スピーカーを使ってみたので、今度はSTM32で使っていきたい。
MX_TIM2_Initの関数にある下の二行をコメントアウトしておく。
TIM_MasterConfigTypeDef sMasterConfig = {0};
TIM_OC_InitTypeDef sConfigOC = {0};
あとは、メイン関数の中に作成したモドキ物のtone()関数を書き込めば一応動いた。
HAL_Delayの部分を今後別の方法で時間をカウントするものに改造しておきたい。
実際に音を鳴らしてみた感じがこちら。
おそらく「ラ」の音が鳴ってるはずである。
絶対音感がないので「ラ」の音である保証はしない。
CubeMXでピンの設定を行う
圧電スピーカーを使うので「A0」のアナログピンを使うことにした。
設定は「PA0」を「TIM2_CH1」に設定する。
TimersからTIM2の設定を変更する。
ModeのChannel1を「PWM Generation CH1」に設定する。
ConfigrationのParameter SettingsのPrescalerを「84」に設定する。
設定が終わったら、保存を行いコードを更新する。
設定は「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の部分を今後別の方法で時間をカウントするものに改造しておきたい。
実際に音を鳴らしてみた感じがこちら。
おそらく「ラ」の音が鳴ってるはずである。
絶対音感がないので「ラ」の音である保証はしない。
コメント
コメントを投稿