mikrocontroller.net

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


Autor: Lasse S. (cowz) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Lasse S. (cowz) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Okay, Fehlerpräzision geglückt:

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

Ideen, woran das liegt?

Gruß
Lasse

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

Autor: Christoph Budelmann (Firma: Budelmann Elektronik GmbH) (christophbudelmann) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lasse S. schrieb:
> Okay, Fehlerpräzision geglückt:
>
> Er springt in der usb/main Funktion in der Zeile
>
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.

Autor: Lasse S. (cowz) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

der Code ist der gleiche wie im Artikel.

Es funktioniert, sobald ich die Variablen innerhalb der main deklariere. 
Also diese Änderung:
  uint8_t buffer[128];
  uint8_t SendBuffer[128];

int usb_main(void)
{
int usb_main(void)
{

  uint8_t buffer[128];
  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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.