Hallo Ich habe für mein Forschungsprojekt eine Positionsregelung für einen Motor mit dem STM32F107 realisiert. Dazu wird das Eval-Board MCBSTM32C von Keil genutzt und auf dem µC läuft ein Tasksystem für die Regelung. Als Programmierumgebung habe ich Keil µVision4 benutzt. Die Regelung funktioniert ganz gut, bei der Auswertung würde ich aber ganz gern auch mal ne Kurve mit Messdaten angeben (Konkret: die Position und die Stellgröße zum jeweiligen Zeitpunkt ein long und ein int Wert). Hat jemand ne Idee, wie ich mit den gegebenen Möglichkeiten mit möglichst wenig Aufwand (und wenig Code) die Daten von dem µC auf meinen PC kriege. Gibt es in der µVision Umgebung vllt. ne Funktion, mit der ich die Variablen beobachten kann? Vielen Dank schon mal für die Hilfe LG Longus
Hi, hast du einen ULINK2/ME (oder besser: ULINK pro)? Dann kannst du im laufenden Debugger eine globale(!) Variable per Rechtsclick-contextmenu an den Logic Analyzer senden, das ist so ne Art Oszi, der dir den Verlauf grafisch über der Zeit anzeigt. Dazu musst du die CPU per SWD debuggen, und SWO aktivieren. http://www.keil.com/support/man/docs/uv4/uv4_db_dbg_logicanalyzer.htm http://www.keil.com/support/man/docs/uv4/uv4_using_la.htm Ansonsten schnapp dir eins de Beispiele und kupfer die Funktion des UARTS oder USB ab, um deine Daten an den PC zu schicken. Wahlweise kannst die auch im RAM buffern und (SD Card Example) auf eine SD Card schreiben. Noch Fragen? VG, /th.
Danke für die schnelle Antwort! Ja, ich hab den ULINK2, werd dein Tipp bei mal versuchen. Hoffe es klappt. LG Longus
Mit dem ULINK2 bekommst du ca. 1.2MHz Daten aus dem SWO Pin, das können ITM (z.B. printf: View -> Serial Windows -> Printf Window), DWT: z.B. Variablen für den Logic Analyzer) sein. Ein Schreibzugriff auf deine globale(!) Variable wird dann an den Debugger geschickt und ist im UV4 im LA zu sehen, während das Target läuft. Wird deine Variable zu oft geschrieben oder anderweitig (printf) zu viel Traffic auf dem SWO Pin erzeugt, steht unten in der Statusleiste was mit Data Overflow. Mit dem ULINK pro könntest du dir das ganze mit Volldampf auf bis zu 4 Variablen ansehen, also @CPU speed. Mit dem ULINK2 geht das im Prinzip auch alles, nur halt langsamer :-) VG, /th.
Nochmal danke für die Hilfe aber irgendwie funzt es nicht. Ich habe alles wie in den links beschrieben einegestellt aber ich kriege am Logikanalyser kein Signal. Muss ich im µC noch irgendwas beachten, die Variablen die ich aufzeichnen mchte sind global. P.S. den ersten Teil von deinem zweiten Post hab ich nicht verstanden, auch weil mir die Abkürzungen ITM und DWT nicht geläufig sind LG Longus
Diese Cortex-M3 interne "Peripherals" sind Teil der Coresight Debug Architecture: ITM: Instrumentation Trace Macrocell. ===================================== Der Code muss erweitert (instrumentiert) werden, um von dieser Unit Gebrauch machen zu können. Es stehen 32 Kanäle zur Verfügung, die im Prinzip frei mit Daten gefüttert werden können. Wie das geht, findest du in der Funktion ITM_Sendchar() aus der core_cm3.h (ganz unten). Diese Funktion macht sozusagen das printf. Um es zu verwenden, siehe Code Beispiele mit retarget.c Ausnahme: Kanal 0 ist für printf reserviert und kommt im oben beschriebenen Terminal/Hex Window wieder heraus (vgl. Contextmenu der Terminals). Kanal 31 ist für RTOS Messages reserviert. Im µVision können die Taskwechsel / IDLE vom RTX im Event Viewer angesehen werden. (Debug -> OS Support -> Event Viewer). Alle Kanäle kannst du auch auf die HD loggen, im Debugger im Command Window: itmlog <ch> > log.txt DWT: Data Watch & Trace ======================= Mit dieser Unit können nicht-invasive (also keine Laufzeitbeeinflussung) Zugriffe auf die laufende Software erfolgen. Dazu gehört z.B. das Überwachen einer Speicherstelle auf Schreibzugriffe und raussenden des neuen Wertes (das passiert für den Logic Analyzer). Auch können hier Data Breakpoints aufgesetzt werden, z.B.: BS WRITE myVar == 0x42 ETM: Embedded Trace Macrocell (nur ULINK pro) ============================================= Mit dieser Unit kann man den kompletten Trace über einen speziellen Port aus der CPU ziehen. Neben dem Trace Window ermöglicht MDK-ARM/µVision u.a. Code Coverage und Anzeige der Ausführungszeiten direkt an den ASM und C Code Zeilen für Performancemessungen.
Um die Anzeige im LA zu aktivieren, muss du im Options for Target in den ULINK2/ME Settings folgendes einstellen: Debug: - Port: SW Trace: - Trace Enable - Core Clock auf CPU clk (für ST meisst 72.000000 MHz) - SWO Clk: Autodetect - Timestamps enable, Prescaler: 16 (reicht idR.) - Trace Events: alles deaktivieren (zu viel Traffic) - PC Sampling: alles deaktivieren (zu viel Traffic) - ITM Stimulus Ports: alles deaktivieren, Port 0 Enable. Port 7..0 Priviledge sollte aus sein. Für STM muss noch ein Ini script geladen werden, um den SWO Port freizuschalten. Dies geschieht im Options for Target -> Debug, dort, wo du den ULINK2/ME ausgewählt hast. Unter "Initialisation File" trägst du folgendes ein (pfad ggf. anpassen, oder am besten das file in dein Projekt kopieren): C:\Keil\ARM\Boards\Keil\MCBSTM32C\Blinky_ULp\STM32_SWO.ini Dann deinen code compilieren, flashen, debug session starten. Die globale Variable suchen, rechtsclick -> Add to: Logic Analyzer. Run. Ändert sich die Variable, so wird dies im LA angezeigt. --- Noch Fragen? VG, /th.
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.