STM32用蜂鸣器播放MIDI音乐(可以基于这个基础上开发简单电子琴/魔音盒),经典程序代码,程序代码注释简明,易懂,便于移植开发。
无源蜂呜器引脚定义
#define BUZZERPORT GPIOB—GPIOB口宏定义
#define BUZZER GPIO_Pin_5—具体PIN脚宏定义
void BUZZER_Init(void);—函数声明
void BUZZER_BEEP1(void);—函数声明
无源蜂呜器初始化定义
void BUZZER_Init(void){
GPIO_InitTypeDef GPIO_InitStructure;—声明函数结构体
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB,ENABLE);—打开GPIOA|GPIOB高速时钟
GPIO_InitStructure.GPIO_Pin = BUZZER;—定义蜂呜器引脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;—定义引脚输出类型
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;—定义引脚输出频率
GPIO_Init(BUZZERPORT,&GPIO_InitStructure);—将定义引脚功能写入函数结构体
}
一段音乐就是不同频率的声音按一定的时间节拍转换发出。所以音乐包含音调和节拍信息。
uc16 music1[78]={ //音乐1的数据表(奇数是音调,偶数是节拍长度)
330,750,
440,375,
494,375,
523,750,
587,375,
659,375,
587,750,
494,375,
392,375,
440,1500,
330,750,
440,375,
494,375,
523,750,
587,375,
659,375,
587,750,
494,375,
392,375,
784,1500,
659,750,
698,375,
784,375,
880,750,
784,375,
698,375,
659,750,
587,750,
659,750,
523,375,
494,375,
440,750,
440,375,
494,375,
523,750,
523,750,
494,750,
392,750,
440,3000
};
void MIDI_PLAY(void)—MIDI音乐控制程序
{
u16 a,b;
for(a=0;a<39;a++)—共39个音符
{
for(b=0;b<music1[a2]music1[a2+1]/1000;b++)—每个音符节拍时间长度
{
GPIO_WriteBit(BUZZERPORT,BUZZER,(BitAction)(0));
delay_us(500000/music1[a2]);—每0.5S音调(蜂鸣器打开频率次数)
GPIO_WriteBit(BUZZERPORT,BUZZER,(BitAction)(1));
delay_us(500000/music1[a*2]);—每0.5S音调(蜂鸣器关闭频率次数)
}
}
}
主程序调用无源蜂呜器发声程序
int main (void)
{
{
MIDI_PLAY();—无限循环播放MIDI音乐
}
}