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


von stmusb (Gast)


Lesenswert?

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.

von Jim M. (turboj)


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)


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)


Lesenswert?


von STM Apprentice (Gast)


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)


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)


Lesenswert?

stmusb schrieb:
> Ich werde trotzdem bei der Assembler Variante bleiben

Dann hast du es nicht vertsanden. Gratuliere.

von STM Apprentice (Gast)


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)


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)


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


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)


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.

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.