STM32学习和实践笔记(12):蜂鸣器实验

发布于:2024-04-16 ⋅ 阅读:(22) ⋅ 点赞:(0)

蜂鸣器主要分为两种,一种是压电式的无源蜂鸣器,一种是电磁式的有源蜂鸣器。

有源和无源是指其内部有没有振荡器。

无源的没有内部振荡器,需要输入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的频率声音响了起来~

后面可以试着用蜂鸣器来发起相应的歌声~~