蜂鸣器实验

蜂鸣器介绍

这里采用的是有源蜂鸣器,有源蜂鸣器自带了振荡电路,一通电就会发声;无源蜂鸣器则没有自带震荡电路,必须外部提供 2~5Khz 左右的方波驱动,才能发声。

STM32的单个 IO 最大可以提供 25mA 电流(来自数据手册),而蜂鸣器的驱动电流是 30mA 左右,两者十分相近。但是全盘考虑, STM32 整个芯片的电流,最大也就150mA ,如果用 IO 口直接驱动蜂鸣器,其他地方用电就得省着点了。所以,我们不用 STM32 的 IO 直接驱动蜂鸣器,而是通过三极管扩流后再驱动蜂鸣器,这样 STM32 的 IO 只需要提供不到 1mA 的电流就足够了。

蜂鸣器在硬件上是直接连好的,不需要经过任何设置。 蜂鸣器的驱动信号连接在STM32的 PB8 上。因此,这里只需要控制蜂鸣器对应的IO口进行供电即可。当 PB.8 输出高电平的时候,蜂鸣器将发声,当 PB.8 输出低电平的时候,蜂鸣器停止发声。

main.c

#include"beef.h"

int main(void)
{
	BEEF_Init();
	int i;
	while(1)
	{
		for(i=0;i<1000;i++);
		GPIO_SetBits(GPIOB,GPIO_Pin_8);
		for(i=0;i<1000;i++);
		GPIO_ResetBits(GPIOB,GPIO_Pin_8);
		
	}
}

beep.h

#ifndef __BEEF_H
#define __BEEF_H

#include "stm32f10x.h"

void BEEF_Init(void);

#endif

beep.c

#include"beef.h"

void BEEF_Init()
{
	GPIO_InitTypeDef GPIO_InitStructure;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//使能 GPIOB 端口时钟
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //BEEP GPIOB .8 端口配置
	
    GPIO_InitStructure. GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //速度为 50MHz
    GPIO_Init(GPIOB, &GPIO_InitStructure); //根据参数初始化 GPIOB.8
    GPIO_ResetBits(GPIOB,GPIO_Pin_8); //输出 0 ,关闭蜂鸣器输出
	
}
	

你可能感兴趣的:(STM32,单片机,stm32,嵌入式硬件)