fisherek15 Napisano Listopad 27, 2015 Udostępnij Napisano Listopad 27, 2015 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 🙂 Cytuj Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
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!