Hallo Leute,
ich nutze das STM32 Discovery Board
(http://www.st.com/web/en/catalog/tools/FM116/SC959/SS1532/PF254044) um
mir die Daten der darauf befindlichen Sensoren per User USB an den PC zu
senden. Dafür habe ich das "VirtualComport_Loopback" Beispiel aus der
STM32_USB-FS-Device_Lib_V4.0.0 auf meine Problemstellung adaptiert.
Leider will der Code aber nicht wie gedacht funktionieren.
main:
Ich habe das Beispiel so abgeändert das immer nur die Sensordaten
rausgesendet werden. Allerdings werden diese teilweise falsch
ausgegeben:
Empfangene Daten:
-329.00,+10.00,-328.00,+12.00,-334.00,+17.00,-329.00,+11.00,-329.00,+13.
00,+1014.00<\n>
<\n>
+15.00,+1009.00<\n>
<\n>
+12.00,+1012.00<\n>
<\n>
+14.00,+1008.00<\n>
Es scheint mir nach einem Timing Problem, kennt jemand so ein Problem
oder hat jemand einen Code der meine Problemstellung erfüllt?
>Allerdings werden diese teilweise falsch ausgegeben:
Woher denkst du soll jemand wissen welche Ausgabe du
ERWARTET hast? Was ist denn jetzt falsch an der Ausgabe?
...nein das ist nicht die Lösung. Vorallem sehr kurzsichtig gedacht. Am
besten wäre es wenn sich hier Leute äussern die die
STM32_USB-FS-Device_Lib_V4.0.0 einsetzen und sich damit auskennen.
>...nein das ist nicht die Lösung.
Schade.
> Vorallem sehr kurzsichtig gedacht.
Nö, logische Schlussfolgerung. Wenn packet_sent Null ist
wird nichts gesendet. Aus, Basta.
Patrick L. schrieb:> Am> besten wäre es wenn sich hier Leute äussern die die> STM32_USB-FS-Device_Lib_V4.0.0 einsetzen und sich damit auskennen
mit solchen Äuserungen wäre ich vorsichtig
und holger hat sehr wahrscheinlich recht
versuch mal das hier :
Hab die oben angegebene Codeänderung mal ausgetestet. Resultat ist das
dann gar nichts mehr empfangen wird. Ich hab habe packet_sent auch
pauschal ausgeschlossen, da ich ja mitunter Daten empfange, diese dann
aber nicht zwingend vollständig sind (siehe oben).
Für mich sieht das nach einem Timing Problem aus. Vllt. kann man die
Sachen einfach nicht so schnell hintereinander raussenden und man müsste
eine Wartezeit zwischen den USB_SendData Aufrufen einfügen?
Der ursprüngliche Code von STM sieht so aus:
Dort werden die Daten die man vom PC an das Eval Board sendet direkt
wieder zurück gesendet. Was auch ohne Probleme Funktioniert hat.
Die CDC_Send_DATA Funktion habe ich komnplett von STM übernommen.
Patrick L. schrieb:> Ich hab habe packet_sent auch> pauschal ausgeschlossen, da ich ja mitunter Daten empfange, diese dann> aber nicht zwingend vollständig sind
und da liegt halt dein Denkfehler
du hast eine IF-Abfrage vor dem eigentlichen senden
1
if(packet_sent == 1)
solange diese nicht erfüllt ist, kannst du die Funktion "USB_SendData"
aufrufen sooft du willst...am PC wird nichts ankommen
(das sieht dann halt so aus als ob etwas fehlen würde)
hast du den Quellcode von ST 1:1 übernommen ?
dann müsste im Main.c das hier stehen :
1
uint32_t packet_sent=1;
was du auch probieren kannst ist alles in einem Rutsch zu senden :
dann wird halt u.U. der komplett String einmal nicht gesendet
(Vorsicht "bufffer" muss groß genug sein)
oder du machst (wie du schon geschrieben hast)
eine kleine Pause zwischen jedem Sendeaufruf
Es klappt jetzt, dazu habe ich jetzt einfach die if(packet_sent == 1)
Abfrage aus void USB_SendData(char *data) komplett entfernt.
Durch einfügen einer Wartezeit von 1ms nach USB_SendData() klappt auch
das raussenden ohne Probleme.