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);
}

功能代码

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;
    }
}

主函数

int main(void)
{
	// 来到这里的时候,系统的时钟已经被配置成72M。
  LED_Config();
  BEEP_Config();
  while(1)
  {
//    LED_Drive(LED1_ON);
//		LED_Drive(LED2_ON);
    BEEP_Drive(BEEP_ON);
	 
  }

}

到这里就完成了,大家可以尝试加入延时,间断的使蜂鸣器响,同时配合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
*******************************************************************************/

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;
    }
}

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

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

  • 1
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南山府嵌入式

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值