七台河市网站建设_网站建设公司_关键词排名_seo优化
2025/12/18 20:13:45 网站建设 项目流程

一、实验目的及要求

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外设控制流程、理解简单输出设备驱动方式的目的。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询