实现功能 但似乎可以不用中断实现

Signed-off-by: kevin <kevin@lmve.net>
This commit is contained in:
2022-05-02 19:14:55 +08:00
parent 8a3d91d0c2
commit e15506fa7e
21 changed files with 3176 additions and 2258 deletions
+62 -3
View File
@@ -1,11 +1,70 @@
#include "buzzer.h"
struct notes *notes;
notes_buff buzzer_play_buff;
void play_ones(uint16_t freq,uint8_t dutya)
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));
}
TIM2->ARR = (uint32_t)((72000000/freq)-1);TIM2->CCR3 = (uint32_t)(((72000000/freq)-1)*((float)dutya/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;
}
}
}