Ich verwende STM32F7-45 auf meinem eigenen Board und versuche, ein USB-Gerät zu programmieren (ich habe virtuelles COM und HID separat ausprobiert).
Aber nach dem Anschließen an den PC wird es (nach einer Weile) mit dem Fehler „ Unbekanntes Gerät (Gerätebeschreibungsanforderung fehlgeschlagen) “ erkannt.
Elektrisch (PCB):
Ich denke, dass PCB hier kein Fehler ist - ich habe nur D + und D- kurze Spuren vom Stecker zum uC und das ist alles.
Ich habe einen Pull-up 1.5k (ich habe es mit und ohne versucht), aber er wird in STM32 nicht einmal benötigt. Ich habe die Verbindung und ein Kabel überprüft und bin mir sicher, dass es eine Verbindung herstellt.
Code:
Ich verwende HAL- und STM32CubeMx-generierten Code, der mit meinem Projekt zusammengeführt wurde. Im Allgemeinen friert Programme ein.
1) Nach dem Ausführen von Zeile (aus dem Bibliothekscode) USBx->GAHBCFG |= USB_OTG_GAHBCFG_GINT;
. Ich weiß das, da ich versucht habe, vor und nach dieser Zeile zu drucken, und nur zuerst printf () druckt. Ich verstehe nicht, wie das Programm dort hängen bleiben kann.
Wie auch immer, wenn ich die VBUS-Erkennung deaktiviere, bleibt das Programm dort nicht hängen und das Ganze MX_USB_DEVICE_Init
endet.
2) Aber dann führt das Programm einige Zyklen aus (z. B. druckt es "fertig" und leuchtet die LED) und friert danach ein. Vollständig. Diese LED sollte in einer Endlosschleife blinken, tut es aber nicht. Ich habe eine andere LED, die in allen Fehlerbehandlern aktiviert werden muss (wie harte Fehler usw.), und es scheint, dass das Programm nicht dorthin geht (da die LED aus ist), also verstehe ich nicht, wo es hängen bleibt.
Ich habe das Problem gelöst. Ich weiß nicht, was das Problem war, aber ich habe ein anderes Projekt durchgeführt und jetzt funktioniert alles perfekt.
Um diesen Beitrag für andere, die ihn vielleicht finden, etwas wertvoller zu machen: Ich habe am Anfang ein Programm verwendet, das über STM32CubeMx generiert wurde - und es hat die hier beschriebenen Probleme. Mir wurde vorgeschlagen, STM32F7Cube (Cube nicht CubeMX) herunterzuladen und die Beispiele von dort zu verwenden. Das habe ich gemacht und alles funktioniert.
Im Grunde bedeutet dies, dass Sie ein totes USB-Gerät haben. Ihr STM32-Gerät verfügt über einen D+-Pullup, sodass ein PC die Verbindung erkennt. Wenn der Host jedoch versucht, den Gerätedeskriptor abzurufen, antwortet Ihr Gerät wahrscheinlich überhaupt nicht , da Sie keinen korrekt ausgeführten Code in Ihrem STM32 haben. Generell sollte das Programm laufen und nicht einfrieren. Wenn Sie die VBUS-Erkennung deaktivieren (was das Hauptsignal für STM ist, dass ein USB-Host angeschlossen ist), tut Ihr Programm wahrscheinlich nichts, deshalb beendet es zumindest die Initialisierung. Sie müssen also Ihren STM-Code debuggen und verstehen, warum er einfriert.
Es ist auch möglich, dass Ihr Hardwareanschluss falsch ist. Es wird dringend empfohlen, ein STM-Referenzdesign zu erhalten und Ihre Hardware genau wie auf der Referenzplatine zu verdrahten.
0___________
freezes
? Was bedeutet esBut then, program executes few cycles
? Zyklen von was? 'it will print "done" and lit the LED
' - über gerade initialisierten USB?. Eigentlich ist Ihre Beschreibung alles andere als technisch oder verständlich.zupazt3
0___________
I have ST-Link
- also überprüfe, wo du landest. Wenn Sie den Debugger und das Schreiben haben,probably jumps somewhere
zeigt sich, dass Ihr Debugging-Aufwand bei weitem nicht ausreichend war.zupazt3
Wurzel