Hallo, ich versuche mit einem STM32F10xE 5120KByte Eval Board die VCOM Schinttstelle via USB zu realisieren. Ich benutze IAR EWArm. Ich komme überhaupt nicht weiter. Das Beispielprojekt habe ich geöffnet und via "DOwnload and Debug" gestartet aber nichts tut sich. ich stecke das Board vom ST-Link ab und via usb an einen PC aber nichts passiert. Hat jemand vielleicht ein konkretes Beispiel? oder ein Projekt oder eine Hilfe? Ich möchte gerne die Schnittstelle als Flashloader/Debugger und als Datenschnittstelle benutzen aber bekomme es nich hin. Grüße Harry
Ich weiss zur VCOM Demo nur soviel: als ich im Jan.2009 die ST Demo für unser Projekt umgeschrieben habe, traten Fehler bei der Übertragung auf. Das lag IIRC daran, dass ST keinerlei Flusskontrolle eingebaut hatte, d.h. der PC konnte den STM32 überfahren, wenn er schnell genug schickt. Weiterhin habe ich dann noch einen SW-Ringpuffer eingebaut und dann ging es. Infos habe ich im ST-Forum gefunden. Kann allerdings sein, dass ST mal ausnahmsweise die Tipps im Forum berücksichtigt hat und die eigene Software entbuggt hat. Auch ein Grund, warum ich mein eigenes BSP geschrieben habe und nicht die ST-Lib nehme... man lernt die HW einfach besser kennen und kann sich selbst helfen wenns klemmt. Inzwischen bin ich aber soweit zu sagen, dass die VCOM Lösung Humbug ist. Des öfteren meint Windoof, dass die Schnittstelle nach Schließen immer noch geöffnet sei. Da hilft dann nur Windoze neu zu booten. Weiss nicht, ob es am ST-VCOM Treiber oder unserer eingekauften RS232 Lib liegt. BTW: erkennt Windoof beim Verbinden mit dem Board ein neues USB Gerät? ciao, Arne
hw_config.c anpassen, je nach Board oder falls EVA-Board unterstützt wird auch in der platform_config.h möglich::
1 | #define USB_DISC_H GPIO_SetBits(GPIOC,GPIO_Pin_11)
|
2 | #define USB_DISC_L GPIO_ResetBits(GPIOC,GPIO_Pin_11)
|
3 | |
4 | #define USB_SELECT USB_DISC_L /* USB Aktiv */ |
5 | #define USB_DESELECT USB_DISC_H /* USB Inaktiv (USBDP liegt auf 3.3V */ |
6 | |
7 | /*******************************************************************************
|
8 | * Function Name : USB_Cable_Config
|
9 | * Description : Software Connection/Disconnection of USB Cable
|
10 | * Input : None.
|
11 | * Return : Status
|
12 | *******************************************************************************/
|
13 | void USB_Cable_Config (FunctionalState NewState) { |
14 | |
15 | if (NewState == ENABLE) { |
16 | USB_SELECT; |
17 | // GPIO_SetBits(USB_CONNECT, USB_CONNECT_PIN);
|
18 | } else { |
19 | USB_DESELECT; |
20 | //GPIO_ResetBits(USB_CONNECT, USB_CONNECT_PIN);
|
21 | }
|
22 | }
|
Testprogramm
1 | #include "usb_lib.h" |
2 | #include "usb/usb_desc.h" |
3 | #include "usb/hw_config.h" |
4 | #include "usb/usb_pwr.h" |
5 | |
6 | extern __IO uint32_t count_out; |
7 | extern uint8_t buffer_out[VIRTUAL_COM_PORT_DATA_SIZE]; |
8 | |
9 | #include <string.h> // Stringfunktion |
10 | #include <stdio.h> // Standardfunktion |
11 | #include <stdlib.h> // Standardbibliothek |
12 | |
13 | //***********************************************************************************************
|
14 | // USB Initialisierung
|
15 | //***********************************************************************************************
|
16 | void usb_comport_init (void) { |
17 | |
18 | USB_Cable_Config(DISABLE); // USB Kabel abschalten (USBP wird auf +3.3V gelegt) |
19 | Set_USBClock(); // USB Taktung auf 48MHz (bei 72MHz Systemtakt, Teiler = 1.5) |
20 | USB_Interrupts_Config(); // USB Interrupt konfigurieren |
21 | USB_Init(); // USB Grundinitialisierung |
22 | }
|
23 | |
24 | ...
|
25 | |
26 | //***********************************************************************************************
|
27 | // USB Test auf Datenempfang
|
28 | //***********************************************************************************************
|
29 | void usb_receive_check (void) { |
30 | uint16_t i; |
31 | |
32 | if (bDeviceState == CONFIGURED) { |
33 | // USB korrekt initialisiert und betriebsbereit
|
34 | printf_tft(1,40,"USB konfiguriert (OK) "); |
35 | if (count_out) { |
36 | // Mind. 1 Byte empfangen
|
37 | sprintf(lcd.buffer,"B: %u ",(unsigned int) count_out); |
38 | printf_tft(180,20,lcd.buffer); |
39 | for (i = 0; i < count_out; i++) { |
40 | // Ausgabe der empfangenen Bytes
|
41 | print_char_8x14_tft (x, y, buffer_out[i]); |
42 | }
|
43 | SetEPRxValid(ENDP3); // USB Empfangsfreigabe erneuern |
44 | count_out = 0; // USB Empfangs-Index rücksetzen |
45 | }
|
46 | } else { |
47 | printf_tft(1,40,"USB nicht konfiguriert"); |
48 | }
|
49 | }
|
50 | |
51 | //***********************************************************************************************
|
52 | // USB Test Daten senden
|
53 | //***********************************************************************************************
|
54 | void usb_send_test (void) { |
55 | uint8_t usb_buffer[] = { "Test-String STM32 USB Virtual Com Port\n\r" }; |
56 | |
57 | if (bDeviceState == CONFIGURED) { |
58 | // USB korrekt initialisiert und betriebsbereit
|
59 | USB_SIL_Write(EP1_IN, usb_buffer, strlen((const char *)usb_buffer)); // USB Zeichenkette senden |
60 | SetEPTxValid(ENDP1); // USB Sendefreigabe erneueren |
61 | clear_tft(WHITE); |
62 | font_set_tft(FONT_8X14, BLUE, WHITE, AT_STANDARD); |
63 | printf_tft(1,60,"USB Test-Sting gesendet! "); |
64 | delay(200); |
65 | }
|
66 | }
|
Das USB Comport Demo funktioniert bei mir, Selbstbau Board mit STM32F103RE. Ab und zu blokiert auch hier der Comport am PC, meist aber beim testen und wenn man die Com nicht ordnungsgemäß schließt. Ganz sauber ist der Treiber nicht. Auch Datenverluste hatte ich schon wie oben beschrieben, wenn man die Empfangsdaten nicht schnell genug abholt. Das sollte aber im Interrupt passieren, was ich bisher wegen der rel. kleinen Datenmenge nicht mache.
@anonym Nein der wird nicht mal als neues gerät erkannt. Es tut sich garnichts. @Matthias: Ich werds mal versuchen. Soll ich einfach in IAR deinen source code reinschreiben oder soll das eine win32 Anwendgung sein?
BTW: gibts eine andere USB/VCOM Lösung ? Es geht mir darum einfach daten in meine Win Applikation einzulesen und zu debuggen/flashen (flashen ist wichtiger).
Harald schrieb: > @Matthias: Ich werds mal versuchen. Soll ich einfach in IAR deinen > source code reinschreiben oder soll das eine win32 Anwendgung sein? Bist Du STM32 Einsteiger? Der Frage nach ja. Dann solltest Du nicht gleich mit USB anfangen, ist schon etwas schwerere Kost. Meine Bsp. sind nur als Denkanstöße, nicht als komplette Lösung zu sehen.
Guck doch einfach mal hier: http://www.mikrocontroller.net/articles/STM32_USB-FS-Device_Lib ich hatte eigentlich keine Probleme das zum laufen zu bringen. Gruß Thomas
ich habe auch dieses Beispiel mal getestet aber leider kommt bei window unbekantes Gerät. Habe dann mal in Hterm geschaut da wird mir nur eine Serielle Schnittstelle Angezeigt. Den Virtuellen Comtreiber habe ich installiert aber nix geht. Mit den Beispiel welches ich zu dem Board bekommen hab läuft diese "Mass_Storage" einwandfrei ich kann Daten von der SD-Card lesen und schreiben auf dem Board. Nur diese Beispiel VCP geht nicht bei mir kann mir einer Weiterhelfen
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.