news 2026/6/10 2:29:56

stm32蜂鸣器实验

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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外设控制流程、理解简单输出设备驱动方式的目的。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/9 13:32:36

【课程设计/毕业设计】基于SpringBoot+微信小程序的微信电影院票务系统管理系统设计与实现基于springboot+微信小程序的影院售票系统设计与实现【附源码、数据库、万字文档】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/6/5 7:24:26

计算机毕业设计springboot加油站非油品业务管理系统 基于 SpringBoot 的加油站便利店及增值业务综合运营平台 SpringBoot 框架下的加油站非燃油商品与服务业态数字化管控系统

计算机毕业设计springboot加油站非油品业务管理系统72r5s4y9 (配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。当“双碳”浪潮重塑能源消费格局,加油站的利润天平早已从…

作者头像 李华
网站建设 2026/6/7 22:55:02

14、CSS变换、过渡与动画属性全解析

CSS变换、过渡与动画属性全解析 在网页设计中,为了实现更加丰富和动态的视觉效果,CSS提供了多种强大的功能,包括变换(Transforms)、过渡(Transitions)和动画属性。下面将详细介绍这些功能。 2D变换函数 2D变换函数可以对元素进行旋转、缩放、倾斜和平移等操作,为网页…

作者头像 李华
网站建设 2026/6/10 2:25:43

ES 的 4种分页方式,如何选择?

在 Elasticsearch 中,有 4种常见的分页方法,这篇文章,我们将分析每种方法的优缺点以及我们该如何选择。1. 使用 from 和 size使用 from 和 size是最常用的分页方式,通过设置 from 参数指定从结果集的哪个位置开始,size…

作者头像 李华
网站建设 2026/6/7 20:21:06

VT五轴仿真模型与DMU五轴VT机床仿真模型:一键导入,轻松仿真

VT五轴仿真模型,DMU五轴VT机床仿真模型,全部搭建设置好的,编程软件一键导入即可仿真。五轴加工仿真这玩意儿吧,说难不难说简单也不简单。我去年在车间调试五轴程序的时候,三天两头被老板骂撞刀。后来搞到一套现成的VT仿…

作者头像 李华