STM32F103-USB-CDC von W.S.

Gast #5080000
Hallo W.S.

du hattest hier mal USB-CDC Code für einen STM32F103 gepostet. Das habe 
ich mal probiert mit diesm Board:
http://www.ebay.de/itm/STM32-STM32f103C8T6-ST-ARM-32-bit-Cortex-M3-64kB-312-/221961031950?hash=item33ade8910e:g:ugMAAOSwcBhWZA1K
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.
#5080066
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.
Gast #5080098
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.
Gast #5080119
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.
Gast #5080171
STM Apprentice schrieb im Beitrag #5080114:
> 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
}
Gast #5080185
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.