蜂鸣器主要分为两种,一种是压电式的无源蜂鸣器,一种是电磁式的有源蜂鸣器。
有源和无源是指其内部有没有振荡器。
无源的没有内部振荡器,需要输入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 GPIOBvoid BEEP_Init(void);#define beep PBout(5)#endif
实验是成功的,蜂鸣器正常地以5KHZ的频率声音响了起来~
后面可以试着用蜂鸣器来发起相应的歌声~~