STM32使用无源蜂鸣器

1.1 介绍:

有源蜂鸣器:内部自带振荡源,将正负极接上直流电压即可持续发声,频率固定
无源蜂鸣器:内部不带振荡源,需要控制器提供振荡脉冲才可发声,调整提供振荡脉冲的频率,可发出不同频率的声音
蜂鸣器模块有三个管脚,其中标注‘-’的管脚接地(GND),中间的管脚接 5V ,(图中左侧)标注"S"的管脚接信号(数字 I/O)。

1.2 模块参数:

在这里插入图片描述

1.3 实验组件:

1.4模块接线图:

在这里插入图片描述

1.5 实验代码:

https://sourl.cn/7FXAif

在这里插入图片描述

1.6实验结果:

将示例代码上传到主板,上传成功后,蜂鸣器发声1S,停止1S,循环交替。

### 使用STM32控制无蜂鸣器播放音乐 为了使STM32能够通过无蜂鸣器播放音乐,需先理解两者的工作原理以及连方法。无蜂鸣器内部不含振荡电路,这意味着其发声依赖于外部提供的特定频率脉冲信号[^5]。 在硬件方面,应将STM32的一个GPIO引脚配置为PWM输出模式并与蜂鸣器相连。软件部分则涉及编写定时器中断服务程序,在其中改变占空比从而调整输出至蜂鸣器的方波频率,以此达到发出不同音调的目的[^2]。 以下是基于C语言编写的简化版示例代码片段用于展示如何设置并启动一个周期性的事件来触发指定频率的声音: ```c #include "stm32f1xx_hal.h" TIM_HandleTypeDef htim3; void Error_Handler(void){ while(1){} } // 初始化定时器3 static void MX_TIM3_Init(void) { __HAL_RCC_TIM3_CLK_ENABLE(); htim3.Instance = TIM3; htim3.Init.Prescaler = 79; // 假设系统时钟80MHz,则此预分频值使得计数频率约为1MHz htim3.Init.CounterMode = TIM_COUNTERMODE_UP; htim3.Init.Period = 999; // 初始周期设定为1ms (即1kHz), 可根据实际需求更改 HAL_TIM_PWM_Init(&htim3); TIM_OC_InitTypeDef sConfigOC = {0}; sConfigOC.OCMode = TIM_OCMODE_PWM1; sConfigOC.Pulse = 0; sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC,TIM_CHANNEL_1); } // 设置新的频率 void SetFrequency(uint32_t freq) { if(freq != 0U){ uint32_t period = SystemCoreClock / (freq * 2UL); // 计算周期寄存器值 __HAL_TIM_SET_AUTORELOAD(&htim3, period - 1U); __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, period/2); // 占空比50% } } int main(void) { HAL_Init(); MX_GPIO_Init(); // GPIO初始化函数省略... MX_TIM3_Init(); HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1); /* Infinite loop */ while (1) { // 这里可以根据需要定义一系列频率变化逻辑, // 或者读取预先准备好的音符数组来进行循环播放 // 示例:每隔一秒切换一次频率 SetFrequency(1046); // C5 音符对应的频率大约是1046Hz HAL_Delay(1000); SetFrequency(1175); // D5 音符对应的频率大约是1175Hz HAL_Delay(1000); // ... 继续添加更多音符 ... } } ``` 这段代码展示了基本框架,具体应用时还需要考虑更多的细节优化,比如提高时间精度、处理异常情况等。另外值得注意的是,由于无蜂鸣器本身的物理特性所限,所能产生的声音质量较为粗糙,适合用来演奏简单的旋律或是作为提示音效[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

千年糊涂

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

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

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

打赏作者

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

抵扣说明:

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

余额充值