打印
[STM32F1]

STM32——悦耳的蜂鸣器实验

[复制链接]
2929|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 aizaixiyuanqian 于 2017-12-1 22:26 编辑

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

沙发
aizaixiyuanqian|  楼主 | 2017-12-1 22:26 | 只看该作者
已经安奈不住激动地心情开始了我们实验。

使用特权

评论回复
板凳
aizaixiyuanqian|  楼主 | 2017-12-1 22:28 | 只看该作者
蜂鸣器简介
蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。如下图所示

20.png (33.72 KB )

20.png

使用特权

评论回复
地板
aizaixiyuanqian|  楼主 | 2017-12-1 22:29 | 只看该作者
本次实验所用的蜂鸣器是无源蜂鸣器,需要自己编写震荡部分

使用特权

评论回复
5
aizaixiyuanqian|  楼主 | 2017-12-1 22:33 | 只看该作者
这里的无源不是指电源的“源”,而是指有没有自带震荡电路,有源蜂鸣器带震荡电路,一通电就会发声;无源蜂鸣器则没有自带震荡电路,必须外部提供2~5Khz 左右的方波驱动,才能发声。STM32 的单个 IO最大可以提供 25mA 电流,而蜂鸣器的驱动电流是 30mA 左右,算是比较接近。综合考虑可以直接驱动。

使用特权

评论回复
6
aizaixiyuanqian|  楼主 | 2017-12-1 22:36 | 只看该作者
还有一个方案就是:STM32 的 IO 不直接驱动蜂鸣器,而是通过三极管扩流后再驱动蜂鸣器,这样STM32 的 IO 只需要提供不到 1mA 的电流就足够了。

使用特权

评论回复
7
aizaixiyuanqian|  楼主 | 2017-12-1 22:38 | 只看该作者
硬件设计从原理图中,我们可以看到蜂鸣器是接到单片机的 PB6。而驱动无源蜂鸣器的原理就是产生 2~5Khz 左右的方波驱动,才能发声。所以要使蜂鸣器发声也就是将单片机 PB6 管脚每间隔一段时间不输出一个高低电平脉冲即可。

21.png (43.53 KB )

21.png

使用特权

评论回复
8
aizaixiyuanqian|  楼主 | 2017-12-1 22:39 | 只看该作者
蜂鸣器 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 */
}

使用特权

评论回复
9
aizaixiyuanqian|  楼主 | 2017-12-1 22:40 | 只看该作者
蜂鸣器管脚定义在其头文件内如下:
#define buzz GPIO_Pin_6 //PB6 定义端口 PB6

使用特权

评论回复
10
aizaixiyuanqian|  楼主 | 2017-12-1 22:43 | 只看该作者
蜂鸣器发声函数   通过改变频率控制声音变化void buzz_lisen() //报警声
{
u32 i=1000;
while(i--) //产生一段时间的 PWM 波,使蜂鸣器发声
{
GPIO_SetBits(GPIOB,BZ);  //IO 口输出高电平
delay(i);
GPIO_ResetBits(GPIOB,BZ); //IO 口输出低电平
delay(i--);
}
}



使用特权

评论回复
11
aizaixiyuanqian|  楼主 | 2017-12-1 22:44 | 只看该作者
这里的蜂鸣器驱动发生没有使用stm32自带的pwm是自己模拟写的。

使用特权

评论回复
12
aizaixiyuanqian|  楼主 | 2017-12-1 22:45 | 只看该作者
所有驱动代码写完了,可以使用主函数调用了。

使用特权

评论回复
13
aizaixiyuanqian|  楼主 | 2017-12-1 22:46 | 只看该作者
主函 数
int main()
{
buzz_Init(); //端口初始化
while(1)
{
buzz_lisen();
}
}

使用特权

评论回复
14
aizaixiyuanqian|  楼主 | 2017-12-1 22:47 | 只看该作者
有源蜂鸣器就到这里,关于无源的蜂鸣器是跟LED相似的,不在讲解,这次就到这里了。

使用特权

评论回复
15
泰山神泉| | 2017-12-9 11:21 | 只看该作者
关于蜂鸣器STM32F103有没有寄存器版控制程序

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

62

主题

1353

帖子

6

粉丝