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

相关推荐
点灯小铭2 小时前
基于单片机的点阵显示屏交通灯控制系统设计
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
星期天22 小时前
STM32定时器定时中断
stm32·单片机·嵌入式硬件
Devlab3 小时前
anyui - Master designer for LVGL [New release v0.40.0]
嵌入式硬件·物联网·低代码·ui·iot
v先v关v住v获v取3 小时前
微型面包车汽车制动器设计cad7张+三维图+设计说明书
科技·单片机·51单片机
d111111111d3 小时前
STM32编码电机闭环PID调节教程。
笔记·stm32·单片机·嵌入式硬件·学习·面试
云空3 小时前
《基于RK3588+ToF的环境颜色区域位置识别方案研究》
人工智能·嵌入式硬件·机器人
The️3 小时前
STM32-FreeRTOS操作系统-事件
arm开发·stm32·单片机·嵌入式硬件·mcu·物联网
GUET_一路向前3 小时前
STM32_I2C Timing参数计算方法(I2C speed:120k/240k/400k)
stm32·单片机·嵌入式硬件·iic
加成BUFF4 小时前
树莓派5控制WS2812 RGB灯带:原理、接线与实战指南
python·嵌入式硬件·远程连接·ws2812·树莓派5