Forum: Mikrocontroller und Digitale Elektronik STM32 Virtual USB: Device weg nach Datensenden


von Lasse S. (cowz) Benutzerseite


Lesenswert?

Hallo,

ich habe gerade den Artikel STM32 USB-FS-Device Lib gelesen und das 
Beispiel ausprobiert.

Das ganze klappt (nachdem ich die RCC-Initialisierungen wieder eingebaut 
hatte) soweit, dass sich das Gerät enummeriert und im Gerätemanager 
(Win7) angezeigt wird. Per HTerm kann ich auch den Port öffnen.

Sende ich aber Daten, verschwindet das Gerät aus dem Gerätemanager. Und 
ich bekomme (natürlich) auch keinen String zurückgeschickt.

Hat jemand eine Idee, woran das liegen könnte?


Sollten Daten/Code/WhatEver fehlen, reich ich's gerne nach. Aber ich hab 
eigentlich nur den Code aus dem Artikel benutzt.

Viele Grüße
Lasse

PS: Kennt jemand ein gutes (kostenloses) Programm, mit dem man den 
USB-Verkehr mitschneiden kann um zu gucken, ob da irgendwelche 
Fehlermeldungen auftreten, die Windows mir nicht mitteilt?

von Lasse S. (cowz) Benutzerseite


Lesenswert?

Okay, Fehlerpräzision geglückt:

Er springt in der usb/main Funktion in der Zeile
1
buffer[bufferPos] = buffer_out[i];
In einen Hartfault.

Ideen, woran das liegt?

Gruß
Lasse

PS: Das Disconnecten lag an meinem Hardfault-Handler...

von Christoph B. (christophbudelmann) Benutzerseite


Lesenswert?

Lasse S. schrieb:
> Okay, Fehlerpräzision geglückt:
>
> Er springt in der usb/main Funktion in der Zeile
>
1
buffer[bufferPos] = buffer_out[i];
> In einen Hartfault.
>
> Ideen, woran das liegt?

Poste mal deine ganze main, eigentlich funktioniert der ST-Code recht 
gut.

An USB-Tools kann ich USBTrace empfehlen, siehe

http://www.sysnucleus.com/

Es gibt eine beschränkte kostenlose Version, die irgendwann abläuft. Man 
kann sie aber wieder neu installieren.

von Lasse S. (cowz) Benutzerseite


Lesenswert?

Hi,

der Code ist der gleiche wie im Artikel.

Es funktioniert, sobald ich die Variablen innerhalb der main deklariere. 
Also diese Änderung:
1
  uint8_t buffer[128];
2
  uint8_t SendBuffer[128];
3
4
int usb_main(void)
5
{
1
int usb_main(void)
2
{
3
4
  uint8_t buffer[128];
5
  uint8_t SendBuffer[128];

mache.

Anscheinend mag der GCC das nicht, wenn solche Variablen global aber nur 
innerhalb einer Code-Datei und in keinem Header vorkommen?

Ich bin so also glücklich und es funktioniert :) Danke trotzdem :)

Gruß
Lasse

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.