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