# PWMAudio **Repository Path**: a5k3rn3l/pwmaudio ## Basic Information - **Project Name**: PWMAudio - **Description**: STM32F103C8T6 做的 USB 声卡,用 PWM 驱动扬声器,播放 48 KHz 16-bit 双声道音频。 - **Primary Language**: Unknown - **License**: GPL-2.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-05-24 - **Last Updated**: 2025-06-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # STM32F103C8T6/CBT6 声卡 ## Language 语言 [English](Readme.md) | 简体中文 ## 简介 * 我使用 STM32CubeMX 生成了一个 USB 声卡的工程,然后通过修改工程代码来实现功能。是通用的 USB 声卡,无需 PC 上安装额外驱动。 * 单片机频率是 72 MHz,作为 USB 声卡,支持 48 KHz 16-bit 立体声 PCM 音频格式。 * 作为一个 USB 设备,从上位机得到的输入是左右声道交错的 PCM 音频,实际实现是使用 48 KHz 的 PWM 来控制场效应管放大电流驱动喇叭发声。 * 理论上如果要完整支持 48 KHz 16-bit 音频,我需要 PWM 以 48 KHz 频率下,能以 65536 个时钟的精度下工作,这就需要我的单片机要有很高的频率(48 kHz × 65536 = 3.15 GHz),有点难为 STM32F103C8T6 了。所以我采用了 1500 时钟每周期的精度的 PWM 来播放声音(72 MHz / 48 kHz = 1500)。 ## 接线 * PA0: PWM 输出到场效应管放大器(声道1) * PA1: PWM 输出到场效应管放大器(声道2) * PA9: 串口输出,接 CH340 的白线。调试用。 * PA10: 串口输入,接 CH340 的绿线。调试用。 * PA11: USB D- (标准 USB 规范里的白色信号线) * PA12: USB D+ (标准 USB 规范里的绿色信号线)需要 1.5kΩ 上拉电阻到 3.3V 电源。 * PA13: SWDIO (ST-Link 调试器用,调试、烧写程序的时候用)* * PA14: SWCLK (ST-Link 调试器用,调试、烧写程序的时候用)* * PC13: 开漏模式接 LED,闪烁表示正常工作,不闪烁表示它死机了。 ### 有关调试 PA13/PA14 正确连接 ST-LINK 的话,你就能用 STM32CubeIDE 进行单步调试、断点调试、看寄存器、看内存、看外设等,改写代码,并且重新编译再下载。 * 我感觉调试体验比 VSCODE 强很多。 ## 关于为啥要做这个 我有个朋友告诉我说 PWM 是能拿来给扬声器正常播放声音的。他是在电动汽车公司上班的,每天都在整芯片。他说电车在低速行驶的时候其实是非常安静的,但是为了能让周围的行人注意到电车在附近,电车公司会故意让电车的马达制造一些好听的噪声来提醒行人避让。电车马达是用 PWM 驱动的,那如果我用 PWM 驱动喇叭嘞?应该也是能达到播放 PCM 的效果的吧。所以我想试下看能不能行。