第八章 声音输出设备—蜂鸣器

目录

8.1 蜂鸣器

8.2 实验要求

8.3 硬件设计

8.4 软件设计

8.4.1 蜂鸣器端口宏定义

8.4.2 蜂鸣器端口初始化函数

8.4.3 蜂鸣器发声函数

8.4.4 主函数设计

8.5 下载验证


8.1 蜂鸣器

        蜂鸣器是一种常用的电子元件,它可以将电信号转换为声音信号。蜂鸣器通常由振荡器和扬声器两部分组成。振荡器产生高频交流电信号,经过扬声器的震动使空气中形成声波,从而发出声音。

        根据工作原理的不同,蜂鸣器可以分为以下两类:

        有源蜂鸣器:有源蜂鸣器需要外部提供驱动信号,通常采用交流或直流信号作为输入。它能够产生比较高的音量,并且音质较好,但功耗较大。

        无源蜂鸣器:无源蜂鸣器不需要外部驱动信号,它本身就是一个简单的振荡电路,在电压变化时会自动产生声音。它的优点是功耗低,但音量相对较小,音质也较差。

        除了以上两种基本类型外,还有一些特殊的蜂鸣器,如可编程蜂鸣器、多音蜂鸣器等,它们可以按照程序或者开关进行控制,实现多种音调、节奏的变化。

        蜂鸣器广泛应用于各种电子设备中,如警报器、定时器、计数器、电子钟表等,是一种非常重要的声音输出元件。

8.2 实验要求

        利用固件库使板载的蜂鸣器模块按一定规律响和不响。

8.3 硬件设计

         蜂鸣器直接与3.3V电压连接通过一个三极管与芯片的端口连接,所以在驱动蜂鸣器发出声音时只需要让PC0端口输出高电平即可让蜂鸣器发出声音。

8.4 软件设计

        利用固件库编写“bsp_buzzer.c”和“bsp_buzzer.h”文件,实现对蜂鸣器相关端口,时钟进行初始化。

8.4.1 蜂鸣器端口宏定义

#ifndef _BSP_BUZZER_H
#define _BSP_BUZZER_H
#include "stm32f10x.h" 
#define BUZZER_GPIO_PORT			GPIOC
#define BUZZER_GPIO_CLK				RCC_APB2Periph_GPIOC
#define BUZZER_GPIO_PIN				GPIO_Pin_0

#define digitalHi(p,i)			    {p->BSRR = i;}
#define digitalLo(p,i)			    {p->BRR = i;}
#define digitalToggle(p,i)		    {p->ODR ^= i;}

#define BUZZER_Toggle				digitalToggle(BUZZER_GPIO_PORT,BUZZER_GPIO_PIN)
#define BUZZER_OFF					digitalHi(BUZZER_GPIO_PORT,BUZZER_GPIO_PIN)
#define BUZZER_ON					digitalLo(BUZZER_GPIO_PORT,BUZZER_GPIO_PIN)
void BUZZER_GPIO_Config(void);
void BUZZER_CRY(uint32_t a);

#endif /*_BSP_BUZZER_H*/

        文件中对PC0端口,PIN脚,相关时钟,以及功能函数进行了初始化,并且还定义了控制蜂鸣器状态的标志BUZZER_ON,BUZZER_OFF。

8.4.2 蜂鸣器端口初始化函数

#include "bsp_buzzer.h"

void BUZZER_GPIO_Config(void)
{
	//定义一个GPIO_InitTypeDef类型的结构体
	GPIO_InitTypeDef GPIO_InitStruct;
	
	//开启控制蜂鸣器的GPIO的端口时钟
	RCC_APB2PeriphClockCmd(BUZZER_GPIO_CLK,ENABLE);
	
	//模式设置
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; 
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;	
	GPIO_InitStruct.GPIO_Pin = BUZZER_GPIO_PIN;
	GPIO_Init(BUZZER_GPIO_PORT,&GPIO_InitStruct);
	
	//关闭蜂鸣器
	GPIO_ResetBits(BUZZER_GPIO_PORT, BUZZER_GPIO_PIN);	
}

        文件中“void BUZZER_GPIO_Config(void)”函数实现了对相关端口的初始化。

8.4.3 蜂鸣器发声函数

void BUZZER_CRY(uint32_t a)
{
	if(a == 1)
	{
		GPIO_SetBits(BUZZER_GPIO_PORT,BUZZER_GPIO_PIN);
	}
	else if(a == 0)
	{
		GPIO_ResetBits(BUZZER_GPIO_PORT, BUZZER_GPIO_PIN);
	}
}

        “void BUZZER_CRY(uint32_t a)”函数实现蜂鸣器的响与不响的选择,函数需要一个参数,可以使用蜂鸣器端口宏定义文件中的控制蜂鸣器状态标志位来作为参数使蜂鸣器发出声音。

8.4.4 主函数设计

#include "stm32f10x.h"
#include "bsp_buzzer.h"

#define SOFT_DELAY		delay(0XFFFFF) 
void delay(uint32_t count);

int main(void)
{
	BUZZER_GPIO_Config();
	
	while(1)
	{
		BUZZER_CRY(BUZZER_ON);
		SOFT_DELAY;
		
		BUZZER_CRY(BUZZER_OFF);
		SOFT_DELAY;
	}
}

void delay(uint32_t count)
{
	for(;count != 0;count--);
}

        代码中首先对蜂鸣器端口进行了初始化,在while循环里让蜂鸣器响一段时间后不响,以此循环操作。

8.5 下载验证

        编译完成后将程序烧写到开发板中能够观察到蜂鸣器按一定规律的响和不响的循环。

谢谢阅读!

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KermanXin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值