Hallo miteinander Ich möchte mich ein wenig in die USB-Welt einarbeiten. Leider stellt sich dies als äusserst schwierig. Es gibt eine grosse Lib, und auch Beispiele, aber ja... Ich verwende die STM32_USB-Host-Device_Lib_V2.1.0 und möchte ein VCP zum laufen bringen. Aber ich habe bis jetzt niergnds ein lauffähiges Beispiel gesehen, dass ein wenig Licht ins Dunkle bringt (nichteinmal das Beispiel bei der Lib ist gut Dokumentiert). Kann mir jemand ein wenig auf die Sprünge helfen? MFG Patrick
Gast
#2939622
Ist zwar für LPC1xxx aber gut dokumentiert: VirtualComPort https://www.olimex.com/Products/ARM/NXP/LPC-P1343/resources/LPC-P1343_Examples.zip
Ich habe einen CooCox Beispielcode aus dem CooCox Forum für das Discovery F4. Der funktioniert tadellos: https://rapidshare.com/#!download|150p8|3892093798|STM32F407VGT6_Cdc.zip|486|0|0
Thomas Winkler schrieb: > Der funktioniert tadellos: Hallo Danke für die Antworten. Leider muss ich dir da wiedersprechen. Bei mir gibt es folgende Fehlermeldung:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
Ich weiss nicht, ob ich mich nur unendlich blöd anstelle, oder ob die Welt des USB (was mitlerweile schon in der Version 3.0 besteht und seit über 14 Jahren existiert und fast in jedem Gerät vorhanden ist) so komplex ist. http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/USER_MANUAL/CD00289278.pdf Hier wird zwar schön erklährt, was welcher Treiber macht, welche Funktionen in welchen Files anzutreffen sind und was sie in etwa machen. Aber wie ich das ganze zusammen bringe, wird nirgends erwähnt: Welche Lib, welche Files muss ich einbinden und wo muss ich welche defines setzten damit ich schlussendlich im Main die wichtigen Funktionen (Init, send, get...) nutzen kann. Als ich einmal bei einem Kollegen zugeschaut habe, wie der eine USB-Verbindung einrichtet, brauchte dieser nur das Framework einzubinden, die Defines anzupassen und noch 4-7 Funktionen im Main aufzurufen, damit alles lief. Ich selber habe das leider nie zum laufen gebracht. Also, was mache ich falsch? Welche Files muss ich wo und wie einbinden damit das ganze läuft? Und welche Defines müssen wo gemacht werden? MFG Patrick
Gast
#2940294
>Also, was mache ich falsch?
Du stellst überflüssige Fragen im Forum, anstatt die Fehlermeldungen zu
lesen.
Gast
#2940304
Es gibt 3 unabhängige USB Controller: OTG, Host, Device. Für Virtual COM Port braucht es nur USB Device also folgendes: cd_class.c : CommunicationDeviceClass : UsbCdcInit() usb_dev-descr.c : UsbStandardDeviceDescriptorStr etc. usb_hw.c : USB Device Controller : USB_ConnectRes() usb_hooks.c : USB Device Controller : USB_INTR_ENTRY_HOOK etc. usb_t9.c : USB Device Controller : UsbCoreInit() usb_buffer.c : USB Device Controller FIFO/DMA : USB_IO_Data() USB Device geht mit oder ohne DMA.
Gast
#2940478
saug dir das stm32 inemo projekt da ist ein cdc vcom source der funzt
Also ich bin mitlerweile (nach ca 3 Tagen) zum Schluss gekommen, dass die Lib von ST überhaupt nichts taugt. Ich habe kein einziges als lauffähiges Beispiel selber compilieren können, und sobald ich anfange, die Files selber nachzubauen kommen tonnenweise Fehler von der Lib, dass dies und das nicht Definiert sei und das dies unbekannt sei, selbst dass gewisse Pointer-Variablen nicht gingen... Neuste Fehler sind diese:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
und noch viele mehr, die in Zusammenhang mit USB_OTG_CORE_DEVICE stehen. Und diese Variable findet man in der ganzen Lib nur in der Datei usb_otg.h/c
1 | |
2 | |
Ich werde mir einmal das Projekt ansehen... aber bis jetzt bin ich nicht wirklich begeistert von dem Support den ST bietet und schon gar nicht von den Libs die sie zur verfügung stellen. Oder liegts an meiner IDE (Atollic TrueStudio), wobei ja Beispiele speziell auch auf diese IDE angepasst wurden und die laufen auch nicht.
Ich benutze keil und bei mir gehts einwandfrei. schaut aus als würde bei dir was fehlen.
bitte sehr
Gast
#2940867
>Also ich bin mitlerweile (nach ca 3 Tagen) zum Schluss gekommen, dass >die Lib von ST überhaupt nichts taugt. Das denke ich auch jeden Tag wenn ich irgendwas nicht verstehe.
Pit schrieb: >>Also ich bin mitlerweile (nach ca 3 Tagen) zum Schluss gekommen, dass >>die Lib von ST überhaupt nichts taugt. > Das denke ich auch jeden Tag wenn ich irgendwas nicht verstehe. Ich lach mich kaputt. das ist weder konstruktiv noch hilfreich, also enthalte dich bitte in Zukunft mit soch unnötigen Kommentaren, da du dich allem anschein nach sowieso nicht mit dem Thema befasst hast. Sven S. schrieb: > schaut aus als würde bei dir was fehlen. Ich habe das ganze Projekt so wie du es verlinkt hast eingebunden und versucht zu compilieren. ABER USB_OTG_CORE_DEVICE ist in den neuen Libs niergends mehr anzufinden. Ich habe jede Datei der Lib 2.1 und 3.4 durchsucht und es ist wird nur in der Datei usb_otg.h sowie usb_otg.c zu finden. Aber es wird niergends deklariert. Ebendso gibt es viele neue Deklarationen welche ebenfall Fehler produzieren... Also entweder sind die Compiler komplett unterschiedlich oder die Lib ist wirklich voller Fehler.
downloade dir doch mal bitte die projekte des großen stm32f4 eval board, jenes mit display,lan, etc... dort gibts projekte mit OTG etc. die lassen sich auch kompilieren. du weißt schon das wenn du CDC haben willst das OTG auch gehen muss beim Discovery? OTG -> role Device -> class CDC
Hier ein kleiner Überblick über die Fehler, die ich versuche zu eliminieren:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | |
60 | |
61 | |
62 | |
63 | |
64 | |
65 | |
66 | |
67 | |
68 | |
69 | |
70 | |
71 | |
Mindestens folgende typedefs fehlen in der kompletten Lib:
1 | |
2 | |
Also ich weiss ja nicht, ob das nur bei mir der Fall ist, aber diese Lib kann nicht laufen... Sven S. schrieb: > du weißt schon das wenn du CDC haben willst das OTG auch gehen muss beim > Discovery? Das ist mir auch klar. Die Lib ist ja auch so aufgebaut, dass Device auf OTG aufbaut.
Hallo, ich hänge an einem ähnlichem Problem. Ich versuche aus libopencm3 den USB support plus einem Beispiel das mit dem Projekt mitkommt und eigentlich funzen müsste zu komiplieren. Bisher ohne Erfolg. Schier endlose kompilefehler... ..\cdcacm.c: In function 'cdcacm_data_rx_cb': ..\cdcacm.c:208:2: warning: passing argument 1 of 'usbd_ep_read_packet' makes pointer from integer without a cast [enabled by default] E:\code\libopencm3\include/libopencm3/usb/usbd.h:81:12: note: expected 'struct usbd_device *' but argument is of type 'int' ..\cdcacm.c:208:2: warning: passing argument 2 of 'usbd_ep_read_packet' makes integer from pointer without a cast [enabled by default] E:\code\libopencm3\include/libopencm3/usb/usbd.h:81:12: note: expected 'u8' but argument is of type 'char *' ..\cdcacm.c:208:2: warning: passing argument 3 of 'usbd_ep_read_packet' makes pointer from integer without a cast [enabled by default] E:\code\libopencm3\include/libopencm3/usb/usbd.h:81:12: note: expected 'void *' but argument is of type 'int' ..\cdcacm.c:208:2: error: too few arguments to function 'usbd_ep_read_packet' E:\code\libopencm3\include/libopencm3/usb/usbd.h:81:12: note: declared here ..\cdcacm.c:211:3: warning: passing argument 1 of 'usbd_ep_write_packet' makes pointer from integer without a cast [enabled by default] E:\code\libopencm3\include/libopencm3/usb/usbd.h:78:12: note: expected 'struct usbd_device *' but argument is of type 'int' ..\cdcacm.c:211:3: warning: passing argument 2 of 'usbd_ep_write_packet' makes integer from pointer without a cast [enabled by default] E:\code\libopencm3\include/libopencm3/usb/usbd.h:78:12: note: expected 'u8' but argument is of type 'char *' ...... das ist nur ein Teil. Ich hab was gefunden das dies evt. an der Yagarto Toolchain hängt. Irgendwas mit VPS register, so ganz blick ich das nicht. https://github.com/libopencm3/libopencm3/issues/59 Kann das sein das gnu hier eine Erweiterung hat die nicht in allen gccs implementiert ist? Hier noch der erste Fehler aus der Liste mit seinen code stellen: der Aufruf--> int len = usbd_ep_read_packet(0x01, buf, 64); der Prototyp --> extern u16 usbd_ep_read_packet(usbd_device *usbd_dev, u8 addr, void *buf, u16 len); Sieht so aus als ob der erste Parameter beim Aufruf fehlt.... Mit welchem Comipler ist das Problem hier oben im Thread den aufgetretten? Gruss Michael
Ich nutze Atollic TrueSTUDIO (den Compiler kann ich nicht genau sagen, da er in der IDE integriert ist). Das Beispiel vom STM324 Eval Board konnte ich compilieren. Nur fällt hier auf, dass ser viel weniger Files benötigt wurden, als bei allen anderen Beispielen. Nichteinmal otg wird hier berücksichtigt. da ich leider nur das Discovery-Board habe kann ich es leider nicht testen. Ich denke nicht, dass bei mir ein Problem vom Compiler vorliegt, da die Defines nichts mit dem Compiler zu tun haben... Ein Grund könnte sein, dass die Files nicht in der richtigen Reihenfolge eingebunden werden oder auch Files berücksichtig werden, die gar nicht nötig sind.
Gast
#2941366
Lese ich das richtig? Die grosse STM324xG-EVAL/Demo konntest Du mit Atollic-Lite builden? Mir gelingt nur die STM322xG-EVAL, da der Linker VFP register arguments nicht kennt. Die STM322xG-EVAL.bin mit 866 kbytes reicht mir aber, um sie auch auf STM32F417IG zu flashen. Ist dann halt ohne FP --
Gast
#2941376
vampire schrieb: > Die STM322xG-EVAL.bin mit 866 kbytes reicht mir aber, um sie auch auf > STM32F417IG zu flashen. > Ist dann halt ohne FP -- richtiger: Ist dann halt ohne hardware FPU;
Ich konnte das VCP Beispiel compiliern, welches in der STM32_USB-Host-Device_Lib_V2.1.0 integriert ist. Das ist für das grosse Eval-Board gedacht. Es ist also nicht das ganze Demo-Programm. Ich denke, dass ich mitlerweile viele Probleme auf die IDE eingrenzen konnte. Wenn ich die ganzen Libs verknüpfe, diese aber niergends über include einbinde, kommen über 400 Fehler, dass plötzlich Variablen (uint8_t, uint32_t...) nicht mehr bekannt sind, obwohl diese ja Standart sind. Kann es sein, dass hier die Lite-Version die Ursache ist?
Gast
#2941489
USB_Device_Examples\VCP\TrueSTUDIO\STM324xG-EVAL_USBD-FS\ habe ich soeben erfolgreich zum build geführt; ALLERDINGS: mit einer Version der STM32_USB-Host-Device_Lib_V2.1.0, die ich bereits vor gut 6 Monaten geladen hatte. Mit einer Version der gleichen *.LIB von einer CD(China) habe ich Compiler-Fehler. Lad Dir doch bitte die http://www.st.com/internet/com/SOFTWARE_RESOURCES/SW_COMPONENT/FIRMWARE/stm32_f105-07_f2_f4_usb-host-device_lib.zip für F107VC runter und probier die. Wenns nicht klappt, muss ich meine komplette Version hochladen!
Gast
#2941505
Patrick B. schrieb: > Das Beispiel vom STM324 Eval Board konnte ich compilieren. Entschuldige, Patrick. Das hatte ich überlesen --
Gast
#2941520
Patrick B. schrieb: > Ich denke, dass ich mitlerweile viele Probleme auf die IDE eingrenzen > konnte. Wenn ich die ganzen Libs verknüpfe, diese aber niergends über > include einbinde, kommen über 400 Fehler, dass plötzlich Variablen > (uint8_t, uint32_t...) nicht mehr bekannt sind, obwohl diese ja Standart > sind. Kann es sein, dass hier die Lite-Version die Ursache ist? Vergleich doch mal die "Project --> Properties" C/C++ General --> Paths and Symbols dieses Projektes(VCP\TrueSTUDIO\STM324xG-EVAL_USBD-FS) mit denen des nicht lauffähigen --
Lads doch für alle hoch.
Gast
#2941560
@Sven S. (cell85) das bringt den wenigsten was! Die Version: 2.3.0 Lite Build id: 20111221-1049 hat noch keine Codebegrenzung --
Gast
#2941631
Ich sag nur: FT232RL oä. Alles anderer war bis jetzt Kopfweh. Wenn de Hersteller sowas in ihre Controller einbauen würden, wär's super. Ihre Treiber taugen nichts. Und wenn's einmal läuft durch viel Glück, läufts noch lange nicht beim Kunden. Und Treiber für'n PC: denkste...
Gast
#2941635
Chose schrieb: > FT232RL Ist natürlich eine Lösung, aber bei den NXP ARM läuft VCP ohne Probleme. CMSIS Code und Win7 Treiber.
Chose schrieb: > FT232RL Ja klar, habe ich bis jetzt auch so gemacht. Nur sobald dann ein Produkt nicht nur unter Windows laufen soll, wirds schon schwieriger. Ebenso sind die FTDI-Chips eine Kostenfrage, da sie etwa gleich viel ausmachen wie ein MCU. Und ich kann mir schlecht vorstellen dass bei den vielen USB-Produkten die es mitlerweile gibt überall solche Wandler dazwischengeschaltet sind. So müsste es doch ein paar brauchbare Libs geben. Mein Problem habe ich mitlerweile auf den Linker zurückgeführt. Die Pfade sind die selben (mehr oder weniger), aber das sollte nicht das Problem sein, da die stdint-Variablen nicht mehr bekannt sind... Ich werde mich mahl ein wenig mit dem Make-File/Einstellungen auseinandersetzen.
Gast
#2942051
Zunächst, bevor aus allen Ecken und Winkeln die Fotospezis hervorgekrochen kommen: Nein, ich habe kein Stativ und das Verwackeln ist meinem Alter geschuldet; Als Hinweis ist die Aufnahme allemal aussagekräftig genug; Zum Thema: Die VCP-Sache ist nicht mein primäres Ziel. Ich musste meine laufende Arbeit unterbrechen, um zu helfen; Hier ist das STM32F4-Discovery(unter meiner Selbstbauergänzung) auf dem Open407V-D! Es ist das Keil VCP/USB-Device-Example mit STM32 ST-LINK Utility geflasht --
Ich kämpfe gerade mit dem gleichen Problem, allerdings nutze ich die CoIDE. Nachdem ich die 'mitgelieferten' Beispiele aus der Lib V3.4 und V2.1 vergeblich versucht habe, zu kompilieren (gleiche Kompilierfehler wie bei Patrick "unknown type name 'USB_OTG_CORE_DEVICE'" etc.), habe ich dann angefangen die Beispiele nachzubauen. Da hat's mir dann alles um die Ohren gehauen, nichtmal uint8_t oder uint32_t waren bekannt. Habe dann Stück für Stück die includes geprüft und die stm32f4xx.h und stm32f4_discovery.h quasi überall eingebunden, dann hat es zumindest kompiliert, aber das USB-Gerät wurde nicht erkannt. Durch Zufall bin ich dann irgendwo hier im Forum auf einen Link zu einem funktionierenden Beispiel für die CoIDE gestoßen: https://rapidshare.com/#!download|150p8|3892093798|STM32F407VGT6_Cdc.zip|486|0|0 Kompiliert, geflash, funktioniert! Noch den ST Virtual Com Port Driver installiert und gefreut :) Die verwendete Lib im funktionierenden Beispiel weicht leicht von meinen Downloads ab, das sind die einzigen Unterschiede, die mir aufgefallen sind und so richtig verstehen, warum es vorher nicht funktioniert hat, tu ich nicht. Aber vielleicht hilft's Dir bei der Fehlersuche.
was bin ich froh, das ich in keil 10 klicks mache und das USB funktioniert.
Nach etwas frisch aber evtl. hilfreich: http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/index_cortex.html#stm32f4_vcp
Gast
#3136932
servus, magst du den beispiel code bitte nochmal hochladen, rapidshare hat die datei nicht mehr, danke :)
Gast
#3136938
(den für CooCox CoIDE)
@stefan, -falls du die CoIDE 1.7.0 benutzt, findest du hier ein CooCox Projekt-Ordner für USB-CDC http://mikrocontroller.bplaced.net/ Gruss Uwe
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.
