stm32f103c8t6 pwm输出音乐
时间: 2025-02-21 19:27:27 浏览: 43
### 使用 STM32F103C8T6 实现 PWM 输出音乐
STM32F103C8T6 是一款基于 ARM Cortex-M3 内核的微控制器,支持多种外设功能,其中包括定时器模块可以用于生成 PWM 波形。要通过 PWM 输出音乐,主要思路是利用不同频率的方波来模拟音符。
为了实现这一目标,需要配置 TIM 定时器以产生特定占空比和周期的 PWM 信号[^1]。具体来说:
- **初始化 GPIO 和 TIM**
配置 GPIO 引脚作为 TIM 的通道输出,并设置相应的模式为复用推挽输出。
- **设定 TIM 参数**
设置自动重装载寄存器 (ARR) 来决定载波周期;比较捕获/比较寄存器(CCRx) 控制占空比大小。对于不同的音高,则调整 ARR 或者 CCR 值即可改变频率从而发出相应的声音[^2]。
下面是一个简单的代码框架展示如何使用 HAL 库完成上述操作:
```c
#include "stm32f1xx_hal.h"
TIM_HandleTypeDef htim3;
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_TIM3_Init(void);
int main(void){
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_TIM3_Init();
uint16_t freq[] = {262, 294, 330}; // Do Re Mi notes frequency in Hz
while(1){
for(int i=0; i<sizeof(freq)/sizeof(uint16_t); ++i){
__HAL_TIM_SET_AUTORELOAD(&htim3, SystemCoreClock / freq[i]);
HAL_Delay(500);
}
}
}
// 初始化 TIM3 外设
static void MX_TIM3_Init(void){
TIM_OC_InitTypeDef sConfigOC;
htim3.Instance = TIM3;
htim3.Init.Prescaler = 72 - 1;
htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
htim3.Init.Period = 65535 - 1;
htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
if(HAL_TIM_PWM_Init(&htim3)!= HAL_OK){Error_Handler();}
sConfigOC.OCMode = TIM_OCMODE_PWM1;
sConfigOC.Pulse = 0;
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
if(HAL_TIM_PWM_ConfigChannel(&htim3,&sConfigOC,TIM_CHANNEL_1)!= HAL_OK){Error_Handler();}
}
```
这段程序展示了基本原理:通过修改 `__HAL_TIM_SET_AUTORELOAD` 函数中的参数值来更改产生的脉冲宽度调制(PWM)信号的频率,进而控制扬声器发声的不同音调[^3]。
阅读全文
相关推荐


















