Forum: Mikrocontroller und Digitale Elektronik stm32 + virtual com port datenübertragungsfehler


von Julian (Gast)


Lesenswert?

Hi!
Ich habe das Beispiel für den virtuellen Com Port von der Seite hier 
http://www.mikrocontroller.net/articles/STM32_USB-FS-Device_Lib#Aubau_der_Beispielimplmentierung 
so implementiert, dass ich den Puffer nur sende. Allerdings kommt davon 
nicht wirklich alles an. Sende ich z.b. abwechselnd 2 Puffer mit 64 Byte 
ist die Reihenfolge beim Empfänger willkürlich und es gibt auch 
Überlappungen. Ich vermute mal, dass der µC zu schnell sendet. 
Allerdings half ein while (count_in != 0) {} nach SetEPTxValid(ENDP1); 
dabei nicht. Kann mir jemand irgend einen Tipp geben wonach ich hier 
suchen muss? Ich bin für jede Hilfestellung dankbar!

VG Julian

von Oliver J. (skriptkiddy)


Lesenswert?

Zeig bitte deinen Code, denn an dem liegt es mit Sicherheit.

Edit: Pufferst du das auch richtig?

Gruß Oliver

von Julian (Gast)


Lesenswert?

Erstmal danke für deine Antwort. Der Code ist
1
if (bDeviceState == CONFIGURED) {
2
      for (i = 0; i < 4096; i++) {        
3
          
4
          sprintf(SendBuffer,"123456789012345678901234567890123456789012345678901234567890123\n");
5
6
          // Write the data to the USB endpoint
7
          USB_SIL_Write(EP1_IN, SendBuffer, 64);
8
          SetEPTxValid(ENDP1);
9
          while (count_in != 0) {}
10
          sprintf(SendBuffer,"098654321098654321098654321098654321098654321098654321098765432\n");          
11
12
          // Write the data to the USB endpoint
13
          USB_SIL_Write(EP1_IN, SendBuffer, 64);
14
          SetEPTxValid(ENDP1);
15
          while (count_in != 0) {}
16
17
      }
18
      
19
      SetEPRxValid(ENDP3);
20
      count_out = 0;
21
      
22
}

Die Variablen sind die aus dem Beispiel. Puffern würde ich gerne, aber 
Doku hab ich bisher leider keine gefunden. Normal müsste es ja auch 
reichen zu warten, bis die Daten gesendet wurden.

von Julian (Gast)


Lesenswert?

Bevor jemand anderes danach sucht: Man muss count_in selber setzten 
(scheint beliebig zu sein), da es nur auf 0 gesetzt wird. Im Gegensatz 
zu count_out wird also nichts automatisch gesetzt, was man normal 
erwarten könnte. Danach ging also alles bei mir.

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.