继续创作,加快成长!这是我参加「日新计划 6 月更文挑战」的第29天,点击查看活动详情
一、X-CUBE-USB-AUDIO扩展包
STM32Cube的STM32 USB设备音频流软件扩展,由ST提供
请参阅X-CUBE-USB-AUDIO ST站点
X-CUBE-USB-AUDIO扩展包包含STM32F446E-EVAL
和STM32F769IDISCOVERY
板的库和运用示例,用作USB扬声器和录音机。
X-CUBE-USB-AUDIO扩展包可扩展;它允许为其他STM32设备和板开发USB音频运用程序。
首要特征
- 符合USB 2.0音频1.0级标准
- USB音频流播映和录制
- 播映采样率:96 kHz(用于高保真音频)、48 kHz和44.1 kHz
- 播映音频分辨率:24位(用于高保真音频)和16位
- 根据反应的同步播映
- 记载采样率:96 kHz(用于高保真音频)、48 kHz、44.1 kHz和16 kHz
- 录制音频分辨率:24位(用于高保真音频)和16位
- 录制和回放都支撑在编译阶段设置的多个采样率
- 录制和播映都支撑多频率:在运转时根据主机请求在采样率之间切换
- 录音和播映都支撑静音和音量控制
二、AUD_Streaming10 USB设备音频扩展运用程序
此运用程序是运用STM32Cube固件的USB音频流扩展包的一部分。它描述了如何根据STM32F446xx设备上音频流(输出:扬声器/耳机,输入:麦克风)功用的音频类完成来运用USB设备运用程序。
它遵从USB实施者论坛界说的“音频设备的通用串行总线设备类界说1.0版别,1998年3月18日”,用于经过USB FS设备重新编程运用程序。
按照此标准,只支撑全速USB模式(不支撑高速)。
大多数操作体系都支撑这个类:不需要特定的驱动程序设置。
这是一个关于如何运用STM32F446xx USB OTG设备外设和SAI外设将音频数据从USB主机传输到STM32446E-EVAL板上完成的音频编解码器的高级运用程序。
-
HAL_Init()
函数重置一切外围设备,初始化闪存接口和systick。 -
SystemClock_Config()
函数,用于将体系时钟(SYSCLK)装备为以168MHz的频率运转。选择该值以从主PLL驱动USB时钟。
三、程序装备
3.1 音频装备
usb_audio_user.h
USE_USB_FS
USE_USB_AUDIO_CLASS_10
USE_USB_AUDIO_PLAYBACK
USE_USB_AUDIO_RECORDING
-
USE_AUDIO_MEMS_MIC
: 运用PDM MEMS麦克风(最大支撑频率48KHZ) -
USE_AUDIO_DUMMY_MIC
: 要运用虚拟麦克风而不是mems麦克风,它发送零数据包,模拟支撑96KHZ的麦克风。为了发送96khz频率的虚拟数据,请确保USB_AUDIO_CONFIG_RECORD_USE_FREQ_96_K
设置为1,USB_AUDIO_CONFIG_RECORD_FREQ_MAX
设置为96K而不是48K
3.1 其他装备
usb_audio_user_cfg.h
-
USB_AUDIO_CONFIG_PLAY_RES_BIT/USB_AUDIO_CONFIG_PLAY_RES_BYTE
: 支撑24位或16位音频。 -
USE_AUDIO_PLAYBACK_USB_FEEDBACK
: 在播映中激活反应 -
USE_AUDIO_TIMER_VOLUME_CTRL
: 在低优先级的定时器中处理播映中的音量改变,这样能够减少音量改变时出现的毛病 -
USB_AUDIO_CONFIG_RECORD_RES_BIT/USB_AUDIO_CONFIG_RECORD_RES_BYTE
: 支撑24位音频录制 -
USE_AUDIO_RECORDING_USB_IMPLICIT_SYNCHRO
: 在MEMS话筒中运用隐式同步器 -
USE_AUDIO_RECORDING_USB_NO_REMOVE
: 增强录制的音频质量,当编解码器采样率高于USB率时,会向主机发送额外的样本(避免删除样本)
3.2工程装备
4个工程装备
-
STM32446E-EVAL_USB_PLAYER
: 支撑24位回放,并支撑反应同步。 -
STM32446E-EVAL_USB_RECORDER
: MEMS录音器,支撑16KHZ、48KHZ音频。可添加48KHZ以下的其他频率。 -
STM32446E-EVAL_USB_AUD_DUM_RECORDER
: 支撑音频16KHZ、44.1KHZ、48KHZ和96KHZ的USB音频虚拟记载器。 -
STM32446E-EVAL_USB_AUD_ADVANCED
: 支撑24位播映和录制,并支撑反应同步播映。
四、目录内容
-
USB_Device/AUD_Streaming10/Inc/main.h
,main program header file -
USB_Device/AUD_Streaming10/Inc/stm32f4xx_hal_conf.h
,HAL configuration file -
USB_Device/AUD_Streaming10/Inc/stm32f4xx_it.h
,interrupt handlers header file -
USB_Device/AUD_Streaming10/Inc/usb_audio_user_cfg.h
,user options for the project -
USB_Device/AUD_Streaming10/Inc/usb_audio.h
,Macros for the project -
USB_Device/AUD_Streaming10/Inc/usb_audio_constants.h
,list useful constants -
USB_Device/AUD_Streaming10/Inc/audio_user_devices.h
,如果用户更改扬声器或麦克风,则要修正的文件 -
USB_Device/AUD_Streaming10/Inc/usbd_conf.h
,USB device driver Configuration file -
USB_Device/AUD_Streaming10/Inc/usbd_desc.h
,USB device AUDIO descriptor header file -
USB_Device/AUD_Streaming10/Src/audio_mic_node.c
,Mic node implementation -
USB_Device/AUD_Streaming10/Src/audio_speaker_node.c
,Speaker node implementation -
USB_Device/AUD_Streaming10/Src/main.c
,Main program -
USB_Device/AUD_Streaming10/Src/stm32f4xx_it.c
,Interrupt handlers -
USB_Device/AUD_Streaming10/Src/system_stm32f4xx.c
,STM32F4xx system clock configuration file -
USB_Device/AUD_Streaming10/Src/usbd_conf.c
,General low level driver configuration -
USB_Device/AUD_Streaming10/Src/usbd_desc.c
,USB device AUDIO descriptor -
USB_Device/AUD_Streaming10/Src/stm32f4xx_hal_msp.c
,Timer for playback volume change handling msp init
首要客制化文件
-
USB_Device\Extension\Drivers\BSP\Components\wm8994\wm8994_ex.c
,Customized wm8994.c -
USB_Device\Extension\Drivers\BSP\Components\wm8994\wm8994_ex.h
,Customized wm8994.h -
USB_Device\Extension\Drivers\BSP\STM32446E_EVAL\stm32446e_eval_audio_ex.h
,Customized stm32446e_eval_audio.h -
USB_Device\Extension\Drivers\BSP\STM32446E_EVAL\stm32446e_eval_audio_ex.c
,Customized stm32446e_eval_audio.c
五、项目工程
-
STM32F446E-EVAL_UAC10-PLAY
: to use STM32 board as USB speaker -
STM32F446E-EVAL_UAC10-REC
: to use STM32 board as USB microphone -
STM32F446E-EVAL_UAC10-ADV
: to use STM32 board as USB speaker and USB microphone -
STM32F446E-EVAL_UAC10-DUM
: to use STM32 board as USB microphone , that returns only zero padded packets. however it supports wide range of frequencies(96KHZ).