Estoy usando STM32F7-45 en mi propia placa y estoy tratando de programar un dispositivo USB (probé COM virtual y HID, por separado).
Pero después de conectarlo a la PC, se detecta (después de un tiempo) con el error " Dispositivo desconocido (falló la solicitud del descriptor del dispositivo) ".
Eléctricamente (PCB):
creo que la PCB no es un error aquí; solo tengo pistas cortas D+ y D- desde el conector hasta el uC y eso es todo.
Tengo un pull-up 1.5k (lo probé con y sin él), pero ni siquiera es necesario en STM32. He comprobado la conexión y un cable y estoy seguro de que se conecta.
Código:
estoy usando código generado por HAL y STM32CubeMx fusionado con mi proyecto. Generalmente los programas se congelan.
1) Después de ejecutar la línea (del código de la biblioteca) USBx->GAHBCFG |= USB_OTG_GAHBCFG_GINT;
. Lo sé, ya que intenté imprimir antes y después de esa línea y solo se imprime primero printf(). No entiendo cómo el programa puede atascarse allí.
De todos modos, si desactivo la detección de VBUS, el programa no se atasca allí y todo MX_USB_DEVICE_Init
termina.
2) Pero luego, el programa ejecuta algunos ciclos (por ejemplo, imprimirá "hecho" y encenderá 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 fallas graves, etc.) y parece que el programa no va allí (ya que el LED está apagado), así que no entiendo dónde se atasca.
He resuelto el problema. No sé cuál fue el problema, pero hice otro proyecto y ahora todo funciona perfectamente.
Para hacer que esta publicación sea un poco más valiosa para otros que puedan encontrarla: al principio usé un programa generado a través de STM32CubeMx, y tiene los problemas descritos aquí. Me sugirieron descargar STM32F7Cube (Cube no CubeMX) y usar los ejemplos de allí. Hice eso y todo está funcionando.
Básicamente, todo esto significa que tiene 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 ejecute correctamente dentro de su STM32. Generalmente, el programa debe ejecutarse y no debe 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, es por eso que al menos finaliza la inicialización. Por lo tanto, debe depurar su código STM y comprender por qué se congela.
También es posible que la conexión de su hardware sea incorrecta. Sugeriría encarecidamente obtener un diseño de referencia STM y conectar su hardware exactamente como en la placa de referencia.
0___________
freezes
? ¿Qué significa 'But then, program executes few cycles
'? ¿Ciclos de qué? 'it will print "done" and lit the LED
' - a través de USB recién inicializado?. En realidad, su descripción está lejos de ser técnica o comprensible.zupazt3
0___________
I have ST-Link
- así que mira dónde terminas. Tener el depurador y la escrituraprobably jumps somewhere
muestra que su esfuerzo de depuración estuvo lejos de ser suficiente.zupazt3
raíz