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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren