Hallo zusammen, ich habe folgendes Problem und zwar möchte ich simple über den UART2 des STM-Boards einen char bzw. string senden und diesen über den Mini-USB-Anschluss am PC empfangen und darstellen. Zunächst hatte ich das Problem, dass Windows den COM-Port des Boards erkennt und HTerm auch jedoch Terminal nicht. Nachdem ich die Treiber neu installiert habe, wurde dieser allerdings behoben. Nur wird mir in keinem der Programme irgendetwas angezeigt. Im angefügten Bild habe ich mit meinem "Oszilloskop" mir den TX-Pin ausgelesen. Meiner Meinung wird dort eine Bitfolge übertragen. Nur verstehe ich nicht warum ich über den USB-Anschluss im Terminalprogramm nichts empfange. Die Baudrate als auch Konfiguration habe ich mehrmals überprüft und kontrolliert. Kann sich einer von euch einen Reim drauf machen? Wird wirklich eine Bitfolge gesendet oder irre ich mich da? Vielen Dank im Voraus für eure Hilfe
Ulf K. schrieb: > ich habe folgendes Problem und zwar möchte ich simple über den UART2 des > STM-Boards einen char bzw. string senden und diesen über den > Mini-USB-Anschluss am PC empfangen und darstellen. Ich sehe bei diesem Board keinen Com-Port. Wo soll der sein?
Was für ein STM-Board? Was für ein COM-Port? Welcher Treiber? Mal ne Pause vor jedem Senden gemacht, damit die Gegenstelle Gelegenheit hat den Frame-Beginn zu erkennen?
Ulf K. schrieb: > Nur wird mir in keinem der Programme irgendetwas angezeigt. Wenn du meinst du kannst einen Datenstrom den du über einen UART des STM ausgibst an der USB Buchse abgreifen zu können dann hast du was falsch verstanden.
Wenn Du den USB Port zur Übertragung benutzen willst musst Du eine virtuelle COM Schnittstelle benutzen. Das sehe ich bei Dir im code nicht. Da kann also gar nichts über USB laufen. Mit virtueller CDC Schnittstelle kannst Du mit uint8_t CDC_Transmit_FS(uint8_t* Buf, uint16_t Len) was senden. Dann must Du die CDC vorher aber auch initialisieren. Klappt mit der Cube Software, ist aber ein wenig zu beachten (VBUS signal richtig setzen u.s.w.)
Die folgende Anleitung habe ich für einen STM32F103 erstellt, ich schätze allerdings, dass die Vorgehensweise bei deinem µC gleich sein dürfte. Das ist ja gerade der Sinn von Cube HAL. Schau mal: http://stefanfrings.de/stm32/index.html#vcphal
Mir ist da noch ein fehler aufgefallen:
1 | char* buff="H\n\r"; |
2 | HAL_UART_Transmit_IT(&huart2, (uint8_t *)buff,8); |
Dein Puffer ist 4 Bytes groß (wenn man das Abschließende \0 des Strings mit zählt) aber du sendest 8 Bytes. Anstelle der 8 wolltest du sicher strlen(buff) benutzen, schätze ich mal.
Erstmal danke euch allen für eure Hilfe :) Ich kann nun über den FTDI Adapter FT232RL nun Daten im Terminal empfangen. Allerdings würde ich auch gerne verstehen wie ich den Com-Port des Boards nutzen kann. Ich hab mir dazu die Anleitung von Stefan angeschaut, jedoch hat dies bei mir leider nicht geklappt. Den Treiber und der Com Port des Boards wurde mir schon vorher im Geräte-Manger angezeigt, aus dem Grund bin ich davon ausgegangen, dass über diesen schon Daten übertragen werden können ohne eine zusätzliche Initialisierung. Deshalb hätte ich ein paar Anschlussfragen an euch: @stefanus: In deiner Anleitung (Virtueller COM-Port mit Cube HAL) schreibst du die "...mittels PLL auf 48MHz...", meinst du hier die Frequenz welche aus der Main PLL ensteht oder eine andere wie Sysclk oder HCLK? Weiterhin würde ich gerne wissen, was die Funktion: "CDC_Transmit_FS( (uint8_t*) msg, strlen(msg));" genau macht bzw. wo ich eine Beschreibung. Leider wird in der Definition/Referenz nichts beschrieben. Muss ich also für die noch zusätzlich Dinge beachten wie es Martin B. beschrieben hat: Martin B. schrieb: > ist aber ein wenig zu beachten (VBUS signal richtig > setzen u.s.w.) Weiterhin würde ich gerne wissen, ob ihr Einsteigerliteratur empfehlen könnt, da ich mich gerne weiter und intensiver mit dem Board beschäftigen möchte. Zudem ist mir aufgefallen, dass viele die hier und in anderen Foren eher die standard peripheral library. Ich habe mit der hal library angefangen und suche manchmal ziemlich lange nach der äquivalenten Funktion. Gibt es hier vorgefertigte Übersichten und sollte ich lieber die lib wechseln? Lg Ulf
Ulf K. schrieb: > Allerdings würde ich auch gerne verstehen wie ich den Com-Port des > Boards nutzen kann. Was denn jetzt, verrate doch mal endlich ob dein Controller direkt mit USB verbunden ist, oder ob du über einen USB <-> Seriell Adapter kommunizierst. Im ersteren Fall musst du das USB Protokoll implementieren; das ist recht komplex aber es gibt Bibliotheken die das erledigen, wie von Stefan beschrieben. Ulf K. schrieb: > Weiterhin würde ich gerne wissen, was die Funktion: "CDC_Transmit_FS( > (uint8_t*) msg, strlen(msg));" genau macht bzw. wo ich eine > Beschreibung. Leider wird in der Definition/Referenz nichts beschrieben Es wird wohl die Daten über einen USB Endpoint verschicken. Lies dazu die USB 2.0 Spezifikation sowie die USB CDC Spezifikation. Ulf K. schrieb: > Den Treiber und der Com Port des Boards wurde mir schon vorher im > Geräte-Manger angezeigt, aus dem Grund bin ich davon ausgegangen, dass > über diesen schon Daten übertragen werden können ohne eine zusätzliche > Initialisierung. Es braucht eine Menge Initialisierung und weiteren Code - das ist in genannten Bibliotheken enthalten. Da der Port aber schon vorher da war benutzt du wahrscheinlich einen USB-Seriell Adapter (FT232? STLink?) und das ganze ist unnötig.
Schau Dir die Taktkonfiguration in Cube-HAL an. Das Programm wird Dir n der Grafik anzeigen, wo die Taktfrequenz für USB eingestellt sein muss und ob sie geeignet ist. Die Funktion CDC_Transmit_FS() sendet ein oder mehrere Bytes. Das erste Argument ist ein Zeiger auf das erste zu sendende Byte. Das zweite Argument gibt an, wie viele Byte gesendet werden sollen. Im Grunde genommen tut die funktion genau das Selbe, wie die HAL_UART_Transmit_IT(), die du bereits verwendest. Es geht nur halt über eine andere Schnittstelle raus. > ist aber ein wenig zu beachten (VBUS signal richtig > setzen u.s.w. Cube HAL generiert den nötigen Initialisierungs-Code. Wenn du da unsicher bist, solltest du endlich mal mitteilen, um welches konkrete Board es geht bzw. den Schaltplan deiner Eigen-Kreation zeigen. Als Einsteiger-Literatur empfehle ich Dir meine Webseite, die du schon gesehen hast. Sie enthält auch ein einführendes Buch und Links zu den Dokumenten, die man lesen sollte. > Ich habe mit der hal library angefangen und suche manchmal > ziemlich lange nach der äquivalenten Funktion. Anstatt Doku zur StdPeriph Library zu benutzen und dann ohne das nötige Know-How auf Cube HAL übersetzen zu wollen, solltest du lieber Doku zur Cube HAL lesen. Diese findest du auf der Webseite von ST. Oder du verwendest erst einmal nur die CMSIS-Core (also gar keine Abstraktions-Library) und lernst erst einmal deinen Mikrocontroller kennen, bevor du die nächste Hürde mit der Software nimmst. Wie das geht kannst du auf meiner Webseite lesen. Der Einfachheit halber würde ich raten, noch ein STM32F103C8T6 Board oder ein Nucleo-F103RB dazu zu kaufen. Denn dann kannst du meine Code-Beispiele erst einmal 1:1 nachvollziehen. Als nächstes kannst dann mal schauen, inwiefern meine Ausführungen auf deinen schnelleren Controller zutreffen. Sicher wird das Meiste passen, aber am Anfangen ist es zunächst besser, wenn Doku und Hardware zu 100% zusammen passen. Es wäre sicher besser, wenn ich Dir so eine ähnliche Seite wie meine aber für deinen Controller empfehlen würde. Kann ich aber nicht, ich kenne keine. Sonst hätte ich selbst mit diesem Controller angefangen. Ich habe mich für den STM32F103 entschieden, weil ich dazu am meisten für mich verständliche Infos gefunden habe. Irgendwann schaue ich sicher auch die STM32F4 Serie an, aber so weit bin ich noch nicht.
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.