Forum: Mikrocontroller und Digitale Elektronik STM32F103-USB-CDC von W.S.


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von stmusb (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo W.S.

du hattest hier mal USB-CDC Code für einen STM32F103 gepostet. Das habe 
ich mal probiert mit diesm Board:
Ebay-Artikel Nr. 221961031950
1.5k an D+ mache ich von Hand.

Leider endet das unter Windows in einem unbekannten USB-Gerät (Fehler 
beim festlegen der Adresse).Ich hab mal an in die Funktion OnSetup 
folgenden Debug-Code eingebaut:
1
void OnSetup (word EpCtrlStatus)
2
{ 
3
  ReadControlBlock(&CMD.SetupPacket.bmRequestType, 8);
4
  debug_printf("OnSetup 0x%x 0x%x\n", (int)CMD.SetupPacket.bRequest, (int)CMD.SetupPacket.wValue);
5
  
6
  if (IsStandardRequest())         /* wenn Type = Standard */

als Ausgabe erhalte ich:

OnSetup 0x6 0x100
OnSetup 0x5 0x16
OnSetup 0x6 0x100
OnSetup 0x5 0x17
OnSetup 0x6 0x100
OnSetup 0x5 0x18
OnSetup 0x6 0x100
OnSetup 0x5 0x19

Damit hat er meines Erachtens nach schon den Device Descriptor 
erfolgreich angefordert (0x6 0x100). Danach soll SetAdress (0x5) 
ausgeführt werden, was fehl schlägt. Das ganze wiederholt sich dann 4 
mal. Hast du eine Ahnung wie ich jetzt am besten weiter mache bei der 
Fehlereingrenzung? An der Hardware kanns ja eigentlich nicht mehr 
liegen, sonst würde er ja schon beim Device-Deskriptor meckern.

von Jim M. (turboj)


Bewertung
0 lesenswert
nicht lesenswert
Ich persönlich fand die Fehlerausgabe unter Linux via dmesg recht 
hilfreich. Das könnte man z.B. mal schnell vom USB Stick booten.

Vorsicht: Debug Ausgaben im Interrupt können Dir das Timing 
zwerschießen. Müsste bei USB eigentlich unkritisch sein, aber YMMV.

von stmusb (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Ich bin einen Schritt weiter. Zwischen dem Code von W.S. und den 
aktuellen Compilern (verwende Crossworks) liegt schon etwas Zeit. Hier 
hat der aktuellere Compiler das Nop() wohl soweit gekillt oder 
reduziert, dass das der Fehler war. Hab das jetzt mal so geändert:
1
void Nop (dword count)
2
{ 
3
  count<<=2;
4
  // Delay loop for Cortex M3 thumb2
5
  asm volatile 
6
    (
7
    // Load loop count to register
8
    " mov r3, %[loops]\n"
9
    " .balign 8\n"
10
    "loop: subs r3, #1\n"
11
    " bne loop\n\n"
12
13
    : [loops] "r" (count) // Input registers
14
    : "r3" // clobbered registers
15
    );
16
17
  // while (count) --count; 
18
}

Was ich noch vergessen habe: Danke W.S. für den Code, der doch 
wesentlich übersichtlicher ist als das was sonst so fuer den STM32F103 
im Umlauf ist.

von stmusb (Gast)


Bewertung
0 lesenswert
nicht lesenswert

von STM Apprentice (Gast)


Bewertung
0 lesenswert
nicht lesenswert
stmusb schrieb:
> Ich bin einen Schritt weiter.

Ich bin noch einen Schritt weiter:
1
void __attribute__((optimize("O0"))) void Nop (dword count)
2
{
3
.....
4
#pragma message  "unmodifiable compiler code"
5
.....
6
}

von stmusb (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Ich werde trotzdem bei der Assembler Variante bleiben, da mir das 
gefühlt stabiler ist. Nichts ist schlimmer, als wenn etwas nur mit einem 
Compiler geht und mit dem anderen nicht nur weil die Optimierung anders 
gehandhabt wird.

von STM Apprentice (Gast)


Bewertung
0 lesenswert
nicht lesenswert
stmusb schrieb:
> Ich werde trotzdem bei der Assembler Variante bleiben

Dann hast du es nicht vertsanden. Gratuliere.

von STM Apprentice (Gast)


Bewertung
0 lesenswert
nicht lesenswert
STM Apprentice schrieb:
> Ich bin noch einen Schritt weiter:

Korrektur:  Ein "void" war zuviel.
1
void __attribute__((optimize("O0"))) Nop (dword count)
2
{
3
.....
4
#pragma message  "unmodifiable compiler code"
5
.....
6
}

von Felix F. (wiesel8)


Bewertung
0 lesenswert
nicht lesenswert
Von ST selbst gibt es die USB-FS-Device Lib. Ist Compilerunabhängig und 
läuft bei mir bis jetzt auch einwandfrei.

mfg

von stmusb (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Felix F. schrieb:
> Von ST selbst gibt es die USB-FS-Device Lib. Ist Compilerunabhängig und
> läuft bei mir bis jetzt auch einwandfrei.

Hab ich auch in mehreren Projekten so gemacht. Allerdings nervt mich 
daran die STM32-Lib die ich sonst zu nichts verwende. Mit dem Code von 
W.S. bin ich diesen Kram auch noch los und alles zusammen steckt in 
einer einzigen Datei.

von Nils S. (kruemeltee) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Der Code von WS finde ich, sieht sehr praktisch aus. Gibt's dazu 
irgendwo ein Thema? Googlen am Tablet ist sehr nervig und brachte im 
ersten Moment nichts zu Tage...

von temp (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Nils S. schrieb:
> Gibt's dazu
> irgendwo ein Thema?

Nicht dass ich wüsste. Das wirft W.S. immer mal so bei Antworten in die 
Runde. Leider bleiben aber Fragen wie oben unbeantwortet. Damit kannst 
du dir die Fingerübungen sparen.

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]
  • [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.