STM32F103(标准库)蜂鸣器

STM32F103(标准库)驱动蜂鸣器实验

在学习 STM32 的过程中,蜂鸣器是非常常见的外设之一。

它可以用来发声提示、播放音效,和 LED 一样,是嵌入式开发中入门的必做实验。

本篇文章我们使用 STM32F103 标准外设库,驱动一个有源蜂鸣器,完成 滴滴提示音效果。


一、实验目标

  • 使用 STM32F103 最小系统板
  • 配置 GPIOB12 引脚为推挽输出
  • 控制 蜂鸣器发声 / 停止
  • 通过延时实现 短音 + 长音 提示音效果

二、硬件准备

  • STM32F103C8T6 最小系统板
  • 有源蜂鸣器模块(低电平触发型)
  • 下载器(ST-LINK / J-Link)

接线方式:

  • PB12 → 蜂鸣器模块输入端
  • GND → 蜂鸣器模块 GND

⚠️ 注意:这里使用的是 有源蜂鸣器(内部自带震荡电路,输入高低电平即可响),不是无源蜂鸣器(需要 PWM 产生频率信号驱动)。

img


三、软件设计

1. 主函数代码

#include "stm32f10x.h"                  // Device header
#include "Delay.h"

int main(void)
{
    // 1. 开启 GPIOB 时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
	
    // 2. 配置 PB12 为推挽输出
    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOB, &GPIO_InitStructure);
	
    // 3. 控制蜂鸣器发声
    while (1)
    {
        GPIO_ResetBits(GPIOB, GPIO_Pin_12); // PB12 = 0 → 蜂鸣器响
        Delay_ms(100);
        GPIO_SetBits(GPIOB, GPIO_Pin_12);   // PB12 = 1 → 蜂鸣器停
        Delay_ms(100);

        GPIO_ResetBits(GPIOB, GPIO_Pin_12); // 再响一下
        Delay_ms(100);
        GPIO_SetBits(GPIOB, GPIO_Pin_12);   // 停止
        Delay_ms(700);                      // 间隔 700ms
    }
}

💡 关键点解析

  1. GPIO_ResetBits(GPIOB, GPIO_Pin_12) → 输出低电平,蜂鸣器响。
  2. GPIO_SetBits(GPIOB, GPIO_Pin_12) → 输出高电平,蜂鸣器停。
  3. 本程序实现的是一个 短短长 的提示音节奏,类似“滴滴——”。

2. 延时函数

Delay.h

#ifndef __DELAY_H
#define __DELAY_H

void Delay_us(uint32_t us);
void Delay_ms(uint32_t ms);
void Delay_s(uint32_t s);

#endif

Delay.c

#include "stm32f10x.h"

/**
  * @brief  微秒级延时
  */
void Delay_us(uint32_t xus)
{
    SysTick->LOAD = 72 * xus;              // 设置重装值
    SysTick->VAL = 0x00;                   // 清空计数器
    SysTick->CTRL = 0x00000005;            // 选择时钟源,启动定时器
    while(!(SysTick->CTRL & 0x00010000));  // 等待计数到 0
    SysTick->CTRL = 0x00000004;            // 关闭定时器
}

/**
  * @brief  毫秒级延时
  */
void Delay_ms(uint32_t xms)
{
    while(xms--)
    {
        Delay_us(1000);
    }
}
 
/**
  * @brief  秒级延时
  */
void Delay_s(uint32_t xs)
{
    while(xs--)
    {
        Delay_ms(1000);
    }
} 

这里的延时函数依然使用 SysTick 定时器实现,和前面 LED 实验保持一致。


四、运行效果

将程序下载到开发板后,蜂鸣器会按照以下节奏发声:

滴 ~ 滴 ~ 滴—— (停顿)

即两个短音 + 一个长音,形成提示音效果。


五、总结

本实验主要学习内容:

  1. 使用 标准外设库配置 GPIOB12 为输出模式
  2. 掌握了有源蜂鸣器的基本控制方法
  3. 实现了 蜂鸣器提示音效果

下一步,我们可以升级实验:

  • 使用 定时器 PWM 控制 无源蜂鸣器,实现播放音乐
  • 与按键结合,实现 按键控制蜂鸣器响
  • 与 LED、流水灯实验组合,做一个 声光提示系统
posted @ 2025-08-30 11:47  jeikerxiao  阅读(4)  评论(0)    收藏  举报