Forum: Mikrocontroller und Digitale Elektronik STM32F10x USB VCP unter Coocox


von ernst (Gast)


Lesenswert?

Hallo,

ich suche eine Implementierung um an einem STM32F10x den USB als VCP zu 
betreiben.
Ich habe hier den Artikel
http://www.mikrocontroller.net/articles/STM32_USB-FS-Device_Lib
gelesen. Der Link zum Download der V4 ist defekt. Auf der ST Seite finde 
ich auch nichts nur ne Menge Foreneinträge.
Vielleicht kann mir hier jemand auf die Sprünge helfen?
Vielleicht hat jemand den VCP auch mal in der Coocox umgebung umgesetzt 
?

Danke!

Gruß
ernst

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?


von ernst (Gast)


Lesenswert?

Yeahhhh! Danke!
Hast du die Lib mal implementiert ?

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

Ja, erst kürzlich. In einem Bootloader für einen STM32F4.
Es hat gut geklappt.
Mit Eclipse nicht CooCox.

: Bearbeitet durch User
von ernst (Gast)


Lesenswert?

Danke für die Info! Den Link im Artikel werde ich mal anpassen.

Ich habe mir gerade das hier bestellt:

http://re.reworld.eu/de/produkte/s64dil-405/index.htm

Irgendwelche Fallstricke bei der Lib?



Gruß

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

ernst schrieb:
> Irgendwelche Fallstricke bei der Lib?

Fallstrike eigentlich nicht. Der Code und die Demos von ST bieten nicht 
nur VCP sondern auch HID, Audio und Massstorege und noch mehr. Da muss 
man die richtigen Dateien nehmen.

Ansonsten habe ich das define so geändert:
#define CDC_OUT_EP                      0x03  /* EP1 for data OUT */
sollte aber keine Rolle spielen.

In der Datei "usbd_cdc_vcp.c" kommen dann die Daten an und man kann da 
auch welche senden.

Im VCP_Ctrl() habe ich das geändert:
  case GET_LINE_CODING:
    Buf[0] = (uint8_t) (115200);
    Buf[1] = (uint8_t) (115200 >> 8);
    Buf[2] = (uint8_t) (115200 >> 16);
    Buf[3] = (uint8_t) (115200 >> 24);
    Buf[4] = 0;
    Buf[5] = 0;
    Buf[6] = 8;
    break;

denn ich nutze die Daten nur intern und ich habe alles mit "LineCoding" 
entfernt. Es ist völlig egal welche Baudrate, Parität usw. man im 
Terminalprogramm ein gibt, der VCP arbeitet immer mit der maximalen USB 
Geschwindigkeit.

Ich habe den Code stark verändern müssen, da ich den USB-VCP im 
Bootloader nutze und ich unbedingt nicht mehr als 32KB haben wollte (Bei 
Optimierung -O0). Bei Start wird der Bootloader mit USB immer 
initialisiert und mit einer definierten Sprungtabelle nutzt diese 
initialisierte USB Verbindung auch die eigentliche Applikation. Und der 
Bootloader sowie die Applikation ist in einem Projekt mittels speziellem 
Linker-Script speichermäßig geteilt. Daher kompiliere ich das mit GCC 
und makefile direkt mit Eclipse. Jedoch die Funktionalität im Code von 
ST ist unverändert - nur anders strukturiert.

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

Bei USB sollte man PA9 mit VBUS verbinden, damit erkennt der STM32F4 
dass der interne Pull-Up von 1,5K aktiviert werden muss.
Ansonsten selbst noch einen 1,5K Widerstand an +3,3V oder +5V  zu D+ 
legen.

(Das mit PA9 noch mal in der Doku nachlesen, habe es nicht zu 100% im 
Kopf).

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.