最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

15.35、 USB实现PC音频播放器实验

IT圈 admin 62浏览 0评论

2024年10月30日发(作者:谷齐)

USB实现PC音频播放器实验

z 意义与作用

现在的智能终端已经逐步由按键+指示灯或数码管发展为触摸屏+音频输出,前面已经

介绍了神舟系列STM开发板的触摸屏,本章节我们来学习一下如何使用神舟系列STM开发

板的USB接口和I2S音频接口在PC侧实现一个免驱动音频声卡功能。本实验USB工作在同步

传输模式。通过该实现使大家了解如何使用STM32的USB的同步传输模式实现即插即用的功

能,以及如何使用STM32的I2S音频接口实现音频播放功能。

z 实验原理

在USB中,USB HOST是通过各种描述符来识别设备的,有设备描述符,配置描述符,

接口描述符,端点描述符,字符串描述符,报告描述符等等。更详细的说明请参看USB HID

协议,该协议可从Http://下载。关于STM32的USB知识可以参考附件的《STM32

USB固件的中文资料.pdf 》和《STM32的USB详解.pdf》等文档。

本实验音频部分主要是初始化DA芯片PCM1770,设置STM32的I2S接口的参数,然后将

来自USB接口的音频数据通过I2S2接口送给DA芯片PCM1770播放。

PCM1770简介:

神舟系列STM开发板采用TI公司的进口原装音频DA芯片PCM1770。PCM1770是一款

具有耳机放大器的24位低功耗立体声音频 DAC。可直接驱动耳机,具有软件控制音量大小、

芯片模式和模拟语音合成等功能。该芯片的功能框图如下:

PCM1770支持工业标准音频数据格式(industry-standard audio data formats),包括标准

模式(standard)、I2S飞利浦标准、MSB对齐标准(left-justified)。本次实验PCM1770为

从设备模式和MSB对齐标准(left-justified)。

PCM1770的I2S共需要4信号:

● SD:串行数据,用来接收2路(左右声道)时分复用通道的数据;

● WS:字选(左右声道选择),从模式下作为输入;

● CK:串行位时钟,从模式下作为输入。

● MCK:主时钟,PCM1770工作需要的时钟。

PCM1770在MSB对齐标准(left-justified)模式下的信号时序如下图所示:

神舟系列STM32开发板的I2S接口特性如下:

● 单工通信(仅发送或接收)

● 主或者从操作

● 8位线性可编程预分频器,获得精确的音频采样频率(8KHz到96kHz)

● 数据格式可以是16位,24位或者32位

● 音频信道固定数据包帧为16位(16位数据帧)或32位(16、24或32位数据帧)

● 可编程的时钟极性(稳定态)

● 从发送模式下的下溢标志位和主/从接收模式下的溢出标志位

● 16位数据寄存器用来发送和接收,在通道两端各有一个寄存器

● 支持的I2S协议:

─ I2S飞利浦标准

─ MSB对齐标准(左对齐)

─ LSB对齐标准(右对齐)

─ PCM标准(16位通道帧上带长或短帧同步或者16位数据帧扩展为32位通道帧)

● 数据方向总是MSB在先

● 发送和接收都具有DMA能力

● 主时钟可以输出到外部音频设备,比率固定为256xFs(Fs为音频采样频率)

● 在互联型产品中,两个I2S模块(I2S2和I2S3)有一个专用的PLL(PLL3),产生更加精准

得时钟

STM32的I2S的框图如下图所示:

通过将寄存器SPI_I2SCFGR的I2SMOD位置为’1’,即可使能I2S功能。此时,可以

把SPI模块用作I2S音频接口。I2S接口与SPI接口使用大致相同的引脚、标志和中断。

STM32的I2S的4个引脚:

● SD:串行数据(映射至MOSI引脚),用来发送和接收2路时分复用通道的数据;

● WS:字选(映射至NSS引脚),主模式下作为数据控制信号输出,从模式下作为输入;

● CK:串行时钟(映射至SCK引脚),主模式下作为时钟信号输出,从模式下作为输入。

● MCK:主时钟(独立映射),在I2S配置为主模式,寄存器SPI_I2SPR的MCKOE位为’1’

时,作为输出额外的时钟信号引脚使用。输出时钟信号的频率预先设置为256 × Fs,其中

Fs是音频信号的采样频率。

设置成主模式时,I2S使用自身的时钟发生器来产生通信用的时钟信号。这个时钟发生

器也是主时钟输出的时钟源。I2S模式下有2个额外的寄存器,一个是与时钟发生器配置相

关的寄存器SPI_I2SPR,另一个是I2S通用配置寄存器SPI_I2SCFGR(可设置音频标准、从/

主模式、数据格式、数据包帧、时钟极性等参数)。

本次实验PCM1770为从设备模式和MSB对齐标准(left-justified),对应神舟系列

STM32开发板的I2S接口主模式和16bit MSB对齐标准。

STM32的I2S支持的MSB对齐标准时序图:

在此标准下,WS信号和第一个数据位,即最高位(MSB)同时产生

根据以上分析所以后续代码中会看到如下配置:

z 硬件设计

本实验硬件包括“STM32的I2S音频接口” 和 “USB 2.0 OTG全速接口”两部分。

STM32的I2S音频接口:

音乐播放器要用到的硬件资源STM32的I2S接口和外部DA芯片PCM1770,将从I2S2接口

传过来的音频音频信号输出到耳机接口。

神舟IV号STM32开发板上使用了PCM1770这款具有耳机放大器的24位低功耗立体

声音频DAC芯片提供音频播放功能。处理器通过I2S接口(处理器的I2S2)传送音频信号

到PCM1770,由它进行解码输出到J3音频座。而PCM1770的配置接口与处理器的SPI3连

接,处理器通过SPI接口访问PCM1770的寄存器,实现配置和控制功能。

图表 1 音频解码电路原理图

D/A芯片PCM1770通过I2S2接口与STM32F107VCT6处理器连接。音频信号通过I2S2

接口传到D/A芯片,转换成音频信号播出。相关管脚定义如下:

GPIO管脚 功能描述 说明

PB12 I2S2_WS 左右通道时钟,频率和音频采样速率一致

PB13 I2S2_CK 串行比特位时钟。

PB15 I2S2_SD 串行音频数据信号。

PC6 I2S2_MCK 系统时钟输入,PCM1770工作需要的时钟

STM32F107VCT6处理器通过SPI3接口访问DA芯片PCM1770,对它内部数据进行读

取和配置。相关管脚定义如下:

GPIO管脚 功能描述 说明

PC7 SPI 片选 连接到PCM1770的SPI接口片选

PC10 SPI3_SCK SPI3接口SCK时钟信号

PC12 SPI3_MOSI SPI3接口的MOSI信号

DAC芯片说明

在神舟IV号中,使用了TI公司推出的低电压,低功耗带耳机放大的DAC芯片PCM1770,

来实现音频的DA转换。

PCM1770的管脚信号图:

PCM1770的管脚信号定义:

USB 2.0 OTG全速接口作为Device设备

注:本实验的硬件设计与前面“USB人机交互设备HID实验”对应章节完全相同,此处

不再重复,请参考“USB人机交互设备HID实验”对应章节。

z 软件设计

在本实验中的原理是采用的是I2S中断方式来将音频数据送到DAC芯片实现播放音乐

的功能,主程序实现如下:

1、 配置LED、串口和LCD液晶屏

2、 配置I2S管脚和参数

3、 USB时钟、USB协议相关初始化,等待USB中断

本实验USB工作在同步传输模式。

关于LED、串口、LCD液晶屏,系统滴答等知识在前面章节已经讲解过,请回顾相关

知识。

下面我们将重点讲解MAIN函数中的Speaker_Config函数:

该函数的第二行可知本实验的I2S数据传输使用的是DMA方式,继续深入看一下

I2S_Config()函数:

I2S_Config()函数配置I2S的GPIO和I2S参数:

查看神舟IV号原理图可知, D/A芯片PCM1770通过I2S2接口与STM32F107VCT6处

理器连接。音频信号通过I2S2接口传到D/A芯片,转换成音频信号播出。相关管脚定义如

下:

GPIO管脚 功能描述 说明

PB12 I2S2_WS 左右通道时钟,频率和音频采样速率一致

PB13 I2S2_CK 串行比特位时钟。

PB15 I2S2_SD 串行音频数据信号。

PC6 I2S2_MCK 系统时钟输入,PCM1770工作需要的时钟

对应的代码如下:

2S_Config()函数配置和初始化I2S管脚以及接口参数:

USB接口初始化

USB接口初始化在前面已经进行了详细的实验,在本实验中,就不再详细描述,相关的

初始化代码如下:

“pProperty->Init()”实际调用的是“void Virtual_Com_Port_init()”

中断配置函数: 该例程使用了USB中断和I2S中断,由于USB工作同步传输模式,所

以将其优先级设为最高,I2S中断优先级次之(STM32的I2S和SPI共用接口资源)。进行

中断组设置和中断优先级设计,相关代码如下:

z 下载与验证

神舟

IV

号光盘

源码

目录包含本实验的工程源码,在

神舟

IV

号光盘

源码

33.

神舟

IV

STM32_USB_MUSIC

实现

PC

音频播放器实验

.rarProjectAudio_StreamingEWARMv5

STM3210C-EVAL-25MHzExe目录下的神舟IV号STM32_USB_MUSIC实现PC音频播放器实

验.hex文件即为前面我们分析的神舟IV号STM32的USB实现PC音频播放器实验编译好的固

件,我们可以直接将固件下载到神舟IV号开发板中,观察运行效果。

如果使用JLINK下载固件,请按

错误!未找到引用源。错误!未找到引用源。

下载固件

到神舟IV号开发板小节进行操作。

如果使用USB下载固件,请按

错误!未找到引用源。错误!未找到引用源。

小节进行操

作。

如果使用串口下载固件,请按

错误!未找到引用源。错误!未找到引用源。

小节进行

操作。

未找到引用源。

如果在IAR开发环境中,下载编译好的固件或者在线调试,请按

错误!

错误!未找到引用源。

小节进行操作。

如果在MDK开发环境中,下载编译好的固件或者在线调试,请按

错误!未找到引用源。

错误!未找到引用源。

小节进行操作。

z 实验现象

将实验的程序固件下载到神舟IV号后,将耳机插入音频口(J3)以后,连接USB与PC

电脑,重新为神舟IV号上电运行,PC机会提示发现新硬件并免驱自动完成安装,此时原PC

的声音会通过神舟IV号从耳机播放,在PC上打开音乐就可以通过神舟IV号听到悦耳的歌

声。同时LCD会有消息提示,串口2(波特率115200)输出打印信息,提示程序运行情况。

PC机免驱自动完成安装后,可以在PC的设备管理器里看到如下设备:

同时双击电脑任务栏右侧的喇叭

设备信息。

,可以看到-STM32 Speaker音频

可以查看-STM32 Speaker音频设备的属性信息:

2024年10月30日发(作者:谷齐)

USB实现PC音频播放器实验

z 意义与作用

现在的智能终端已经逐步由按键+指示灯或数码管发展为触摸屏+音频输出,前面已经

介绍了神舟系列STM开发板的触摸屏,本章节我们来学习一下如何使用神舟系列STM开发

板的USB接口和I2S音频接口在PC侧实现一个免驱动音频声卡功能。本实验USB工作在同步

传输模式。通过该实现使大家了解如何使用STM32的USB的同步传输模式实现即插即用的功

能,以及如何使用STM32的I2S音频接口实现音频播放功能。

z 实验原理

在USB中,USB HOST是通过各种描述符来识别设备的,有设备描述符,配置描述符,

接口描述符,端点描述符,字符串描述符,报告描述符等等。更详细的说明请参看USB HID

协议,该协议可从Http://下载。关于STM32的USB知识可以参考附件的《STM32

USB固件的中文资料.pdf 》和《STM32的USB详解.pdf》等文档。

本实验音频部分主要是初始化DA芯片PCM1770,设置STM32的I2S接口的参数,然后将

来自USB接口的音频数据通过I2S2接口送给DA芯片PCM1770播放。

PCM1770简介:

神舟系列STM开发板采用TI公司的进口原装音频DA芯片PCM1770。PCM1770是一款

具有耳机放大器的24位低功耗立体声音频 DAC。可直接驱动耳机,具有软件控制音量大小、

芯片模式和模拟语音合成等功能。该芯片的功能框图如下:

PCM1770支持工业标准音频数据格式(industry-standard audio data formats),包括标准

模式(standard)、I2S飞利浦标准、MSB对齐标准(left-justified)。本次实验PCM1770为

从设备模式和MSB对齐标准(left-justified)。

PCM1770的I2S共需要4信号:

● SD:串行数据,用来接收2路(左右声道)时分复用通道的数据;

● WS:字选(左右声道选择),从模式下作为输入;

● CK:串行位时钟,从模式下作为输入。

● MCK:主时钟,PCM1770工作需要的时钟。

PCM1770在MSB对齐标准(left-justified)模式下的信号时序如下图所示:

神舟系列STM32开发板的I2S接口特性如下:

● 单工通信(仅发送或接收)

● 主或者从操作

● 8位线性可编程预分频器,获得精确的音频采样频率(8KHz到96kHz)

● 数据格式可以是16位,24位或者32位

● 音频信道固定数据包帧为16位(16位数据帧)或32位(16、24或32位数据帧)

● 可编程的时钟极性(稳定态)

● 从发送模式下的下溢标志位和主/从接收模式下的溢出标志位

● 16位数据寄存器用来发送和接收,在通道两端各有一个寄存器

● 支持的I2S协议:

─ I2S飞利浦标准

─ MSB对齐标准(左对齐)

─ LSB对齐标准(右对齐)

─ PCM标准(16位通道帧上带长或短帧同步或者16位数据帧扩展为32位通道帧)

● 数据方向总是MSB在先

● 发送和接收都具有DMA能力

● 主时钟可以输出到外部音频设备,比率固定为256xFs(Fs为音频采样频率)

● 在互联型产品中,两个I2S模块(I2S2和I2S3)有一个专用的PLL(PLL3),产生更加精准

得时钟

STM32的I2S的框图如下图所示:

通过将寄存器SPI_I2SCFGR的I2SMOD位置为’1’,即可使能I2S功能。此时,可以

把SPI模块用作I2S音频接口。I2S接口与SPI接口使用大致相同的引脚、标志和中断。

STM32的I2S的4个引脚:

● SD:串行数据(映射至MOSI引脚),用来发送和接收2路时分复用通道的数据;

● WS:字选(映射至NSS引脚),主模式下作为数据控制信号输出,从模式下作为输入;

● CK:串行时钟(映射至SCK引脚),主模式下作为时钟信号输出,从模式下作为输入。

● MCK:主时钟(独立映射),在I2S配置为主模式,寄存器SPI_I2SPR的MCKOE位为’1’

时,作为输出额外的时钟信号引脚使用。输出时钟信号的频率预先设置为256 × Fs,其中

Fs是音频信号的采样频率。

设置成主模式时,I2S使用自身的时钟发生器来产生通信用的时钟信号。这个时钟发生

器也是主时钟输出的时钟源。I2S模式下有2个额外的寄存器,一个是与时钟发生器配置相

关的寄存器SPI_I2SPR,另一个是I2S通用配置寄存器SPI_I2SCFGR(可设置音频标准、从/

主模式、数据格式、数据包帧、时钟极性等参数)。

本次实验PCM1770为从设备模式和MSB对齐标准(left-justified),对应神舟系列

STM32开发板的I2S接口主模式和16bit MSB对齐标准。

STM32的I2S支持的MSB对齐标准时序图:

在此标准下,WS信号和第一个数据位,即最高位(MSB)同时产生

根据以上分析所以后续代码中会看到如下配置:

z 硬件设计

本实验硬件包括“STM32的I2S音频接口” 和 “USB 2.0 OTG全速接口”两部分。

STM32的I2S音频接口:

音乐播放器要用到的硬件资源STM32的I2S接口和外部DA芯片PCM1770,将从I2S2接口

传过来的音频音频信号输出到耳机接口。

神舟IV号STM32开发板上使用了PCM1770这款具有耳机放大器的24位低功耗立体

声音频DAC芯片提供音频播放功能。处理器通过I2S接口(处理器的I2S2)传送音频信号

到PCM1770,由它进行解码输出到J3音频座。而PCM1770的配置接口与处理器的SPI3连

接,处理器通过SPI接口访问PCM1770的寄存器,实现配置和控制功能。

图表 1 音频解码电路原理图

D/A芯片PCM1770通过I2S2接口与STM32F107VCT6处理器连接。音频信号通过I2S2

接口传到D/A芯片,转换成音频信号播出。相关管脚定义如下:

GPIO管脚 功能描述 说明

PB12 I2S2_WS 左右通道时钟,频率和音频采样速率一致

PB13 I2S2_CK 串行比特位时钟。

PB15 I2S2_SD 串行音频数据信号。

PC6 I2S2_MCK 系统时钟输入,PCM1770工作需要的时钟

STM32F107VCT6处理器通过SPI3接口访问DA芯片PCM1770,对它内部数据进行读

取和配置。相关管脚定义如下:

GPIO管脚 功能描述 说明

PC7 SPI 片选 连接到PCM1770的SPI接口片选

PC10 SPI3_SCK SPI3接口SCK时钟信号

PC12 SPI3_MOSI SPI3接口的MOSI信号

DAC芯片说明

在神舟IV号中,使用了TI公司推出的低电压,低功耗带耳机放大的DAC芯片PCM1770,

来实现音频的DA转换。

PCM1770的管脚信号图:

PCM1770的管脚信号定义:

USB 2.0 OTG全速接口作为Device设备

注:本实验的硬件设计与前面“USB人机交互设备HID实验”对应章节完全相同,此处

不再重复,请参考“USB人机交互设备HID实验”对应章节。

z 软件设计

在本实验中的原理是采用的是I2S中断方式来将音频数据送到DAC芯片实现播放音乐

的功能,主程序实现如下:

1、 配置LED、串口和LCD液晶屏

2、 配置I2S管脚和参数

3、 USB时钟、USB协议相关初始化,等待USB中断

本实验USB工作在同步传输模式。

关于LED、串口、LCD液晶屏,系统滴答等知识在前面章节已经讲解过,请回顾相关

知识。

下面我们将重点讲解MAIN函数中的Speaker_Config函数:

该函数的第二行可知本实验的I2S数据传输使用的是DMA方式,继续深入看一下

I2S_Config()函数:

I2S_Config()函数配置I2S的GPIO和I2S参数:

查看神舟IV号原理图可知, D/A芯片PCM1770通过I2S2接口与STM32F107VCT6处

理器连接。音频信号通过I2S2接口传到D/A芯片,转换成音频信号播出。相关管脚定义如

下:

GPIO管脚 功能描述 说明

PB12 I2S2_WS 左右通道时钟,频率和音频采样速率一致

PB13 I2S2_CK 串行比特位时钟。

PB15 I2S2_SD 串行音频数据信号。

PC6 I2S2_MCK 系统时钟输入,PCM1770工作需要的时钟

对应的代码如下:

2S_Config()函数配置和初始化I2S管脚以及接口参数:

USB接口初始化

USB接口初始化在前面已经进行了详细的实验,在本实验中,就不再详细描述,相关的

初始化代码如下:

“pProperty->Init()”实际调用的是“void Virtual_Com_Port_init()”

中断配置函数: 该例程使用了USB中断和I2S中断,由于USB工作同步传输模式,所

以将其优先级设为最高,I2S中断优先级次之(STM32的I2S和SPI共用接口资源)。进行

中断组设置和中断优先级设计,相关代码如下:

z 下载与验证

神舟

IV

号光盘

源码

目录包含本实验的工程源码,在

神舟

IV

号光盘

源码

33.

神舟

IV

STM32_USB_MUSIC

实现

PC

音频播放器实验

.rarProjectAudio_StreamingEWARMv5

STM3210C-EVAL-25MHzExe目录下的神舟IV号STM32_USB_MUSIC实现PC音频播放器实

验.hex文件即为前面我们分析的神舟IV号STM32的USB实现PC音频播放器实验编译好的固

件,我们可以直接将固件下载到神舟IV号开发板中,观察运行效果。

如果使用JLINK下载固件,请按

错误!未找到引用源。错误!未找到引用源。

下载固件

到神舟IV号开发板小节进行操作。

如果使用USB下载固件,请按

错误!未找到引用源。错误!未找到引用源。

小节进行操

作。

如果使用串口下载固件,请按

错误!未找到引用源。错误!未找到引用源。

小节进行

操作。

未找到引用源。

如果在IAR开发环境中,下载编译好的固件或者在线调试,请按

错误!

错误!未找到引用源。

小节进行操作。

如果在MDK开发环境中,下载编译好的固件或者在线调试,请按

错误!未找到引用源。

错误!未找到引用源。

小节进行操作。

z 实验现象

将实验的程序固件下载到神舟IV号后,将耳机插入音频口(J3)以后,连接USB与PC

电脑,重新为神舟IV号上电运行,PC机会提示发现新硬件并免驱自动完成安装,此时原PC

的声音会通过神舟IV号从耳机播放,在PC上打开音乐就可以通过神舟IV号听到悦耳的歌

声。同时LCD会有消息提示,串口2(波特率115200)输出打印信息,提示程序运行情况。

PC机免驱自动完成安装后,可以在PC的设备管理器里看到如下设备:

同时双击电脑任务栏右侧的喇叭

设备信息。

,可以看到-STM32 Speaker音频

可以查看-STM32 Speaker音频设备的属性信息:

发布评论

评论列表 (0)

  1. 暂无评论