STM32 Clase de audio USB no reconocida como dispositivo de audio

2

Estoy aprendiendo sobre las clases de USB usando STM32F429ZI (en el tablero Discovery). Ya intenté implementar la clase de dispositivo de comunicaciones (CDC) y funcionó bien, ahora intenté hacer una prueba simple con la clase de dispositivo de audio.
Estoy usando CubeMX para generar un proyecto, elegí la clase de dispositivo de audio allí, creó archivos de biblioteca predeterminados. uVision cumplido sin errores ni advertencias. Presenté mi MCU y en el administrador de dispositivos se ve así:

DespuésdeaprendersobreCDCUSB,supequenecesitabaaumentarStack_SizeyHeap_Sizeenelarchivodeinicio.Lointenté,nadacambia.TambiénencontréalgunosconsejosparadisminuirHS_MAX_PACKET_SIZE,aúnsinefecto.

Bueno,laspreguntasson:

  1. ¿PorquéestábajoelpuertoCOM?Inclusosialgunasconfiguracionesnosoncorrectas,¿nodeberíaestarendispositivosdesonido?
  2. ¿Quéestámal?¿Cómohacerquefuncione?Seríabuenohacerquesereconozcacomodispositivodeaudio,nadaespecial.

Elerroreneldispositivoessimplementegenérico"Este dispositivo no puede iniciarse".

EDIT1
Enrealidad,noséquétipodecódigoadjuntar,yaquetodosegeneraconCubeMX.Puedodarcualquierfragmentoapetición,siesnecesario.
DescripcióndeldispositivoUSBgeneradoporCubeMX.

#defineUSBD_VID1155#defineUSBD_LANGID_STRING1033#defineUSBD_MANUFACTURER_STRING"STMicroelectronics"
#define USBD_PID_HS     22336
#define USBD_PRODUCT_STRING_HS     "STM32 Audio Class"
/* USER CODE BEGIN SERIALNUMBER_STRING_HS */
#define USBD_SERIALNUMBER_STRING_HS     "00000000001A"
/* USER CODE END SERIALNUMBER_STRING_HS */
#define USBD_CONFIGURATION_STRING_HS     "AUDIO Config"
#define USBD_INTERFACE_STRING_HS     "AUDIO Interface"

#define USB_SIZ_BOS_DESC            0x0C

EDIT 2
Encontré que USBD_AUDIO_Init () no se llama a ninguna parte por defecto y este puede ser el problema. Pero tengo problemas para entender cómo puedo llamarlo cuando está "uint8_t estático", por lo que básicamente no se puede llamar desde main. Aquí está la descripción:

usbd_audio.c

/**
  * @brief  USBD_AUDIO_Init
  *         Initialize the AUDIO interface
  * @param  pdev: device instance
  * @param  cfgidx: Configuration index
  * @retval status
  */
static uint8_t  USBD_AUDIO_Init (USBD_HandleTypeDef *pdev, 
                               uint8_t cfgidx)
{
  bunch of code
}
    
pregunta ScienceSamovar

4 respuestas

2

¿Has probado esta función?

USBD_Init(USBD_HandleTypeDef *pdev, USBD_DescriptorsTypeDef *pdesc, uint8_t id)

La documentación de esta biblioteca se encuentra Aquí , pero no es genial. En general, la HAL le brinda algunas funciones y, si las usa correctamente, suceden muchas otras cosas detrás de escena. Tu USBD_AUDIO_Init puede ser una de esas cosas.

    
respondido por el Daniel
1

La casilla USBD_malloc() en el USBD_AUDIO_Init() asigna la memoria solicitada. USBD_AUDIO_HandleTypeDef contiene:

buffer[AUDIO_TOTAL_BUF_SIZE]
AUDIO_TOTAL_BUF_SIZE = AUDIO_OUT_PACKET * AUDIO_OUT_PACKET_NUM
AUDIO_OUT_PACKET_NUM = 80
AUDIO_OUT_PACKET = (22100 * 2 * 2)/1000

El tamaño total de la asignación de memoria es de aproximadamente 7100 bytes. Establecí el tamaño del montón en el proyecto CubeMx 10KB (2800h). Después de eso, windows (yo uso win10) reconoce stm32f4 como dispositivo de audio.

    
respondido por el rawaaw
0

En el administrador de dispositivos, haga clic con el botón derecho en el dispositivo del puerto COM virtual y desinstale el dispositivo. Compruebe eliminar el software del controlador para este dispositivo. Restablecer el dispositivo. Ahora Windows debería instalar el controlador para la clase de dispositivo de audio usb.

    
respondido por el davluc
0

Deberá cambiar el PID del nuevo dispositivo. O su dispositivo de audio tendrá el mismo PID que el dispositivo CDC anterior. El sistema reconocerá esos dos dispositivos como iguales entonces.

    
respondido por el SkyDriver

Lea otras preguntas en las etiquetas