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


















4799

被折叠的 条评论
为什么被折叠?



