蜂鸣器:是一种一体化结构的电子讯响器。主要分为分压式蜂鸣器和电磁式蜂鸣器两种类型。
一、有源/无源蜂鸣器(不是指是否带电源,而是有没有自带震荡电路)
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 }