Skocz do zawartości

[C] [STM32] Buzzer na PWM - problem z wyłączeniem


fisherek15

Pomocna odpowiedź

Skonfigurowałem PWM, podpiąłem do pinu PB5 przewód sterujący buzzerem (pozostałe dwa kable od buzzera do Vcc i GND) i dobrze działa na PWM. Ale jak wyłączyć buzzer? Dążę do tego, że przerwanie zewnętrzne wywołuje np. funkcje OnBuzzer() a w jej ciele instrukcje uruchamiające buzzer, zaś inne przerwanie z funkcją np. OffBuzzer() wyłącza go. Jakimi poleceniami sterować buzzerem ?

Poniżej kod tego co napisałem.

void InitializeTimer(int period)
{
   RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);

   TIM_TimeBaseInitTypeDef timerInitStructure;
   timerInitStructure.TIM_Prescaler = 5000; 
   timerInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
   timerInitStructure.TIM_Period = period;
   timerInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
   timerInitStructure.TIM_RepetitionCounter = 0;
   TIM_TimeBaseInit(TIM3, &timerInitStructure);
   TIM_Cmd(TIM3, ENABLE);
}

void InitializePWMChannel2(int pulse2)
{
   TIM_OCInitTypeDef outputChannelInit;
   outputChannelInit.TIM_OCMode = TIM_OCMode_PWM1;
   outputChannelInit.TIM_Pulse = pulse2;
   outputChannelInit.TIM_OutputState = TIM_OutputState_Enable;
   outputChannelInit.TIM_OCPolarity = TIM_OCPolarity_High;

   TIM_OC2Init(TIM3, &outputChannelInit);
   TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);

   GPIO_PinAFConfig(GPIOB, GPIO_PinSource5, GPIO_AF_1);
}

void InitializeBuzzer()
{
   GPIO_InitTypeDef gpioStructure;

   RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);

   gpioStructure.GPIO_Pin = GPIO_Pin_5;
   gpioStructure.GPIO_Mode = GPIO_Mode_AF;
   gpioStructure.GPIO_OType = GPIO_OType_PP;
   gpioStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; 
   gpioStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_Init(GPIOB, &gpioStructure);
}


int main()
{
   InitializeBuzzer();

   InitializeTimer(10000);
   int pulse2=7000;
   InitializePWMChannel2(pulse2);

   for(;;){
   }

}

//EDIT

Logicznie do tego podchodząc ustawiłem wartość TIM_Pulse większą od TIM_Period i wtedy buzzer siedzi cicho bo sygnał wypełniam w całości zerami, dobrze to zrozumiałem?

Czy sterowanie za pomocą ustalania wartości TIM_Pulse jest poprawnym rozwiązaniem?

Z góry dzięki 🙂

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.