User Tools

Site Tools


Sidebar

Go Back

Refresh

You are not allowed to add pages

library:stm32:runusbaudioatf103

在STM32F103RC上验证USB库的USB_Audio例子


ST官方提供的 STM32F10x, STM32L1xx and STM32F3xx USB full speed device library (UM0424),便于使用 STM32 MCU开发USB设备。

本例程使用STM32F103RC MINI 板子验证,需要修改相应的GPIO配置。

建立工程及环境


  1. 在官网下载开发包,或从网盘下载 https://pan.baidu.com/s/1E7kyjm_BeFeMLvMiJvYu1w 提取码:b9nv
  2. 解压开发包,保留原路径结构,复制开发包中的项目 Audio_Speaker目录(位于目录 STM32 USB-FS-Device development kit\en.stsw-stm32121.zip\STM32_USB-FS-Device_Lib_V4.1.0\Projects)
  3. 打开新项目目录中包括多个工具链的工程文件,选择合适的工程打开(STM32F103RC的器件可以使用 STM3210E-EVAL 配置,其他配置可以删除)
  4. 编译工程前,重新选择器件,注意如果选择STM32F103RC6的芯片,Keil5会自动定义宏STM32F10X_HD。如果原例子工程使用的是STM32F10RB,C/C++选项里预定义了STM32F10X_MD,这个预定义要去掉,否则冲突。选好器件后编译
  5. 编译成功加载到板上运行(STM32F103RC MINI),会遇到STLINK连接不通等问题,后续解决

基本功能修改

  • 编译运行,连接USB到PC,可以正确安装设备驱动,系统中多了一个STM32 Speaker的设备
  • 在音量控制栏选择合成器,扬声器指定使用STM32 Speaker,打开属性,可以测试Mute,播放等功能,播放会出现“无法播放测试音频”的错误
  • 修改设备的音频采样率(22k改为48k),重新编译;卸载设备,重新插拔设备,设备的采样率变为48kHz,可以正常播放测试音(windows界面上显示正常)

Show code

Hide code

//usb_desc.c
//  0xF0,0x55,0x00,                       /* tSamFreq 22000 = 0x0055F0 */
    0x80,0xBB,0x00,                       /* tSamFreq 48000 = 0x00BB80 */
  • 修改采样位宽1)(8位改为16位),重新编译,卸载设备,重新插拔设备,设备的采样参数变为 [16位 48000Hz]

Show code

Hide code

//usb_desc.c
//  0x01,                                 /* bSubFrameSize */
    0x02,                                 /* bSubFrameSize */
//  8,                                    /* bBitResolution */
    16,                                   /* bBitResolution */

评估板硬件资源修改


  1. 资源定义的修改

Show code

Hide code

// stm3210e_eval.h
typedef enum 
{
	LED0 = 0,
	LED1 = 1
} Led_TypeDef;
 
typedef enum 
{  
	KEY0 = 0,
	KEY1 = 1
} Button_TypeDef;
 
...
 
#define LEDn					2
 
#define LED0_PIN				GPIO_Pin_8
#define LED0_GPIO_PORT			GPIOA
#define LED0_GPIO_CLK			RCC_APB2Periph_GPIOA
 
#define LED1_PIN				GPIO_Pin_2
#define LED1_GPIO_PORT			GPIOD
#define LED1_GPIO_CLK			RCC_APB2Periph_GPIOD
 
...
 
#define BUTTONn					2
 
#define KEY0_PIN				GPIO_Pin_1
#define KEY0_GPIO_PORT			GPIOC
#define KEY0_GPIO_CLK			RCC_APB2Periph_GPIOC
 
#define KEY1_PIN				GPIO_Pin_13
#define KEY1_GPIO_PORT			GPIOC
#define KEY1_GPIO_CLK			RCC_APB2Periph_GPIOC
// stm3210e_eval.c
GPIO_TypeDef* LED_PORT[LEDn]	= {LED0_GPIO_PORT, LED1_GPIO_PORT};
const uint16_t LED_PIN[LEDn]	= {LED0_PIN, LED1_PIN};
const uint32_t LED_CLK[LEDn]	= {LED0_GPIO_CLK, LED1_GPIO_CLK};
 
GPIO_TypeDef* KEY_PORT[BUTTONn]	= {KEY0_GPIO_PORT, KEY1_GPIO_PORT};
const uint16_t KEY_PIN[BUTTONn]	= {KEY0_PIN, KEY1_PIN}; 
const uint32_t KEY_CLK[BUTTONn]	= {KEY0_GPIO_CLK, KEY1_GPIO_CLK};
 
...
1)
要同时修改bSubFrameSize和bBitResolution
library/stm32/runusbaudioatf103.txt · Last modified: 2019/03/23 11:15 by lhaosen