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;
}
相關文章
相關標籤/搜索