蜂鸣器主要分为两种,一种是压电式的无源蜂鸣器,一种是电磁式的有源蜂鸣器。
有源和无源是指其内部有没有振荡器。
无源的没有内部振荡器,需要输入1.5-5KHZ的音频信号来驱动压电蜂鸣片发声。
有源的内部有振荡器,因此只需要供给直流电压就可以了。
我目前使用这款PZ6806L,是使用的无源蜂鸣器。因此STM32需要供给它1.5-5KHZ的音频信号,才能让它发声。
改变供给它的方波的的频率,可以调整蜂鸣器的音调。
改变供给它的方波的占空比,则可以控制蜂鸣器发出的声音大小。
蜂鸣器控制程序主要分为 2 大块:
(1)使能蜂鸣器端口时钟、初始化GPIO。
(2)主函数控制。
main.c
#include "system.h"
#include "led.h"
#include "SysTick.h"
#include "beep.h"
int main()
{
SysTick_Init(72);
LED_Init();
BEEP_Init();
while(1)
{
beep =1;
delay_us(10);
beep =0;
delay_us(190);//周期是200us,也就是5KHZ,占空比是10/200,
}
}
beep.c
#include "beep.h"
void BEEP_Init()
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(BEEP_PORT_RCC,ENABLE);
GPIO_InitStructure.GPIO_Pin=BEEP_PIN;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; //
GPIO_Init(BEEP_PORT,&GPIO_InitStructure);
}
beep.h
#ifndef _beep_H
#define _beep_H
#include "system.h"
#define BEEP_PORT_RCC RCC_APB2Periph_GPIOB
#define BEEP_PIN GPIO_Pin_5
#define BEEP_PORT GPIOB
void BEEP_Init(void);
#define beep PBout(5)
#endif
实验是成功的,蜂鸣器正常地以5KHZ的频率声音响了起来~
后面可以试着用蜂鸣器来发起相应的歌声~~