STM32F411 Prinftf Anweisung Debug KEIL5.26

Gast #5783058
Lesenswert?

Hallo!

Ich benötige etwas Hilfe bei meinem Problem.

Ich programmiere am Discovery Board STM32F4 und benutze den Cube sowie 
Keil Version 5.26.

Ich versuche eine printf Anweisung im Debug Modus auszuführen und im 
Debug printf Viewer anzeigen zu lassen.

Ich habe mir schon einige Videos und Tutorials angeschaut aber alle 
verwenden UART oder stellen Sachen ein, die ich weder benötige noch 
habe.

Was habe ich schon getan:
- stdio.h inkludiert
- Unter "Manage Run Time Enviroment" --> I/O --> stdout und stdin auf 
TMI gesetzt.
- Im Cube "SYS" auf "Serial Wire" gesetzt
- eine einfache printf Anweisung (Hello World) in die while Schleife 
geschrieben
- Im Debug Modus den "Debug printf Viewer" geöffnet.

Und NIX passiert also die Anweisung wird beim Ausführen des Programms 
dort nicht angezeigt.

Ich habe auch schon mit ein paar Anweisungen laut Tutorials im Keil bei 
"Options for Targets" --> Debug herumgespielt aber auch da funktioniert 
dann nix.


Gibt es hier eine halbwegs einfache Lösung, wie man eine printf 
Anweisung im Debug Modus angezeigt bekommen kann?


Vielen Dank für die Hilfe! ;)
Gast #5783073
Lesenswert?

Ich habe von Keil keine Ahnung.

Deine Frage verstehe ich so, dass du mit printf() eine Ausgabe auf die 
SWO Leitung machen willst. Dazu musst du folgende Funktion 
implementieren:
1
// Redirect standard output to the trace SWO output
2
int _write(int file, char *ptr, int len)
3
{
4
    for (int i=0; i<len; i++)
5
    {
6
        ITM_SendChar(*ptr++);
7
    }
8
    return len;
9
}
Außerdem musst du in deinem Projekt die folgenden Linker-Flags benutzen:
1
-specs=nano.specs -specs=nosys.specs
Eventuell werden diese in deinen Projekteinstellungen durch Checkboxen 
dargestellt. Es geht hier darum, die nano Version der Newlib Library zu 
verwenden, ohne vollständige Implementierung aller System Funktionen.

Dein Versuch, SWD zu aktivieren war auf jeden Fall auch richtig und 
nötig. Eigentlich ist das die Default Vorgabe bei allen STM32 
Mikrocontrollern - nur dieses dumme CubeMX deaktiviert es per Default.
Gast #5783099
Lesenswert?

Martina schrieb:
> NACHTRAG:
>
> Wenn ich unter "Options for Targets" --> Debug --> Settings for ST Link
> --> Trace --> 100Mhz einstelle bekomme ich angehängtes Bild im Debugger.

Das ist ja schonmal was, wenn auch doof formatiert. Die SWO Leitung wird 
mit 1/4 des CPU Taktes betrieben.

Ich habe irgendwo gelesen, dass die SWO Schnittstelle wahlweise 8, 16 
oder 32bit ausgeben kann. Aber in der Praxis komme ich auch immer nur 
auf 32 Bits. Zwischen den sichtbaren Zeichen habe ich immer unsichtbare 
Steuer-Zeichen.

Deswegen benutze ich das so, dass ich openocd anweise, die Meldungen in 
eine Datei zu schrieben. Diese betrachte ich dann mit dem Befehl
1
tail -f debug.txt
bzw. mit
1
tail -f debug.txt | tr -dc '[:print:]\n'
falls der tail Befehl die Steuerzeichen nicht bereits heraus filtert 
(ist je nach Version unterschiedlich).

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren