1. 程式人生 > >微控制器入門學習六 STM32微控制器學習三 蜂鳴器

微控制器入門學習六 STM32微控制器學習三 蜂鳴器

蜂鳴器的控制仍是GPIO的入門開發,本篇僅羅列下蜂鳴器的相關概念和蜂鳴器開發原始碼

1、蜂鳴器

蜂鳴器是一種一體化結構的電子訊響器,採用直流電壓供電,廣泛應用於計算機、印表機、影印機、報警器、電子玩具、汽車電子裝置、電話機、定時器等電子產品中作發聲器件。
蜂鳴器主要分為壓電式蜂鳴器和電磁式蜂鳴器兩種型別。
蜂鳴器在電路中用字母“H”或“HA”(舊標準用“FM”、“ZZG”、“LB”、“JD”等)表示。

本篇學習的板子上的蜂鳴器是電磁式的有源蜂鳴器,有源蜂鳴器是指自帶震盪電路而不是指自帶電源。(無源蜂鳴器沒有自帶震盪電路,必須外部提供2~5Khz左右的方波驅動才能發聲。)

所用板子的蜂鳴器的原理圖如下:
BEEP


從原理圖可以看出板子上的蜂鳴器接了一個三極體放大器,使用三極體的原因是stm32 IO的驅動電流不夠大驅動蜂鳴器發聲很吃勁,所以用一個放大器增大電流來驅動放大器。
看原理圖我們會發現在R36旁還接了一個R38電阻,該電阻的作用是分流保證stm32 IO空閒狀態下不會驅動蜂鳴器發聲,因為stm32 IO空閒狀態是浮空狀態的,其輸出的電壓值不確定,所以旁接R38電阻目的是風流掉浮空狀態下低電壓產生的小電流。

從stm32原理圖中,我們可以知道蜂鳴器接的IO口是PB8,如下圖:
stm32

2、程式

#include "beep.h"

//初始化PB8為輸出口.並使能這個口的時鐘          
//蜂鳴器初始化 void BEEP_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //使能GPIOB埠時鐘 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //BEEP-->PB.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,關閉蜂鳴器輸出 }
#include "std32f10x.h"  
#include "beep.h" 

int main(void)
{
    delay_init();            //延時函式初始化  
    BEEP_Init();            //初始化蜂鳴器埠
    while(1)
    {
        GPIO_ResetBits(GPIOB,GPIO_Pin_8);
        delay_ms(300);//延時300ms
        GPIO_SetBits(GPIOB,GPIO_Pin_8);   
        delay_ms(300);//延時300ms
    }
}