你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32——悦耳的蜂鸣器实验

[复制链接]
feixiang20 发布时间:2018-1-15 20:38
我们将利用一个 IO 口来控制板载的无源蜂鸣器,实现蜂鸣器发声。通过本次实验,你将进一步了解 STM32 的 IO 口作为输出口使用的方法。实验目标:
1、无源蜂鸣器发出悦耳声音。
2、学会设置 STM32 的 GPIO 输出控制蜂鸣器。

蜂鸣器简介
蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。如下图所示

1.jpg

本次实验所用的蜂鸣器是无源蜂鸣器,需要自己编写震荡部分
这里的无源不是指电源的“源”,而是指有没有自带震荡电路,有源蜂鸣器带震荡电路,一通电就会发声;无源蜂鸣器则没有自带震荡电路,必须外部提供2~5Khz 左右的方波驱动,才能发声。STM32 的单个 IO最大可以提供 25mA 电流,而蜂鸣器的驱动电流是 30mA 左右,算是比较接近。综合考虑可以直接驱动。
还有一个方案就是:STM32 的 IO 不直接驱动蜂鸣器,而是通过三极管扩流后再驱动蜂鸣器,这样STM32 的 IO 只需要提供不到 1mA 的电流就足够了。
硬件设计从原理图中,我们可以看到蜂鸣器是接到单片机的 PB6。而驱动无源蜂鸣器的原理就是产生 2~5Khz 左右的方波驱动,才能发声。所以要使蜂鸣器发声也就是将单片机 PB6 管脚每间隔一段时间不输出一个高低电平脉冲即可。

2.jpg

蜂鸣器 IO  初始化
void buzz_Init() //端口初始化
{
GPIO_InitTypeDef GPIO_InitStructure; //声明一个结构体变量,用来初始化GPIO
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); /* 开启 GPIO时钟 */
/* 配置 GPIO 的模式和 IO 口 */
GPIO_InitStructure.GPIO_Pin=buzz; //选择你要设置的 IO 口
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; //设置推挽输出模式
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; //设置传输速率
GPIO_Init(GPIOB,&GPIO_InitStructure); /* 初始化 GPIO */
}

蜂鸣器管脚定义在其头文件内如下:
#define buzz GPIO_Pin_6 //PB6 定义端口 PB6

蜂鸣器发声函数   通过改变频率控制声音变化void buzz_lisen() //报警声
{
u32 i=1000;
while(i--) //产生一段时间的 PWM 波,使蜂鸣器发声
{
GPIO_SetBits(GPIOB,BZ);  //IO 口输出高电平
delay(i);
GPIO_ResetBits(GPIOB,BZ); //IO 口输出低电平
delay(i--);
}
}

这里的蜂鸣器驱动发生没有使用stm32自带的pwm是自己模拟写的。
所有驱动代码写完了,可以使用主函数调用了。
主函 数
int main()
{
buzz_Init(); //端口初始化
while(1)
{
buzz_lisen();
}
}
有源蜂鸣器就到这里,关于无源的蜂鸣器是跟LED相似的,不在讲解,这次就到这里了。

收藏 评论2 发布时间:2018-1-15 20:38

举报

2个回答
anywill 回答时间:2018-1-15 21:42:20
虚心学习
andeyqi 回答时间:2018-1-16 09:15:09
感谢分享,又了解到点东西。

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版