Files
2022-05-02 19:14:55 +08:00

72 lines
1.3 KiB
C

#include "buzzer.h"
notes_buff buzzer_play_buff;
void BUZZER_PLAY(uint16_t freq,float duty)
{
TIM2->ARR = (uint32_t)((72000000/freq)-1);
TIM2->CCR3 = (uint32_t)(((72000000/freq)-1)*((float)duty/100));
}
void BUZZER_PLAY_INIT()
{
buzzer_play_buff.head=NULL;
buzzer_play_buff.end=NULL;
buzzer_play_buff.play_busy=0;
BUZZER_PLAY(0,0);
}
void BUZZER_PLAY_NOTES(uint16_t freq,uint16_t delay,uint8_t duty)
{
note *buff,*buff2;
buff =(note*)malloc(sizeof(note));
if(buff!=NULL)
{
buff->delay=delay;
buff->duty=duty;
buff->freq=freq;
buff->next=NULL;
}else{return ;}
if(buzzer_play_buff.head==NULL)
{
buzzer_play_buff.head=buff;
buzzer_play_buff.end=buff;
}else
{
buff2=buzzer_play_buff.end;
buff2->next=buff;
buzzer_play_buff.end=buff;
}
}
void BUZZER_PLAY_SERVER()
{
note *buff;
char data;
if(buzzer_play_buff.play_busy)
{
if(HAL_GetTick()>buzzer_play_buff.play_time)
{
buzzer_play_buff.play_busy=0;
BUZZER_PLAY(0,0);
}
}else
{
if(buzzer_play_buff.head!=NULL)
{
buzzer_play_buff.play_busy=1;
buzzer_play_buff.play_time=HAL_GetTick()+buzzer_play_buff.head->delay;
buff=buzzer_play_buff.head->next;
BUZZER_PLAY(buzzer_play_buff.head->freq,buzzer_play_buff.head->duty);
free(buzzer_play_buff.head);
buzzer_play_buff.head=buff;
}
}
}