STM32F103(标准库)蜂鸣器
STM32F103(标准库)驱动蜂鸣器实验
在学习 STM32 的过程中,蜂鸣器是非常常见的外设之一。
它可以用来发声提示、播放音效,和 LED 一样,是嵌入式开发中入门的必做实验。
本篇文章我们使用 STM32F103 标准外设库,驱动一个有源蜂鸣器,完成 滴滴提示音效果。
一、实验目标
- 使用 STM32F103 最小系统板
- 配置 GPIOB12 引脚为推挽输出
- 控制 蜂鸣器发声 / 停止
- 通过延时实现 短音 + 长音 提示音效果
二、硬件准备
- STM32F103C8T6 最小系统板
- 有源蜂鸣器模块(低电平触发型)
- 下载器(ST-LINK / J-Link)
接线方式:
- PB12 → 蜂鸣器模块输入端
- GND → 蜂鸣器模块 GND
⚠️ 注意:这里使用的是 有源蜂鸣器(内部自带震荡电路,输入高低电平即可响),不是无源蜂鸣器(需要 PWM 产生频率信号驱动)。
三、软件设计
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
}
}
💡 关键点解析:
GPIO_ResetBits(GPIOB, GPIO_Pin_12)
→ 输出低电平,蜂鸣器响。GPIO_SetBits(GPIOB, GPIO_Pin_12)
→ 输出高电平,蜂鸣器停。- 本程序实现的是一个 短短长 的提示音节奏,类似“滴滴——”。
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 实验保持一致。
四、运行效果
将程序下载到开发板后,蜂鸣器会按照以下节奏发声:
滴 ~ 滴 ~ 滴—— (停顿)
即两个短音 + 一个长音,形成提示音效果。
五、总结
本实验主要学习内容:
- 使用 标准外设库配置 GPIOB12 为输出模式
- 掌握了有源蜂鸣器的基本控制方法
- 实现了 蜂鸣器提示音效果
下一步,我们可以升级实验:
- 使用 定时器 PWM 控制 无源蜂鸣器,实现播放音乐
- 与按键结合,实现 按键控制蜂鸣器响
- 与 LED、流水灯实验组合,做一个 声光提示系统