STM32F103C8T6使用PWM驱动无源蜂鸣器
时间: 2025-02-23 07:16:43 浏览: 138
### STM32F103C8T6 使用PWM驱动无源蜂鸣器方法
#### 硬件连接
为了使STM32F103C8T6能够控制无源蜂鸣器发出声音,需要将蜂鸣器的一端接到微控制器的一个定时器通道上,另一端接地。通常情况下,会选择PA0或者其他具备TIM功能的GPIO引脚作为输出口。
#### 软件配置
在软件方面,利用STM32CubeMX工具可以简化外设初始化过程:
- 打开STM32CubeMX并创建新项目;
- 选择目标单片机型号为`STM32F103C8Tx`;
- 进入到Pinout&Configuration界面,在Connectivity标签页找到TIMx模块(例如TIM2),将其Mode设置为`PWM Generation CH1`;
- 设置Prescaler、Period以及Channel1的Pulse参数来调整频率和占空比;
- 将对应的GPIO引脚配置成Alternate Function Push-Pull模式[^1]。
#### 编程实现播放音符函数
下面给出一段简单的代码用于定义不同音调对应的实际频率值,并编写了一个名为`play_tone()`的功能函数用来按照指定的时间间隔播放特定的声音频率:
```c
#include "stm32f1xx_hal.h"
#define DO 0
#define RE 1
#define MI 2
#define FA 3
#define SO 4
#define LA 5
#define SI 6
#define RI1 7
static const uint16_t tone_freq[] = {
1047, /* C */
1175, /* D */
1319, /* E */
1397, /* F */
1568, /* G */
1760, /* A */
1976, /* B */
2093 /* C' */
};
void turn_passive_beep(uint8_t state,uint16_t freq){
if(state==ON){
__HAL_TIM_SET_AUTORELOAD(&htim2,(uint32_t)(SystemCoreClock/freq));
HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);
}else{
HAL_TIM_PWM_Stop(&htim2,TIM_CHANNEL_1);
}
}
// Play a single musical note with given duration.
static inline void play_tone(int tone, int delay) {
if (tone<DO || tone>RI1) return;
turn_passive_beep(ON,tone_freq[tone]);
HAL_Delay(delay);
turn_passive_beep(OFF,0);
}
```
上述代码片段展示了如何基于预定义好的音高数组`tone_freq[]`通过改变PWM信号周期的方式让无源蜂鸣器发声[^2]。
阅读全文
相关推荐



















