蜂鸣器:是一种一体化结构的电子讯响器。主要分为分压式蜂鸣器电磁式蜂鸣器两种类型。

一、有源/无源蜂鸣器(不是指是否带电源,而是有没有自带震荡电路

  1、有源蜂鸣器:有源蜂鸣器自带震荡电路,一通电就会发声。

  2、无源蜂鸣器:没有自带震荡电路,需要外部提供2~5Khz左右的方波驱动,太能发声。

二、硬件设计

  因为STM32的单个IO口最大可以提供25mA电流,而蜂鸣器的驱动电流在30mA左右,两者十分相近,但是STM32整个芯片的电流,最大也就150mA左右,如果用IO口直接驱动蜂鸣器,其它功能使用时可能出现电流不足。所以我们通过三极管(S8050)括流后再驱动蜂鸣器,这样STM32的IO口只需要提供不到1mA的电流就足够了。

  R33主要用于防止蜂鸣器的误发声PB.8 输出高电平的时候,蜂鸣器将发声, 当 PB.8 输出低电平的时候,蜂鸣器停止发声

  

三、软件设计

 1 //子函数
 2 #include "beep.h"
 3 #include "stm32f10x.h"
 4
 5
 6 void BEEP_Init(void)
 7 {
 8     GPIO_InitTypeDef GPIO_BEEP;                //创建一个结构体
 9
10     GPIO_BEEP.GPIO_Mode = GPIO_Mode_Out_PP;    //设置该端口为推挽输出 
11     GPIO_BEEP.GPIO_Pin = GPIO_Pin_8;           //PB.8端口                     
12     GPIO_BEEP.GPIO_Speed = GPIO_Speed_50MHz;   //50MHz
13
14     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);    //初始化GPIOB时钟
15
16     GPIO_Init(GPIOB, &GPIO_BEEP);             //根据参数初始化GPIO.8 
17 }

主函数

 1 #include "sys.h"
 2 #include "delay.h"
 3 #include "beep.h"
 4
 5 int main(void)
 6 {
 7     BEEP_Init();      //蜂鸣器初始化   
 8     delay_init();     //延时函数初始化
 9     while(1)
10     {
11         GPIO_ResetBits(GPIOB, GPIO_Pin_8);      //关闭蜂鸣器
12         delay_ms(1500);                            //延时1.5秒
13
14         GPIO_SetBits(GPIOB, GPIO_Pin_8);        //打开蜂鸣器
15         delay_ms(100);                            //延时0.1秒
16     }
17 }
02-13 10:30