STM32控制蜂鳴器
阿新 • • 發佈:2019-01-27
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))))
使用庫函式比較方便