1. 程式人生 > >STM32控制蜂鳴器

STM32控制蜂鳴器

main.c具體的程式碼如下

/*----------------------------------------------------------------------------------
功能描述:普通延時控制LED2閃爍,間隔250ms,定時器控制蜂鳴器和LED3
硬體平臺:STM32F103 開發板
作者	:求是07
韌體庫  :V3.5
-----------------------------------------------------------------------------------*/
/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"
#include "led.h"
#include "delay.h"
#include "key.h"
#include "timer.h"
#include "beep.h"

uint8_t BeepFlag=1;

int main(void)
{
	
	LED_Init();//LED初始化
  <span style="white-space:pre">	</span>KEY_Init();//按鍵初始化
  <span style="white-space:pre">	</span>SysTick_Init();//延時初始化
	BEEP_Init();   //蜂鳴器初始化
	TIM2_Base_Init(1000);//10Khz的計數頻率,計數到1000為100ms  
  <span style="white-space:pre">	</span>while(1)
	{
		Delay_ms(250);		  
		LED2_REV;		
	}
}

void TIM2_IRQHandler(void)   //TIM2中斷
{ 
	static uint8_t i;
	if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) //檢查指定的TIM中斷髮生與否:TIM 中斷源 
	{
		TIM_ClearITPendingBit(TIM2, TIM_IT_Update  );  //清除TIMx的中斷待處理位:TIM 中斷源 
		if(BeepFlag)	
		   BEEP_REV; //取反蜂鳴器
		else
			 BEEP_OFF;
		i++;
		if(i==20)
		{
			BeepFlag=!BeepFlag;
			LED3_REV;
			i=0;
		}
	}
}

蜂鳴器的原理圖如下

beep.c的原始碼如下:
<pre name="code" class="cpp">/*-------------------------------------------------------------------------------
檔名稱:beep.c
檔案描述:根據硬體連線配置蜂鳴器埠,開啟對應的暫存器        
備    注:無
---------------------------------------------------------------------------------*/
#include "beep.h"
/*-------------------------------------------------------------------------------
程式名稱:BEEP_Init
程式描述:初始化BEEP相關埠,開啟埠時鐘,配置埠輸出  
輸入引數:無
返回引數:無
備    注:無
---------------------------------------------------------------------------------*/
void BEEP_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
  //開啟PB口時鐘
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
	//PB8引腳設定
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
	//埠速度
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	//埠模式,此為輸出推輓模式
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	//初始化對應的埠
  GPIO_Init(GPIOB, &GPIO_InitStructure);

}
其中的一些巨集定義:
#define BEEP_ON GPIO_SetBits(GPIOB,GPIO_Pin_8)
#define BEEP_OFF GPIO_ResetBits(GPIOB,GPIO_Pin_8)
#define BEEP_REV GPIO_WriteBit(GPIOB, GPIO_Pin_8,(BitAction)(1-(GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_8))))


使用庫函式比較方便