STM32: Virtual Serialport liefert Daten mehrfach

OP #1692963
Lesenswert?
• ▲
▼
Hi,

ich versuche einen Virtual Serial Port mit dem STM32-USB zum Laufen zu 
bringen.

Von µC zum PC Daten übertragen ist überhaupt kein Problem.

In der anderen Richtung empfängt der µC aber zeichen die ich im 
Terminalprogramm eingebe doppelt bis 5 fach.

Ich habe das von ST-Mitgelieferte Beispiel etwas angepasst. Es sollen 
einfach Zeichen vom PC gelesen werden bis ein CR gesendet wird, dann 
sollen die bis dahin empfangenen Daten wieder an den PC zurückgeschickt 
werden.

Statt "123456789" bekomme ich aber z.B. "11112233456678899" zurück.

Habt Ihr ne Idee? Stehe gerade auf dem Schlauch

count_out : die Anzahl über USB empfange Zeichen in buffer_out.
1
  uint8_t buffer[128];
2
  uint8_t SendBuffer[128];
3

4
int main(void)
5
{
6
  
7
  Set_System();
8
  Set_USBClock();
9
  USB_Interrupts_Config();
10
  USB_Init();
11

12
  
13
  int bufferPos =0;
14
  while (1)
15
  {
16
    if ((count_out != 0) && (bDeviceState == CONFIGURED))
17
    {
18
      for(int i = 0; i < count_out;i++)
19
      {
20
        buffer[bufferPos] = buffer_out[i];
21
        if( (bufferPos>126) || (buffer_out[i] == 0x0d))
22
        {
23

24
          /* Write the data to the USB endpoint */
25
          USB_SIL_Write(EP1_IN, buffer, bufferPos+1);
26
          SetEPTxValid(ENDP1);;
27

28
          bufferPos =0;
29
          break;
30

31
        }
32
        bufferPos++;
33

34
      }
35
      SetEPRxValid(ENDP3);
36
      count_out = 0;
37

38
    }
39
  }
40
}

Danke & Gruß
Tom
OP #1693009
Lesenswert?
• ▲
▼
ok,hier kommt der Teil.
1
extern __IO uint32_t count_out;
2
extern uint8_t buffer_out[VIRTUAL_COM_PORT_DATA_SIZE];
3

4

5
void EP3_OUT_Callback(void)
6
{
7
  /* Get the received data buffer and update the counter */
8
  count_out = USB_SIL_Read(EP3_OUT, buffer_out);
9
    
10
#ifndef STM32F10X_CL
11
  /* Enable the receive of data on EP3 */
12
//  SetEPRxValid(ENDP3);
13
#endif /* STM32F10X_CL */
14
}

Gruß
Tom

Antwort schreiben

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.

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.