stm32实现无源蜂鸣器发声

   蜂鸣器是一种发声设备,被普遍用于计算机、打印机、复印机、报警器、电子玩具等。蜂鸣器分为有源蜂鸣器和无源蜂鸣器。那么什么是有源,什么是无源呢?这里的“源”指的是,振荡电路。也就是说,所谓的有源蜂鸣器是指蜂鸣器内部内置振荡电路,一通电就能响。而无源蜂鸣器,须要外部提供2~5khz左右的方波。
ide

   这里,咱们就来经过stm32f103ZET6来实现无源蜂鸣器的发声。首先来分析一下,stm32能经过IO口直接控制蜂鸣器吗?答案是否认的。由于,IO口最大只能提供25mA电流,而蜂鸣器须要30mA电流才能响。那么应该怎么作呢?经过蜂鸣器接一个三极管,利用三极管的较小电流控制较大电流的特性来实现。
函数

wKioL1nR0t_xaqGfAAAaQ9V7Sss848.jpg-wh_50

经过观察开发板的原理图能够发现,蜂鸣器就是经过PB口的PB5来实现控制,每隔一段时间产生一个高低电平产生一个2~5Khz左右的方波来驱动蜂鸣器。
spa

wKiom1nR0_nhOhUIAAC9pA85Pbc385.png-wh_50

   跟以前驱动LED同样,咱们如今想要驱动蜂鸣器,首先也要对蜂鸣器进行初始化,也就是端口的初始化。代码以下:
blog

void BEEP_Init ( void ){
	
	GPIO_InitTypeDef GPIO_InitStructure;   //申明一个结构体变量,用来初始化IO
	
	SystemInit ();
	
	RCC_APB2PeriphClockCmd ( RCC_APB2Periph_GPIOB, ENABLE );  //开启GPIO时钟
	
	//配置GPIOB和IO端口
	GPIO_InitStructure.GPIO_Pin = BZ;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init ( GPIOB, &GPIO_InitStructure ); //初始化GPIO
	
}

接着,咱们要实现蜂鸣器发声。也就是,每隔一段时间产生一个方波。代码以下:
ip

void sound1 ( void )
{
	unsigned int i = 5000;
	while ( i-- ){
		
		GPIO_SetBits ( GPIOB, BZ );
		delay ( i );
		GPIO_ResetBits ( GPIOB, BZ );
		delay ( i-- );
	}
	
}

void sound2 ( void ){
	
	unsigned int i = 1000;
	while ( i-- ){
		
		GPIO_SetBits ( GPIOB, BZ );
		delay ( i );
		GPIO_ResetBits ( GPIOB, BZ );
		delay ( i-- );
	}
	
}

   最后,在主函数内部,咱们调用初始化函数,对端口进行初始化,而后,调用发声函数,控制蜂鸣器发声。代码以下:
开发

int main()
{
	BEEP_Init();
	
	while ( 1 ){
		
		//sound1 ();
		
		sound2 ();
	}
	
	
//	return 0;
}
相关文章
相关标签/搜索