Dispositivo USB STM32: error en la solicitud del descriptor del dispositivo

1

Estoy usando STM32F7-45 en mi propia placa, y estoy tratando de programar un dispositivo USB (probé el COM virtual y el HID, por separado).

Pero después de conectarlo a la PC, se detecta (después de un tiempo) con el error " Dispositivo desconocido (error en la solicitud del descriptor del dispositivo) ".

Eléctricamente (PCB):
Creo que la PCB no es un error aquí, solo tengo D + y D- pistas cortas desde el conector a la unidad de usuario y eso es todo.
Tengo un pull-up 1.5k (lo intenté con y sin él), pero ni siquiera es necesario en STM32. Tengo conexión de verificación y un cable y estoy seguro de que se conecta.

Código:
Estoy usando el código generado por HAL y STM32CubeMx combinado con mi proyecto. Generalmente los programas se congelan.

1) Después de ejecutar la línea (del código de biblioteca) USBx->GAHBCFG |= USB_OTG_GAHBCFG_GINT; . Lo sé, ya que intenté imprimir antes y después de esa línea y solo se imprimen las primeras impresiones printf (). No entiendo cómo el programa puede atascarse allí.
De todos modos, si deshabilito la detección de VBUS, entonces el programa no se queda atascado allí y todo MX_USB_DEVICE_Init termina.

2) Pero entonces, el programa ejecuta algunos ciclos (por ejemplo, se imprimirá "listo" y encendió el LED) y luego se congela. Completamente. Este LED debería parpadear en un bucle infinito, pero no lo hace. Tengo otro LED para habilitar en todos los controladores de errores (como falla dura, etc.) y parece que el programa no va allí (ya que el LED está apagado), así que no entiendo dónde se atasca.

  • Después de COM virtual, probé HID pero fue en vano. Me da el mismo comportamiento.
  • Si enciendo la placa desde el cargador (no desde la PC), el programa no se bloquea.
pregunta zupazt3

2 respuestas

1

He resuelto el problema. No sé cuál era el problema, pero hice otro proyecto y ahora todo funciona perfectamente.

Para hacer que este post sea un poco más valioso para otros que lo pueden encontrar: al principio usé un programa generado a través de STM32CubeMx, y tiene los problemas que se describen aquí. Me sugirieron descargar STM32F7Cube (Cube no CubeMX) y usar los ejemplos de allí. Hice eso y todo está funcionando.

    
respondido por el zupazt3
0

Básicamente, todo esto significa que tienes un dispositivo USB muerto. Su dispositivo STM32 tiene un pull-up D +, por lo que una PC reconoce la conexión. Sin embargo, cuando el host intenta obtener el descriptor del dispositivo, es probable que su dispositivo no responda en absoluto porque no tiene un código que se ejecuta correctamente dentro de su STM32. Generalmente el programa debería ejecutarse y no debería congelarse. Si deshabilita la detección de VBUS (que es la señal principal para STM de que un host USB está conectado), es probable que su programa no haga nada, por eso al menos termina la inicialización. Por lo tanto, debe depurar su código STM y comprender por qué se congela.

También es posible que su conexión de hardware sea incorrecta. Se recomienda encarecidamente obtener un diseño de referencia de STM y conectar su hardware exactamente como en el panel de referencia.

    
respondido por el Ale..chenski

Lea otras preguntas en las etiquetas