#include "buzzer.h" uint32_t Frequency = 0; uint32_t CLOCK = 10500000; int i; int pwm = MIN_BUZZER_PWM; int psc = 0; unsigned int notes[] = { G3,C4,D4s,D4,C4,D4s,C4,D4,C4,G3s,A3s,G3, G3,C4,D4s,D4,C4,D4s,C4,D4,C4,G3,F3s,F3, F3,G3s,B3,D4, F3,G3s,B3,C4, C4,D4s,A4s,G4s,G4,A4s,G4s,G4s,G4,G4,B3,C4, C5,C5,B4,A4s, A4s,D5,C5,G4s,G4, G4,A4s,G4,F4, F4,G4s,G4,F4,G4 }; unsigned int duration[] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 1, 1, 5, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 1, 1, 3, 1, 2, 1, 1, 4, 1, 1, 1, 3, 1, 2, 1, 1, 4 }; void buzzer_on(uint16_t note) { Frequency = CLOCK / note; // 计算定时器的重载值 htim4.Init.Prescaler = 0; // 预分频器设置为0 htim4.Init.Period = Frequency; // 设置定时器的重载值 // 设置PWM的占空比为50% __HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_3, Frequency / 2); // 启动PWM HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_3); } void noTone(void){ __HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_3, 0); HAL_Delay(30); } void playSong(void){ for (i = 0; i < sizeof(notes)/sizeof(notes[0]); i++) { Frequency = CLOCK / notes[i]; // 计算定时器的重载值 htim4.Instance->ARR = Frequency; // 设置定时器的重载值 __HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_3, Frequency / 2);// 设置PWM的占空比为50% HAL_Delay(400*duration[i]); noTone(); } } void set_buzzer_frequency(uint32_t freq){ __HAL_TIM_SetAutoreload(&htim4, freq); __HAL_TIM_SetCompare(&htim4, TIM_CHANNEL_3, freq/2); } uint32_t music[3][205]={{9, 10, 9, 6, 9, 0, 6, 10, 9, 10, 12, 10, 9, 10, 9, 6, 8, 0, 10, 9, 12, 10}, {5, 9, 8, 3, 0, 8, 9, 10, 9, 8, 9, 5, 9, 8, 3, 0, 8, 9, 10, 9, 8, 9, 5, 9, 8, 3, 0, 8, 9, 10, 9, 8, 9, 5, 9, 8, 3, 0, 8, 10, 12, 13, 12, 0, 8, 9, 9, 8, 9, 10, 0, 10, 12, 13, 14, 13, 12, 10, 9, 9, 8, 9, 9, 9, 8, 0, 8, 10, 12, 13, 12, 0, 8, 9, 9, 8, 10, 0, 9, 10, 12, 13, 15, 16, 17, 16, 15, 12, 13, 15, 17, 17, 17, 16, 0, 12, 13, 15, 17, 17, 17, 16, 0}}; uint32_t lst[3][205]={{ 1, 1, 1, 1, 4, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 2, 2, 1, 1, 2}, {2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 3, 1, 2, 2, 2, 2, 4, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5, 1, 1, 1, 6, 6, 3, 1, 2, 2, 2, 2, 4, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 4, 1, 1, 2, 2, 2, 2, 2, 8}}; uint32_t tones[]={21000000, 262, 294, 330, 349, 392, 440, 494, 523, 587, 659, 698, 784, 880, 988, 1046, 1174, 1318, 1396, 1568, 1760, 1976}; uint32_t lenth[]={22, 103}; uint32_t frequency = 21000000; uint32_t nw = 0, time_base = 125; uint32_t song = 1; void see_you_again(void) { set_buzzer_frequency(frequency/tones[music[song][nw]]); /* USER CODE BEGIN 3 */ HAL_Delay(time_base*lst[song][nw]-time_base*1/4); set_buzzer_frequency(frequency/tones[0]); HAL_Delay(time_base*1/64); nw = (nw + 1) % lenth[song]; }