STM32之蜂鸣器实验

news2025/8/17 6:23:04

本章知识点
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按键蜂鸣器响,灯亮等。可以多尝试才有结果。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/33084.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CFD基本概念

1、流动控制方程 2、流体力学中的流动模型及流场解 N-S方程→(忽略粘性与热扩散)→Euler方程→(无旋)→全速位方程→(小扰动)→小扰动方程→(不可压)→labplace方程; 数…

【机器学习】python实现随机森林

目录 一、模型介绍 1. 集成学习 2. bagging 3. 随机森林算法 二、随机森林算法优缺点 三、代码实现 四、疑问 五、总结 本文使用mnist数据集,进行随机森林算法。 一、模型介绍 1. 集成学习 集成学习通过训练学习出多个估计器,当需要预测时通过…

[附源码]SSM计算机毕业设计流浪动物救助网站JAVA

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

【百度AI_人脸识别】图片对比相似度、人脸对比登录(调摄像头)

人脸对比 此文档功能: 两张人脸图片相似度对比:比对两张图片中人脸的相似度,并返回相似度分值。存档一张图片与调用的摄像中的人脸进行对比。项目、资源下载:https://download.csdn.net/download/m0_70083523/87150842?spm1001.2…

编译原理—语法制导翻译、S属性、L属性、自上而下、自下而上计算

编译原理—语法制导翻译、S属性、L属性、自上而下、自下而上计算1.语法制导翻译1.1属性文法1.2算术表达式的计数器1.3属性的分类1.4属性依赖图继承属性的计算1.5语义规则的计算方法1.6属性计算次序2. S属性定义2.1 语法树与分析树2.2 语法树与DAG2.2.1构造表达式的语法树(DAG)2…

Android中常见的那些内存泄漏——【问题分析+方案】

1.静态Activity(Activity上下文Context)和View 静态变量Activity和View会导致内存泄漏,在下面代码中对Activity的Context和TextView设置为静态对象,从而产生内存泄漏; public class MemoryTestActivity extends AppCompatActivity {private…

[附源码]SSM计算机毕业设计健身健康规划系统JAVA

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

noexcept说明符/运算符

一、noexcept说明符 1、语法 (1)noexcept 与 noexcept(true) 相同 (2)noexcept(表达式) 如果 表达式 求值为 true,那么声明函数不会抛出任何异常。 (3)throw() //c1…

Ubuntu配置FTP服务

参考目录1.安装FTP服务器软件2.配置FTP服务3.Ubuntud登录ftp服务器4.windows下通过cuteFTPlianjei1.安装FTP服务器软件 (1) FTP文件传送协议(File Transfer Protocol,简称FTP),是一个用于从一台主机到另一台主机传输文件的协议。 (2)Linux下有…

Jetpack 之 LiveData 实现事件总线

事件总线相信大家很多时候都会用到,那大家常用的也就是常青树 EventBus,以及 RxJava 流行起来的后起之秀 RxBus。它们的使用方式都差不多,思想也都是基于观察者模式,正好 LiveData 的核心思想也是观察者模式,因此我们完…

做Android 开发这么久,还不明白 Android Framework 知识重要性?

Framework作为Android的框架层,为App提供了很多API调用,但很多机制都是Framework包装好后直接给App用的,如果不懂这些机制的原理,就很难在这基础上进行优化。 从做Android的第一天起,你一定听过无数次关于Framework的…

计算机音乐-乐理知识(1)

一、节拍 节拍(Beat/Meter),是一个衡量节奏的单位,在音乐中,有一定强弱分别的一系列拍子在每隔一定时间重复出现。如 2 / 4 、 4 / 4 、 3 / 4 拍等。节拍,乐曲中表示固定单位时值和强弱规律的组织形式。 …

测试员工作三年后的工资对比,没达到这个数的都属于拖后腿了

“毕业三年的薪资是职场阶段的一个分水岭。” 不知什么时候开始,这句话深刻的引入了所有打工人的心中,程序员们自然也不例外。 事实上,这句话说的并不无道理,毕业的三年,不仅是学生到职场人身份上的一个转变&#xf…

初阶数据结构学习记录——아홉 二叉树和堆(2)

接着上一篇 之前写过一些关于堆的代码,向下调整,向上调整算法,以及常用的几个函数。这一篇继续完善堆,难度也会有所上升。先来看上一篇文末提到的创建堆算法。 首先要有空间,要有数据,之后再形成堆。我们…

9.5 利用可执行内存挑战DEP

目录 一、实验环境 二、实验思路 三、实验代码 四、实验步骤 1、寻找memcpy函数的地址 2、查看内存中可读可写可执行的内存 3、修复EBP 4、保证memcpy的源地址位于shellcode之前 一、实验环境 操作系统:windows 2000 软件:原版OD、VC6.0 二、实…

删除的数据如何恢复?误删了文件怎么恢复

文件的误删除,相信大部分人都经历过。不过因为很多人删除的文件都不算是很重要,所以有与没有并没有太大的区别。但是一旦你删除的文件正是你最近急需的,删除的数据如何恢复?别着急,可以试试以下的几种方法:…

STM32串口详解

实验一:简单的利用串口接收中断回调函数实现数据的返回 关于串口调试助手,还应知道: 发送英文字符需要用一个字符即8位,发送汉字需要两个字符即16位,如上图,发送汉字“姜”实际是发送“BD AA”而发送英文字…

外卖项目06---套餐管理业务开发(移动端的后台代码编辑开发)

菜品展示、购物车、下单 目录 一、导入用户地址簿相关功能代码 90 1.1需求分析 90 1.2数据模型 90 1.3导入功能代码 90 二、菜品展示 91 2.1需求分析 91 2.2商品展示---代码开发---梳理交互过程 92 2.3菜品展示---代码开发---修改DishController的list方法并测试 93 2…

OpenGL原理与实践——核心模式(二):Shader变量、Shader类的封装以及EBO

目录 Shader内的一些关键字 向量 举例:shader之间的数据传输,并实现渐变颜色 举例:C向shader传输数据的过程 代码整理——shader类的封装 加入颜色信息 索引绘制——EBO 整体代码以及渲染结果 Shader内的一些关键字 in:上…

网站被劫持勒索怎么办

互联网出现后的几十年时间里,世界便由一张张网串联了起来,给我们的生活带来了无限的便利。但在互联网飞速发展的同时,恶意网络攻击也随之而来,近年来,互联网攻击事件频发,不法分子利用常见的DDoS攻击、CC攻…