Hallo zusammen, Ich habe VCP für USB-FS initialisiert und es funktioniert, wie kann ich Nachrichten die vom PC geschickt werden an STM32 empfangen? int main(void) { __IO uint32_t i = 0; /*!< At this stage the microcontroller clock setting is already configured, this is done through SystemInit() function which is called from startup file (startup_stm32fxxx_xx.s) before to branch to application main. To reconfigure the default setting of SystemInit() function, refer to system_stm32fxxx.c file */ USBD_Init(&USB_OTG_dev, #ifdef USE_USB_OTG_HS USB_OTG_HS_CORE_ID, #else USB_OTG_FS_CORE_ID, #endif &USR_desc, &USBD_CDC_cb, &USR_cb); /* Main loop */ while (1) { if (i++ == 0x100000) { STM_EVAL_LEDToggle(LED1); STM_EVAL_LEDToggle(LED2); STM_EVAL_LEDToggle(LED3); STM_EVAL_LEDToggle(LED4); i = 0; } } }
Hi, ich arbeite mich grade auch in das selbe Thema ein mit dem Beispiel was du benutzt. Soweit ich das verstanden habe, wird dabei eine USB-to-UART Verbindung eingesetzt. Also musst du per UART die Informationen von deinem Rechner auf den Chip schieben. In der Initialisierung wird dabei der UART1 (PD5 und 6) verwendet. Walleby
STM32-Entwickler schrieb im Beitrag #3050833: > Kennst sich denn Niemand aus? * - usbd_cdc_DataOut , hier werden die Daten vom USB empfangen * - und hier verarbeitet : VCP_DataRx
Zuesrt danke für eure Antworten. Mit der Funktion VCP_DataRx werden die Daten an UART(PC) geschickt, der Name sagt zwar VCP_DataRX aber die Funktion sendet die Daten. Empfangen werden die Daten durch die Interruptfunktion EVAL_COM_IRQHandler, die Daten werden durch die Funktion VCP_DataTx von COM1 empfangen und in den APP_Rx_Buffer geschrieben. Das Problem ist, wie kann man Daten mit VCP vom PC schicken und an uC empfangen?
Wenn Du dieses Programm im STM32 drin hast und Du dann das Board mit USB am PC verbindest, dann möchte der PC einen Gerätetreiber installieren, in dem Fall einen Virtuellen COM Port Treiber (gibt es irgendwo bei ST). Wenn das geschehen ist, so sieht man im Gerätemanager einen neuen COM Port und mittels Hyperterminal kann man sich damit verbinden und was tippen und das kommt beim STM32 an. Bzw. wenn der STM32 was schickt, dann sieht man das auf dem Hyperterminal.
Das habe ich doch zuerst getan daß VPC überhaupt am PC funktioniert. Das ist auch nicht das Thema, sondern wie kann man Daten mit VCP vom PC schicken und an uC empfangen?
Hallo, ich hab vor ner weile auch mal VCP auf STM32 gemacht und den code hier: https://github.com/znuh/STM32_VCP und da: https://github.com/znuh/STM32_IR_ACM abgelegt. Ersteres macht VCP mit loopback mode, zweiteres verbindet den VCP mit dem realen UART und aktiviert da IR-mode. Der interessante Teil ist https://github.com/znuh/STM32_VCP/blob/master/usb_endp.c - EP1_IN_Callback überträgt VCP-Daten vom µC zum PC, EP3_OUT_Callback empfängt die VCP-Daten vom PC. Vielleicht hilft das ja. VG, hunz
Hallo, Danke für die gute Antwort. Ich werde deine Links untersuchen, hoffentlich komme ich zu einem Ergebnis.
STM32-Entwickler schrieb im Beitrag #3052000: > Zuesrt danke für eure Antworten. > > Mit der Funktion VCP_DataRx werden die Daten an UART(PC) geschickt, der > Name sagt zwar VCP_DataRX aber die Funktion sendet die Daten. ja genau, und zwar die Daten die per USB empfangen wurden, werden hier per UART wieder gesendet. Da ich mich auch erst seit letzter Woche mit dieser Thematik befasse, habe ich dann in dieser Funktion das Senden per UART unterbunden und stattdessen meinen eigenen USB Empfangsbuffer gefüllt um die LAWICEL-Protokolldaten die vom PC via VCP gesendet werden entgegen zu nehmen und dann als CAN Botschaften rauszuschicken. Bist jetzt funktioniert das ganze prima :-) (auch mit 500 kBit/s und hoher Buslast) Jetzt haut mich aber bitte nicht für diese Lösung :-) Das war für mich erst mal der schnellste und einfachste Weg, um Daten vom PC entgegen zu nehmen. Somit konnte ich das Demo-Projekt: STM32_USB-Host-Device_Lib_V2.1.0\Project\USB_Device_Examples\VCP\ einfach für meine Zwecke zu missbrauchen. Gruß Andi PS: und mit DCD_EP_Tx(...) sende ich dann die CAN-Daten via USB wieder an den PC zurück
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.