stm32无源蜂鸣器歌曲代码
时间: 2025-04-24 21:13:39 浏览: 46
### 使用STM32无源蜂鸣器播放歌曲
为了使STM32能够通过无源蜂鸣器播放音乐,需编写一段代码来控制GPIO引脚的高低电平切换频率,以此产生不同音调的声音。下面是一段基于HAL库编写的C语言代码示例,用于让STM32发出一系列预设好的音符形成简单曲目。
```c
#include "main.h"
// 定义音符对应的周期值(单位:微秒)
#define NOTE_C4 (1 / 0.000587f * 1e6) /* C4 */
#define NOTE_D4 (1 / 0.000523f * 1e6) /* D4 */
#define NOTE_E4 (1 / 0.000494f * 1e6) /* E4 */
#define NOTE_F4 (1 / 0.000437f * 1e6) /* F4 */
#define NOTE_G4 (1 / 0.000392f * 1e6) /* G4 */
#define NOTE_A4 (1 / 0.000349f * 1e6) /* A4 */
#define NOTE_B4 (1 / 0.000311f * 1e6) /* B4 */
TIM_HandleTypeDef htim3;
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_TIM3_Init(void);
/**
* @brief 主函数入口.
* @param None
* @retval int
*/
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_TIM3_Init();
uint32_t notes[] = {NOTE_C4, NOTE_D4, NOTE_E4, NOTE_F4};
while (true){
for(int i=0;i<sizeof(notes)/sizeof(uint32_t);i++){
__HAL_TIM_SET_AUTORELOAD(&htim3,notes[i]);
HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1);
HAL_Delay(500);
HAL_TIM_PWM_Stop(&htim3,TIM_CHANNEL_1);
HAL_Delay(100);
}
}
}
```
上述代码中定义了一些常见音符所对应的周期长度,并将其存储在一个数组`notes[]`里;接着,在无限循环体内依次遍历这个数组里的每一个元素作为定时器自动重装载寄存器(`AUTORELOAD`)的新数值,进而改变PWM波形占空比达到调整输出信号频率的目的,最终实现了连续播放几个指定音符的效果[^1]。
对于更复杂的乐谱,则可以按照同样的方式扩展该列表并适当调节延时参数以匹配实际需求。值得注意的是这里仅展示了部分核心逻辑,完整的项目还需要包含必要的硬件初始化配置以及中断服务程序等内容。
阅读全文
相关推荐


















