本帖最后由 qinchxiong 于 2019-7-29 09:51 编辑  
 
我现在在STM32 F7上做USB复合设备 
1. stm32 复合设备USB CDC+USB audio , 自定义VID = 0x0483, PID = 0x5972 
2. 烧录后第一次插入电脑usb,电脑设备管理器显示USB串口+黄色感叹号的STM USB AUDIO。 
C:\Documents and Settings\Administrator\桌面\USB总结\第一次插USB.jpg 
3. 之后反复插拔USB,电脑设备管理器只显示USB串口。 
 
C:\Documents and Settings\Administrator\桌面\USB总结\第二次插USB.png 
4. 描述符如下: 
uint8_t USBD_DeviceDesc[USB_SIZ_DEVICE_DESC]= 
{ 
  0x12,                       /*bLength */ 
  USB_DEVICE_DESCRIPTOR_TYPE, /*bDescriptorType*/ 
  0x00,                       /*bcdUSB */ 
  0x02, 
  0x00,                       /*bDeviceClass*/ 
  0x00,                       /*bDeviceSubClass*/ 
  0x00,                       /*bDeviceProtocol*/ 
  USB_OTG_MAX_EP0_SIZE,      /*bMaxPacketSize*/ 
  LOBYTE(USBD_VID),           /*idVendor*/ 
  HIBYTE(USBD_VID),           /*idVendor*/ 
  LOBYTE(USBD_PID),           /*idVendor*/ 
  HIBYTE(USBD_PID),           /*idVendor*/ 
  0x00,                       /*bcdDevice rel. 2.00*/ 
  0x02, 
  USBD_IDX_MFC_STR,           /*Index of manufacturer  string*/ 
  USBD_IDX_PRODUCT_STR,       /*Index of product string*/ 
  USBD_IDX_SERIAL_STR,        /*Index of serial number string*/ 
  USBD_CFG_MAX_NUM            /*bNumConfigurations*/ 
} ; /* USB_DeviceDescriptor */ 
 
uint8_t usbd_audiocdc_CfgDesc[USB_AUDIOCDC_CONFIG_DESC_SIZ] = 
{ 
  /*Configuration Descriptor*/ 
  0x09,   /* bLength: Configuration Descriptor size */ 
  USB_CONFIGURATION_DESCRIPTOR_TYPE,          /* bDescriptorType: Configuration */ 
  USB_AUDIOCDC_CONFIG_DESC_SIZ,                                  /* wTotalLength:no of returned bytes */ 
  0x00, 
  0x04, //0x01,   /* bNumInterfaces: 2 interface */ //0x02 
  0x01,   /* bConfigurationValue: Configuration value */ 
  0x00,   /* iConfiguration: Index of string descriptor describing the configuration */ 
  0xC0,   /* bmAttributes: self powered */ 
  0x32,   /* MaxPower 0 mA */ 
   
 /******** /IAD descriptor *******/ 
  0x08, /* bLength */ 
  0x0B, /* bDescriptorType */ 
  0x00, /* bFirstInterface */ 
  0x02, /* bInterfaceCount */ 
  0x02, /* bFunctionClass */ 
  0x02, /* bFunctionSubClass */ 
  0x01, /* bFunctionProtocol */ 
  0x00, /* iFunction (Index of string descriptor describing this function) */ 
 
  /*Interface Descriptor */ 
  0x09,   /* bLength: Interface Descriptor size */ 
  USB_INTERFACE_DESCRIPTOR_TYPE,  /* bDescriptorType: Interface */ 
  /* Interface descriptor type */ 
  0x00,   /* bInterfaceNumber: Number of Interface */ 
  0x00,   /* bAlternateSetting: Alternate setting */ 
  0x01,   /* bNumEndpoints: One endpoints used */ 
  0x02, //0xFF,   /* bInterfaceClass: Communication Interface Class */        //0x02         
  0x02, //0x00,   /* bInterfaceSubClass: Abstract Control Model */         //0x02   
  0x01, //0x00,   /* bInterfaceProtocol: Common AT commands */        //0x01         
  0x00,   /* iInterface: */ 
 
  /*Header Functional Descriptor*/ 
  0x05,   /* bLength: Endpoint Descriptor size */ 
  0x24,   /* bDescriptorType: CS_INTERFACE */ 
  0x00,   /* bDescriptorSubtype: Header Func Desc */ 
  0x10,   /* bcdCDC: spec release number */ 
  0x01, 
   
  /*Call Management Functional Descriptor*/ 
  0x05,   /* bFunctionLength */ 
  0x24,   /* bDescriptorType: CS_INTERFACE */ 
  0x01,   /* bDescriptorSubtype: Call Management Func Desc */ 
  0x00,   /* bmCapabilities: D0+D1 */ 
  0x01,   /* bDataInterface: 1 */ 
   
  /*ACM Functional Descriptor*/ 
  0x04,   /* bFunctionLength */ 
  0x24,   /* bDescriptorType: CS_INTERFACE */ 
  0x02,   /* bDescriptorSubtype: Abstract Control Management desc */ 
  0x02,   /* bmCapabilities */ 
   
  /*Union Functional Descriptor*/ 
  0x05,   /* bFunctionLength */ 
  0x24,   /* bDescriptorType: CS_INTERFACE */ 
  0x06,   /* bDescriptorSubtype: Union func desc */ 
  0x00,   /* bMasterInterface: Communication class interface */ 
  0x01,   /* bSlaveInterface0: Data Class Interface */ 
 
  /*Endpoint 2 Descriptor*/ 
  0x07,                                                   /* bLength: Endpoint Descriptor size */ 
  USB_ENDPOINT_DESCRIPTOR_TYPE,   /* bDescriptorType: Endpoint */ 
  0x82,                                          /* bEndpointAddress */ 
  0x03,                                                   /* bmAttributes: Interrupt */ 
  LOBYTE(CDC_CMD_PACKET_SZE),          /* wMaxPacketSize: */ 
  HIBYTE(CDC_CMD_PACKET_SZE), 
#ifdef USE_USB_OTG_HS 
  0x10,                                                   /* bInterval: */ 
#else 
  0xFF,                                                   /* bInterval: */ 
#endif /* USE_USB_OTG_HS */ 
   
  /*Data class interface descriptor*/ 
  0x09,   /* bLength: Endpoint Descriptor size */ 
  USB_INTERFACE_DESCRIPTOR_TYPE,  /* bDescriptorType: */ 
  0x01,   /* bInterfaceNumber: Number of Interface */ 
  0x00,   /* bAlternateSetting: Alternate setting */ 
  0x02,   /* bNumEndpoints: Two endpoints used */ 
  0x0A,   /* bInterfaceClass: CDC */ 
  0x00,   /* bInterfaceSubClass: */ 
  0x00,   /* bInterfaceProtocol: */ 
  0x00,   /* iInterface: */ 
 
  /*Endpoint OUT Descriptor*/ 
  0x07,   /* bLength: Endpoint Descriptor size */ 
  USB_ENDPOINT_DESCRIPTOR_TYPE,          /* bDescriptorType: Endpoint */ 
  0x01,                                                 /* bEndpointAddress */ 
  0x02,                                                          /* bmAttributes: Bulk */ 
  LOBYTE(CDC_DATA_MAX_PACKET_SIZE),  /* wMaxPacketSize: */ 
  HIBYTE(CDC_DATA_MAX_PACKET_SIZE), 
  0x00,                                                          /* bInterval: ignore for Bulk transfer */ 
   
  /*Endpoint IN Descriptor*/ 
  0x07,   /* bLength: Endpoint Descriptor size */ 
  USB_ENDPOINT_DESCRIPTOR_TYPE,          /* bDescriptorType: Endpoint */ 
  0x81,                                                 /* bEndpointAddress */ 
  0x02,                                                          /* bmAttributes: Bulk */ 
  LOBYTE(CDC_DATA_MAX_PACKET_SIZE),  /* wMaxPacketSize: */ 
  HIBYTE(CDC_DATA_MAX_PACKET_SIZE), 
  0x00,                                                           /* bInterval: ignore for Bulk transfer */ 
 
 /******** /IAD descriptor *******/ 
  0x08, /* bLength */ 
  0x0B, /* bDescriptorType */ 
  0x02, /* bFirstInterface */ 
  0x02, /* bInterfaceCount */ 
  0x01, /* bFunctionClass */ 
  0x00, /* bFunctionSubClass */ 
  0x00, /* bFunctionProtocol */ 
  0x00, /* iFunction (Index of string descriptor describing this function) */ 
 
/*************************************AUDIO**************************************************/ 
/*************************************AUDIO**************************************************/ 
   
  /* USB Speaker Standard interface descriptor */ 
  0x09,                          /* bLength */ 
  USB_INTERFACE_DESCRIPTOR_TYPE,                  /* bDescriptorType */ 
  0x02,                                                           /* bInterfaceNumber */ 
  0x00,                                                           /* bAlternateSetting */ 
  0x00,                                                           /* bNumEndpoints */ 
  USB_DEVICE_CLASS_AUDIO,                          /* bInterfaceClass */ 
  AUDIO_SUBCLASS_AUDIOCONTROL,                  /* bInterfaceSubClass */ 
  AUDIO_PROTOCOL_UNDEFINED,                   /* bInterfaceProtocol */ 
  0x00,                                                           /* iInterface */ 
  /* 09 byte*/ 
   
  /* USB Speaker Class-specific AC Interface Descriptor */ 
  0x09,                          /* bLength */ 
  AUDIO_INTERFACE_DESCRIPTOR_TYPE,          /* bDescriptorType */ 
  AUDIO_CONTROL_HEADER,                           /* bDescriptorSubtype */ 
  0x00,            /* 1.00 */                          /* bcdADC */ 
  0x01, 
  0x27,                                                           /* wTotalLength = 39*/ 
  0x00, 
  0x01,                                                           /* bInCollection */ 
  0x01,                                                           /* baInterfaceNr */ 
  /* 09 byte*/ 
   
  /* USB Speaker Input Terminal Descriptor */ 
  0x0C,          /* bLength */ 
  AUDIO_INTERFACE_DESCRIPTOR_TYPE,          /* bDescriptorType */ 
  AUDIO_CONTROL_INPUT_TERMINAL,           /* bDescriptorSubtype */ 
  0x01,                                                           /* bTerminalID */ 
  0x01,                                                           /* wTerminalType AUDIO_TERMINAL_USB_STREAMING   0x0101 */ 
  0x01, 
  0x00,                                                           /* bAssocTerminal */ 
  0x01,                                                           /* bNrChannels */ 
  0x00,                                                           /* wChannelConfig 0x0000        Mono */ 
  0x00, 
  0x00,                                                           /* iChannelNames */ 
  0x00,                                                           /* iTerminal */ 
  /* 12 byte*/ 
   
  /* USB Speaker Audio Feature Unit Descriptor */ 
  0x09,                                                           /* bLength */ 
  AUDIO_INTERFACE_DESCRIPTOR_TYPE,          /* bDescriptorType */ 
  AUDIO_CONTROL_FEATURE_UNIT,                  /* bDescriptorSubtype */ 
  AUDIO_OUT_STREAMING_CTRL,                   /* bUnitID */ 
  0x01,                                                           /* bSourceID */ 
  0x01,                                                           /* bControlSize */ 
  AUDIO_CONTROL_MUTE,                                  /* bmaControls(0) */ 
  0x00,                                                           /* bmaControls(1) */ 
  0x00,                                                           /* iTerminal */ 
  /* 09 byte*/ 
   
  /*USB Speaker Output Terminal Descriptor */ 
  0x09,    /* bLength */ 
  AUDIO_INTERFACE_DESCRIPTOR_TYPE,          /* bDescriptorType */ 
  AUDIO_CONTROL_OUTPUT_TERMINAL,                  /* bDescriptorSubtype */ 
  0x03,                                                           /* bTerminalID */ 
  0x01,                                                           /* wTerminalType        0x0301*/ 
  0x03, 
  0x00,                                                           /* bAssocTerminal */ 
  0x02,                                                           /* bSourceID */ 
  0x00,                                                           /* iTerminal */ 
  /* 09 byte*/ 
   
  /* USB Speaker Standard AS Interface Descriptor - Audio Streaming Zero Bandwith */ 
  /* Interface 1, Alternate Setting 0                                                                                        */ 
  0x09,        /* bLength */ 
  USB_INTERFACE_DESCRIPTOR_TYPE,                  /* bDescriptorType */ 
  0x03,                                                           /* bInterfaceNumber */ 
  0x00,                                                           /* bAlternateSetting */ 
  0x00,                                                           /* bNumEndpoints */ 
  USB_DEVICE_CLASS_AUDIO,                          /* bInterfaceClass */ 
  AUDIO_SUBCLASS_AUDIOSTREAMING,                  /* bInterfaceSubClass */ 
  AUDIO_PROTOCOL_UNDEFINED,                   /* bInterfaceProtocol */ 
  0x00,                                                           /* iInterface */ 
  /* 09 byte*/ 
   
  /* USB Speaker Standard AS Interface Descriptor - Audio Streaming Operational */ 
  /* Interface 1, Alternate Setting 1                                                                                  */ 
  0x09,        /* bLength */ 
  USB_INTERFACE_DESCRIPTOR_TYPE,                  /* bDescriptorType */ 
  0x03,                                                           /* bInterfaceNumber */ 
  0x01,                                                           /* bAlternateSetting */ 
  0x01,                                                           /* bNumEndpoints */ 
  USB_DEVICE_CLASS_AUDIO,                          /* bInterfaceClass */ 
  AUDIO_SUBCLASS_AUDIOSTREAMING,                  /* bInterfaceSubClass */ 
  AUDIO_PROTOCOL_UNDEFINED,                   /* bInterfaceProtocol */ 
  0x00,                                                           /* iInterface */ 
  /* 09 byte*/ 
   
  /* USB Speaker Audio Streaming Interface Descriptor */ 
  0x07,        /* bLength */ 
  AUDIO_INTERFACE_DESCRIPTOR_TYPE,          /* bDescriptorType */ 
  AUDIO_STREAMING_GENERAL,                          /* bDescriptorSubtype */ 
  0x01,                                                           /* bTerminalLink */ 
  0x01,                                                           /* bDelay */ 
  0x01,                                                           /* wFormatTag AUDIO_FORMAT_PCM  0x0001*/ 
  0x00, 
  /* 07 byte*/ 
   
  /* USB Speaker Audio Type III Format Interface Descriptor */ 
  0x0B,                                                           /* bLength */ 
  AUDIO_INTERFACE_DESCRIPTOR_TYPE,          /* bDescriptorType */ 
  AUDIO_STREAMING_FORMAT_TYPE,                  /* bDescriptorSubtype */ 
  AUDIO_FORMAT_TYPE_III,                                  /* bFormatType */  
  0x02,                                                           /* bNrChannels */ 
  0x02,                                                           /* bSubFrameSize :  2 Bytes per frame (16bits) */ 
  16,                                                                  /* bBitResolution (16-bits per sample) */  
  0x01,                                                           /* bSamFreqType only one frequency supported */  
  SAMPLE_FREQ(USBD_AUDIO_FREQ),           /* Audio sampling frequency coded on 3 bytes */ 
  /* 11 byte*/ 
   
  /* Endpoint 1 - Standard Descriptor */ 
  0x09,          /* bLength */ 
  USB_ENDPOINT_DESCRIPTOR_TYPE,           /* bDescriptorType */ 
  0x02,                                           /* bEndpointAddress 1 out endpoint*/ 
  USB_ENDPOINT_TYPE_ISOCHRONOUS,                  /* bmAttributes */ 
  AUDIO_PACKET_SZE(USBD_AUDIO_FREQ),          /* wMaxPacketSize in Bytes (Freq(Samples)*2(Stereo)*2(HalfWord)) */ 
  0x01,                                                           /* bInterval */ 
  0x00,                                                           /* bRefresh */ 
  0x00,                                                           /* bSynchAddress */ 
  /* 09 byte*/ 
   
  /* Endpoint - Audio Streaming Descriptor*/ 
  0x07,        /* bLength */ 
  AUDIO_ENDPOINT_DESCRIPTOR_TYPE,          /* bDescriptorType */ 
  0x02,                          /* bDescriptor */ 
  0x00,                                                           /* bmAttributes */ 
  0x00,                                                           /* bLockDelayUnits */ 
  0x00,                                                           /* wLockDelay */ 
  0x00, 
  /* 07 byte*/ 
} 
 
5. stm usb audio 显示感叹号是因为配置描述符问题吗还是电脑哪里需要设置?为什么插入usb一次之后再插入不再显示stm usb audio ?  
 
期待高手指点!!! 
 |