蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、 复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件

        蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型,STM32F103智能火龙STM32开发板板载的蜂鸣器是电磁式的有源蜂鸣器

        这里的有源不是指电源的“源”,而是指有没有自带震荡电路,有源蜂鸣器自带了震荡电路,一通电就会发声;无源蜂鸣器则没有自带震荡电路,必须外部提供2~5Khz左右的方波驱动,才能发声

        压电式蜂鸣器和电磁式蜂鸣器的区别:想要压电式蜂鸣器发声,需提供一定频率的脉冲信号;想要电磁式蜂鸣器发声,只需提供电源即可 

        STM32F1的单个IO最大可以提供25mA 电流(来自数据手册),而蜂鸣器的驱动电流是30mA左右,两者十分相近,但是全盘考虑,STM32F1整个芯 片的电流,最大也就150mA,如果用IO口直接驱动蜂鸣器,其他地方用电就得省着点了,所以我们不用STM32F1的IO直接驱动蜂鸣器,而是通过三极管扩流后再驱动蜂鸣器,这样STM32F1的IO只需要提供不到1mA的电流就足够了

用一个NPN三极管(S8050)来驱动蜂鸣器,驱动信号通过R36和R38间的电压 获得,芯片上电时默认电平为低电平,故上电时蜂鸣器不会直接响起。当PB8输出高电平的时候, 蜂鸣器将发声,当PB8输出低电平的时候,蜂鸣器停止发声

NPN三极管的作用:扩大电流、开关。NPN三极管如下图所示:

代码 

蜂鸣器每隔300ms响或者停一次,LED0每隔300ms亮或者灭一次,LED0亮的时候蜂鸣器不叫,而LED0熄灭的时候,蜂鸣器叫

led.h

#ifndef _LED_H
#define _LED_H
//led初始化
void led_init(void);
#endif

led.c

#include "./BSP/LED/led.h"
#include "./SYSTEM/sys/sys.h"
//led初始化
void led_init(void){
    GPIO_InitTypeDef g_gppio_struct;
    __HAL_RCC_GPIOB_CLK_ENABLE();  //使能时钟--PB5
    
    g_gppio_struct.Pin=GPIO_PIN_5;
    g_gppio_struct.Mode=GPIO_MODE_OUTPUT_PP;  //推挽输出
    g_gppio_struct.Pull=GPIO_NOPULL;  //无上下拉
    g_gppio_struct.Speed=GPIO_SPEED_FREQ_HIGH;  //高速
    HAL_GPIO_Init(GPIOB,&g_gppio_struct);  //初始化LED0
}

beep.h

#ifndef _BEEP_H
#define _BEEP_H
#include "./SYSTEM/sys/sys.h"
//beep初始化
void beep_init(void);
void set_beep(uint8_t flag);
#endif

beep.c

#include "./BSP/BEEP/beep.h"
//beep初始化
void beep_init(void){
    GPIO_InitTypeDef g_gppio_struct;
    __HAL_RCC_GPIOB_CLK_ENABLE();  //使能beepIO口时钟
    
    g_gppio_struct.Pin=GPIO_PIN_8;  //引脚号
    g_gppio_struct.Mode=GPIO_MODE_OUTPUT_PP;  //推挽输出
    g_gppio_struct.Pull=GPIO_NOPULL;  //没有上下拉
    g_gppio_struct.Speed=GPIO_SPEED_FREQ_HIGH;  //高速
    HAL_GPIO_Init(GPIOB,&g_gppio_struct);
}
void set_beep(uint8_t flag){
   if(flag){
       HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_SET);        //发声
   }else{
       HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_RESET);        //停止发声
   }
}

main.c

#include "./SYSTEM/sys/sys.h"
#include "./SYSTEM/delay/delay.h"
#include "./BSP/LED/led.h"
#include "./BSP/BEEP/beep.h"

int main(void){
    HAL_Init();
    sys_stm32_clock_init(RCC_PLL_MUL9);
    delay_init(72);
    led_init();
    beep_init();
    while(1){
        set_beep(1);        //发声
        HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_SET);  //熄灭
        HAL_Delay(2000);
        set_beep(0);        //停止发声
        HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_RESET);  //点亮
        HAL_Delay(2000);
    }
}

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐