• STM32之蜂鸣器实验


    本章知识点
    STM32GPIO的应用
    蜂鸣器的原理(最好网上看看)

    蜂鸣器概述

    蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。
    蜂鸣器又可分为有源蜂鸣器和无源蜂鸣器。

    有源蜂鸣器

    原理

    压电式蜂鸣器压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。有的压电式蜂鸣器外壳上还装有发光二极管。
    多谐振荡器由晶体管或集成电路构成。当接通电源后(1.515V直流工作电压),多谐振荡器起振,输出100500Hz的音频信号,阻抗匹配器推动压电蜂鸣片发声。
    压电蜂鸣片由锆钛酸铅或铌镁酸铅压电陶瓷材料制成。在陶瓷片的两面镀上银电极,经极化和老化处理后,再与黄铜片或不锈钢片粘在一起。
    电磁式蜂鸣器电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。
    接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场。振动膜片在电磁线圈和磁铁的相互缠绕

    无源蜂鸣器

    无源蜂鸣器是没有振荡器,因此直接使用直流是不响的,必须外加电路进行驱动。

    硬件设计

    本实验采用的是有源蜂鸣器
    STM32 PB8引脚与蜂鸣器连接

    STM32与蜂鸣器连接图:

    图中用到了NPN三极管驱动蜂鸣器,当PB8为高电平时,蜂鸣器鸣响。

    代码设计

    分别建立.c文件和.h文件,

    建立完成后添加进工程中,添加步骤如下:



    然后把头文件加入进去,步骤如下:



    引脚配置

    
    //定义BEEP连接gpio引脚的宏
    /*******************************LED1***********************************/
    #define BEEP_GPIO_CLK       RCC_APB2Periph_GPIOB/* GPIO端口时钟 */
    #define BEEP_GPIO_PORT    	GPIOB			              /* GPIO端口 */
    #define BEEP_GPIO_PIN		GPIO_Pin_8			        /* 连接到SCL时钟线的GPIO */
    
    void BEEP_Config(void)
    {
        //BEEP
        //定义一个GPIO_InitTypedef类型的结构体
        GPIO_InitTypeDef GPIO_InitStructure;
        //开启LED用到的GPIO有关时钟(这步很重要,所有的外设在配置之前都要开启外设时钟)
        RCC_APB2PeriphClockCmd(BEEP_GPIO_CLK, ENABLE);
        //选择要控制的GPIO引脚端
        GPIO_InitStructure.GPIO_Pin = BEEP_GPIO_PIN;
        //设置引脚模式设置为推挽输出
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        //设置引脚速率
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        //初始化GPIO
        GPIO_Init(BEEP_GPIO_PORT, &GPIO_InitStructure);
        //关闭所有的BEEP
        GPIO_ResetBits(BEEP_GPIO_PORT, BEEP_GPIO_PIN);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    功能代码

    typedef enum
    {
    	BEEP_ON=0,
    	BEEP_OFF
    } BEEP_SW;
    
    void BEEP_Drive(uint8_t BEEP_SW)
    {
        switch (BEEP_SW)
        {
        case BEEP_ON:
            GPIO_SetBits(BEEP_GPIO_PORT,BEEP_GPIO_PIN);
            break;
        case BEEP_OFF:
            GPIO_ResetBits(BEEP_GPIO_PORT, BEEP_GPIO_PIN);
            break;
        default:
            break;
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    主函数

    int main(void)
    {
    	// 来到这里的时候,系统的时钟已经被配置成72M。
      LED_Config();
      BEEP_Config();
      while(1)
      {
    //    LED_Drive(LED1_ON);
    //		LED_Drive(LED2_ON);
        BEEP_Drive(BEEP_ON);
    	 
      }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    到这里就完成了,大家可以尝试加入延时,间断的使蜂鸣器响,同时配合LED等进行应用,比如当灯亮时,蜂鸣器响等

    头文件

    #ifndef __BSP_BEEP_H
    #define __BSP_BEEP_H
    
    #ifdef __cplusplus
    	extern "C"
    	{
    #endif
    /*******************************************************************************
    |    Other Header File Inclusion
    |******************************************************************************/
    #include "stm32f10x.h"//头文件
    
    /*******************************************************************************
    |    Compile Option or configuration Section (for test/debug)
    |******************************************************************************/
    
    /*******************************************************************************
    |    Macro Definition
    |******************************************************************************/
    //定义BEEP连接gpio引脚的宏
    /*******************************LED1***********************************/
    #define BEEP_GPIO_CLK       RCC_APB2Periph_GPIOB/* GPIO端口时钟 */
    #define BEEP_GPIO_PORT    	GPIOB			              /* GPIO端口 */
    #define BEEP_GPIO_PIN		GPIO_Pin_8			        /* 连接到SCL时钟线的GPIO */
    
    /*******************************************************************************
    |    Enum Definition
    |******************************************************************************/
    typedef enum
    {
    	BEEP_ON=0,
    	BEEP_OFF
    } BEEP_SW;
    
    /*******************************************************************************
    |    Typedef Definition
    |******************************************************************************/
    
    /*******************************************************************************
    |    Table Definition
    |******************************************************************************/
    
    /*******************************************************************************
    |    Global Function Prototypes
    |******************************************************************************/
    
    void BEEP_Config(void);
    void BEEP_Drive(uint8_t BEEP_SW);
    #ifdef __cplusplus
    }
    #endif
    #endif/*__BSP_BEEP_H*/
    /*******************************************************************************
      END FILE
    *******************************************************************************/
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56

    c文件

    /**
     ******************************************************************************
     * @file    bsp_beep.c
     * @author  千秋电子工作室
     * @version V1.0
     * @date    2022-07-21
     * @brief   蜂鸣器驱动
     * @注明   : 版权归属千秋电子工作室所有,严禁应用于商业行为。
     ******************************************************************************
     * @attention
     *
     * 实验平台:无
     * CSDN:https://blog.csdn.net/qq_38575895?spm=1000.2115.3001.5343
     ******************************************************************************
     */
    #include "bsp_beep.h"
    #include "include.h"
    
    void BEEP_Config(void)
    {
        //BEEP
        //定义一个GPIO_InitTypedef类型的结构体
        GPIO_InitTypeDef GPIO_InitStructure;
        //开启LED用到的GPIO有关时钟(这步很重要,所有的外设在配置之前都要开启外设时钟)
        RCC_APB2PeriphClockCmd(BEEP_GPIO_CLK, ENABLE);
        //选择要控制的GPIO引脚端
        GPIO_InitStructure.GPIO_Pin = BEEP_GPIO_PIN;
        //设置引脚模式设置为推挽输出
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        //设置引脚速率
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        //初始化GPIO
        GPIO_Init(BEEP_GPIO_PORT, &GPIO_InitStructure);
        //关闭所有的BEEP
        GPIO_ResetBits(BEEP_GPIO_PORT, BEEP_GPIO_PIN);
    }
    void BEEP_Drive(uint8_t BEEP_SW)
    {
        switch (BEEP_SW)
        {
        case BEEP_ON:
            GPIO_SetBits(BEEP_GPIO_PORT,BEEP_GPIO_PIN);
            break;
        case BEEP_OFF:
            GPIO_ResetBits(BEEP_GPIO_PORT, BEEP_GPIO_PIN);
            break;
        default:
            break;
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51

    自己加个延时,间隔响起,也可以使用PWM试试,和LED灯联合起来,还有前面讲到的按键以及矩阵按键,就矩阵按键来说,按下1按键灯亮,按下2按键蜂鸣器响,灯亮等。可以多尝试才有结果。

    喜欢就点个赞或者关注一下也可以哦。

  • 相关阅读:
    MySQL中的事务基础
    typescript:声明文件
    如果Controller里有私有的方法,能成功访问吗?
    剑指offer专项突击版第24天
    【Vue3】ref对象类型的响应式数据
    chisel入门初步2_2——-1/2次方生成器
    强制20天加班开发app后被集体解雇,象寻技术负责人公众号发文怒斥前领导
    Electron的使用
    office2019在保存的时候报错
    Wnt 信号通路
  • 原文地址:https://blog.csdn.net/qq_38575895/article/details/128028176