当前位置: 首页 > news >正文

stm32蜂鸣器实验

一、实验目的及要求

1、掌握GPIO及其输出的识别方法。

2、熟悉蜂鸣器STM32微控制器的接口方法。

3、了解蜂鸣器的工作原理及硬件电路。

二、实验内容及原理

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

STM32F103 战舰开发板板载的蜂鸣器是电磁式的有源蜂鸣器,如图3.1 所示:

图3.1 有源蜂鸣器

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

上一实验,我们利用 STM32 的 I/O 口直接驱动 LED 灯,本节的蜂鸣器,我们能否直接用 STM32 的I/O 口驱动呢?让我们来分析一下:STM32F1 的单个I/O最大可以提供 25mA 电流(来自数据 手册),而蜂鸣器的驱动电流是30mA左右,两者十分相近,但是全盘考虑,STM32F1 整个芯 片的电流,最大也就 150mA,如果用I/O口直接驱动蜂鸣器,其他地方用电就得省着点了,所 以我们不用 STM32F1的I/O直接驱动蜂鸣器, 而是通过三极管扩流后再驱动蜂鸣器,这样 STM32F1的I/O只需要提供不到 1mA 的电流就足够了。

I/O 口使用虽然简单,但是和外部电路的匹配设计,还是要十分讲究的,考虑越多,设计就 越可靠,可能出现的问题也就越少。

三、实验条件及设备要求

硬件环境:计算机一台;正点原子战舰STM32F103开发板

四、实验步骤

1.硬件设计

(1)例程功能

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

(2)硬件资源

1)LED 灯:LED - PB5

2)蜂鸣器:BEEP - PB8

(3)原理图

蜂鸣器在硬件上是直接连接好了的,不需要经过任何设置,直接编写代码就可以了。蜂鸣 器的驱动信号连接在 STM32F1 的 PB8 上。如图 3.2 所示:

图 3.2 蜂鸣器与 STM32F1 连接原理图

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

2.软件设计

本实验用到 GPIO 外设输出功能,关于 HAL 库的 GPIO 的 API 函数请看跑马灯实验的介绍。下面是本实验的程序流程图。

图 3.3 蜂鸣器实验程序流程图

2.1 程序设计

(1)工程文件创建步骤

打开STM32CubeMX

(2)main.c 文件代码:

#include "stm32f10x.h"

#include "led.h"

#include "delay.h"

#include "beep.h"

int main(void)

{

delay_init();

LED_Init();

Beep_Init();

while(1)

{

//库函数

GPIO_ResetBits(GPIOB, GPIO_Pin_5);//LED1点亮,蜂鸣器不响

GPIO_SetBits(GPIOE, GPIO_Pin_5);

GPIO_ResetBits(GPIOB, GPIO_Pin_8);

delay_ms(300);

GPIO_SetBits(GPIOB, GPIO_Pin_5);//LED2点亮,蜂鸣器响

GPIO_ResetBits(GPIOE, GPIO_Pin_5);

GPIO_SetBits(GPIOB, GPIO_Pin_8);

delay_ms(300);

//位操作

// PBout(5)=0;

// PEout(5)=1;

// PBout(8)=0;

// delay_ms(300);

// PBout(5)=1;

// PEout(5)=0;

// PBout(8)=1;

// delay_ms(300);

}

}

(3)gpio.c文件代码:

#include "beep.h"

#include "stm32f10x.h"

void Beep_Init(void)

{

GPIO_InitTypeDef GPIO_Initstr;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE);//时钟使能

GPIO_Initstr.GPIO_Mode=GPIO_Mode_Out_PP;

GPIO_Initstr.GPIO_Pin=GPIO_Pin_8;

GPIO_Initstr.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_Init(GPIOB, &GPIO_Initstr);

GPIO_ResetBits(GPIOB, GPIO_Pin_8);//初始化蜂鸣器关闭

}

3.下载验证

五、实验总结

本次STM32蜂鸣器实验完成了基于STM32单片机控制蜂鸣器发声的核心功能验证,通过配置GPIO口为输出模式,利用高低电平切换或PWM信号实现了蜂鸣器的通断及音调调节,掌握了STM32 GPIO口的基本配置方法和蜂鸣器的驱动原理,过程中验证了硬件电路连接的正确性和软件代码逻辑的可行性,同时发现需注意GPIO口电平匹配、延时函数精准度对蜂鸣器发声效果的影响,实验达到了熟悉STM32外设控制流程、理解简单输出设备驱动方式的目的。

http://www.cnnetsun.cn/news/137284.html

相关文章:

  • 计算机小程序毕设实战-基于springboot+微信小程序的羽球快讯爱好者平台小程序羽毛球场预定app_羽毛球预约管家【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 11、文本与盒子属性的CSS技巧解析
  • 23、WinJS控件样式与样式规则定位指南
  • 27、Windows 8 应用开发中的 SVG 样式设计
  • SAP ABAP拆分交货单数量、批次、存储地点 并过账
  • 基于MPC的智能车运动预测和控制算法 Motion predication; Kinemati...
  • Mathcad的野路子】11kW PFC参数计算书实战拆解
  • STM32学习笔记CAN
  • 搭建你的第一个“私有知识库” (RAG)
  • 13、Unix 系统磁盘管理与安全定位脚本实用指南
  • 15、系统管理脚本实用指南
  • 怎么选一款适合大面积清洁的多功能全自动洗地机呢?
  • 使用matlab编写m脚本,编写无迹卡尔曼滤波算法(UKF)估计电池SOC,注释清晰
  • 教培行业新媒体运营困境凸显!这款软件或成转型制胜法宝?
  • Photoshop Neural Filters:把“引擎截图”秒变“电影级美宣”?AI 深度模糊与色彩迁移工作流
  • 基于matlab的多目标优化算法NSGA3,动态输出优化过程,得到最终的多目标优化结果。 数据...
  • 12.18
  • COCO 数据集
  • 国内好用的测试用例管理工具有哪些?
  • 24、COM+ 事务管理与补偿资源管理器详解
  • YOLO深度学习模型的训练参数配置与优化
  • 数字孪生可视化模板怎么用?5大行业Demo拆解,帮你快速复用提效
  • 必藏!程序员转型AI大模型:机遇、路径与成功率拆解
  • 《智构空间:AIOS 与全时域 3D 交互范式》第 0 篇:前言 —— 触摸语义的厚度
  • 如何将照片从 Android 传输到 Android
  • 前端Vue使用js-audio-plugin实现录音功能
  • 测试用例之翻页功能详解
  • 音乐平台歌曲盗版维权全攻略:权利卫士录屏取证+可信时间戳认证实操指南
  • 根据您提供的 package.json 片段,涉及的 @vue/cli-plugin-babel 和 @vue/cli-service 版本为 ~4.2.0。以下是针对该版本的详细解决方案,结合相关依
  • electron-egg打包win7