Guten Morgen,
ich versuche gerade den Stm32 F302 in Betrieb zu nehmen.
Dabei wollte ich wie immer als erstes das printf mit SWO testen.
Habe wie immer in der syscalls.c die write Funktion angepasst.
Und dann einfach versucht ob die Ausgabe funktioniert.
Leider Funktioniert die Ausgabe jedes mal ein mal dann ist Schluss.
Was mache ich falsch?
Habe das ganze Projekt hier rein gepackt. Wenn ihr was anderes braucht
bitte sagen.
Danke für die Hilfe
Foerch schrieb:> Was mache ich falsch?
Du beschreibst nicht genau unter welchen Umständen das passiert
und was "einmal" bedeuted. Einmal pro Tag, pro Zeichen, pro
Tastatureingabe, pro Schleifendurchlauf, pro Interrupt, pro was?
Foerch schrieb:> Funktioniert die Ausgabe jedes mal ein mal dann ist Schluss.
Ich kann mich eimal mit dem STM32 St-link Utily verbinden und es kommt
dann einmal mein text. aber nicht sequenziell. Es sollte ja die Zahl
nach test inkrementiert werden. Beim Stm32F103 geht es genau so.
Funktioniert denn dein TogglePin? Also wird der IRQ mehrfach aufgerufen?
Optimiert der Compiler möglicherweise die while(1) weg und das Programm
endet einfach? Verleg doch Testweise deine Schleife in die Whileschleife
im main und mach bevor ich gesteinigt werde nur für den Test eine
HAL_Delay(500) dahinter.
Florian P. schrieb:> Funktioniert denn dein TogglePin? Also wird der IRQ mehrfach> aufgerufen?>> Optimiert der Compiler möglicherweise die while(1) weg und das Programm> endet einfach? Verleg doch Testweise deine Schleife in die Whileschleife> im main und mach bevor ich gesteinigt werde nur für den Test eine> HAL_Delay(500) dahinter.
Das Led Toggelt. Auch wenn ich das Ganze in die While packe ist das
selbe.
Die Optimierung ist aus.
Habe keine Erklärung.
/* Implement your write code here, this is used by puts and printf for example */
4
/* return len; */
5
inti;
6
for(i=0;i<len;i++)
7
{
8
ITM_SendChar(*ptr++);
9
}
10
returnlen;
11
12
13
errno=ENOSYS;
14
return-1;
15
}
Die letzten beiden Zeilen werden nie ausgeführt. War das so gewollt? Auf
jeden Fall sollte der return-Wert = len sein. Was errno angeht, bin ich
unsicher.
Stefan ⛄ F. schrieb:> Foerch schrieb:>> Was mache ich falsch?>> Wie macht Ihr das mit dem SWO beim F302?>> Ohne HAL so:> http://stefanfrings.de/stm32/stm32f3.html#traceswo> http://stefanfrings.de/stm32/stm32f3.html#newlib>> Ich zitiere aus deinem Code:int _write(int32_t file, uint8_t *ptr,> int32_t len)> {> /* Implement your write code here, this is used by puts and printf for> example */> /* return len; */> int i;> for (i=0;i<len;i++)> {> ITM_SendChar(*ptr++);> }> return len;>> errno = ENOSYS;> return -1;> }>> Die letzten beiden Zeilen werden nie ausgeführt. War das so gewollt? Auf> jeden Fall sollte der return-Wert = len sein. Was errno angeht, bin ich> unsicher.
Hallo das die beiden letzten Zeilen nicht erreicht werden ist mir
bewusst.
Beim F103 wie bereits erwähnt ist dies kein Problem.
Habe deinen Code aus dem Link ausprobiert.
Das Ergebnis ist das Selbe.
Einmal beim verbinden des St-Link-Utiliy bekomme ich die Hello World
Ausgabe.
Kann es am Chip liegen? oder was meint ihr?
Was mich sehr stutzig macht ist, dass die Variable i offenbar nicht
hichgezählt wird. Vielleicht mach der µC einen ungewollten Reset.
Konzentriere dich erst einmal mal darauf.
Ich würde alles auskommentieren, was gerade nicht gebraucht wird (auch
die 72 MHz) und innerhalb der Hauptschleife die LED blinken lassen und
Textausgaben machen. Zur Verzögerung (ohne timer!) kannst du die delay
Schleife von meiner Homepage kopieren.
Erst wenn das läuft, würde ich nach und nach wieder alles
einkommentieren, bis der Fehler wieder auftritt.
Du kannst dazu ja in der Hauptschleife versus Timer-Interrupt
unterschiedliche LED's blinken lassen und unterschiedliche Textausgaben
machen, um diese beiden Codes auseinander halten zu können.
Stefan ⛄ F. schrieb:> Was mich sehr stutzig macht ist, dass die Variable i offenbar> nicht> hichgezählt wird. Vielleicht mach der µC einen ungewollten Reset.>> Konzentriere dich erst einmal mal darauf.>> Ich würde alles auskommentieren, was gerade nicht gebraucht wird (auch> die 72 MHz) und innerhalb der Hauptschleife die LED blinken lassen und> Textausgaben machen. Zur Verzögerung (ohne timer!) kannst du die delay> Schleife von meiner Homepage kopieren.>> Erst wenn das läuft, würde ich nach und nach wieder alles> einkommentieren, bis der Fehler wieder auftritt.>> Du kannst dazu ja in der Hauptschleife versus Timer-Interrupt> unterschiedliche LED's blinken lassen und unterschiedliche Textausgaben> machen, um diese beiden Codes auseinander halten zu können.
Hallo,
also der Chip schmiert nicht ab.
Die Led in der Hauptschleife kann ich ansteuern.
Das st_link_Utily macht beim verbinden einen Reset.
Und deshalb ist der Wert immer eins.
Aber es wird nur einmal eine Ausgabe gemacht dann ist Schluss
Mit dem Debugger kann ich in sehen das jedes mal die ITM_SendChar
ausgeführt wird.
Ach so, dann hatte ich wohl deine Fehlerbeschreibung missverstanden.
> Die Led in der Hauptschleife kann ich ansteuern.
Was ist mit Textausgaben? Geht dort auch nur eine Zeile? Und wenn du
beides kombinierst, bekommst du dann eine Zeile aus der Hauptschleife
und eine aus der ISR, oder was passiert dann?
Hängt die ISR eigentlich, wenn die Ausgabe stoppt? Oder schreibt sie den
Text ins Nirvana? Da kann man doch prima debuggen.
Stefan ⛄ F. schrieb:> Was ist mit Textausgaben? Geht dort auch nur eine Zeile? Und wenn du> beides kombinierst, bekommst du dann eine Zeile aus der Hauptschleife> und eine aus der ISR, oder was passiert dann?>> Hängt die ISR eigentlich, wenn die Ausgabe stoppt? Oder schreibt sie den> Text ins Nirvana? Da kann man doch prima debuggen.
Nein in diesem Fall bekomme ich nur eine Zeile aus der Hauptschleife.
Es bleibt nichts hängen wie gesagt mit dem Debugger komme ich bis in die
ITM_SendChar
Dann landet es im Nirvana:(
Foerch schrieb:> debug.PNG
In der LogAusgabe steht:
"08:04:24 SWV Reception STOPPED" .... wer stoppt/startet das?
und weiter oben steht "SWD Frequency 4,0 MHz" in serial Viewer steht
aber 2000kHz...
Ich kenne die ST-IDE leider nicht, aber meine Kombi aus IAR Workbench
mit Segger JTrace/JLink reagiert auf SWD Frequenz "missmatches" auch
gerne mal ungehalten...
VG, Stephan
Stephan schrieb:> In der LogAusgabe steht:> "08:04:24 SWV Reception STOPPED" .... wer stoppt/startet das?
Man kann mit dem Botton in der Gui Starten oder Stopen
Stephan schrieb:> und weiter oben steht "SWD Frequency 4,0 MHz" in serial Viewer steht> aber 2000kHz...
Also das eine ist die Geschwindikeit des SWD und das andere ist die
Geschwindigkeit des SWV die von der Taktfrequenz abhängig ist.
Wenn ich im St-Link-Utily die Frequenz ändere passt sich automatisch die
Frequenz des SWV an.
Foerch schrieb:> Mag mir jemand probieren ein Programm zu schreiben das auf dem SWO Port> was ausgibt?
Siehe Anhang. Die LED hängt an PA5. Taktfrequenz ist 8 MHz (HSI).
Ich habe nur wenige Zeilen zur generierten main.c hinzugefügt:
Leider ist es mir nicht gelungen, die SWO Meldungen innerhalb der STM32
Cube IDE anzuzeigen. Ich bin 100% sicher, das das früher mal geklappt
hatte. Die Ursache für das Problem habe ich nicht gefunden.
Dafür aber einen Workaround: Ich stelle in der "Debug Configuration"
anstelle von GDB den OpenOCD mit "Configuration script: user defined".
In der generierten Datei SWO_Test_mit_HAL Debug.cfg füge ich ganz am
Ende dies ein:
1
tpiu config internal /home/stefan/debug.txt uart off 8000000
2
itm port 0 on
Dadurch bekomme ich SWO Meldungen in die Datei debug.txt geschrieben.
Das hat geklappt.
Stefan ⛄ F. schrieb:> Leider ist es mir nicht gelungen, die SWO Meldungen innerhalb der STM32> Cube IDE anzuzeigen.
Ich habe gerade auf die IDE Version 1.4.0 aktualisiert, jetzt klappt
auch das.
Stefan ⛄ F. schrieb:> Siehe Anhang. Die LED hängt an PA5. Taktfrequenz ist 8 MHz (HSI).
Vielen Herzlichen Dank!!!
Habe das SWO_Test_mit_HAL.elf aus deiner Zip in den Chip geladen ohne
das ich es copiliere.
Das Ergebnis ist aber das selbe :((
Das kann doch nur mehr der Chip sein oder?
Foerch__ schrieb:> Das Ergebnis ist aber das selbe :((> Das kann doch nur mehr der Chip sein oder?
Oder die Stromversorgung. Verwendest du dazu ein USB Kabel? Dann geht es
vielleicht mit einem anderen Kabel besser. Oder einem anderem Port am
PC.
Stefan ⛄ F. schrieb:> Oder die Stromversorgung. Verwendest du dazu ein USB Kabel? Dann geht es> vielleicht mit einem anderen Kabel besser. Oder einem anderem Port am> PC.
Das Nucleo Port ist neu mit verschiedenen USB Kabeln an 2 Notebooks
ausprobiert und immer das selbe! Ich werde......:(
Das kann doch nicht sein einen ganzen Tag zu versemmeln....
Ich bin mittlerweile so drauf das ich es einfach wissen muss was das
Problem ist. Das frisst mich auf.
Kennst du das?
Jetzt funktioniert es :))))))))
Habe jetzt die Firmware des Nucleoboard auf V2J30M19 upgedatet und siehe
da damit klappt es. Sei es mit meiner als auch mit deiner Software!!!
Es ist echt aus der Haut zu fahren!!!!
Ein ganzer Tag für sowas!!!!
Danke allen für die Hilfe
Das passiert beim STLink leider häufiger, ich weiß auch nicht warum da
immer neue Firmware rein muss. Wenn etwas inkompatibel ist, dann sollte
die Software das wenigstens melden.
Johannes S. schrieb:> Wenn etwas inkompatibel ist, dann sollte> die Software das wenigstens melden.
Ja das wäre nicht schlecht! Hatte das Nucleo letzte Woche bei Farnell
bestellt und wollte gestern damit spielen... an ein update hätte ich nie
und nimmer gedacht. Hatte bereits einige dieser nucleo boards und habe
da nie bewusst updates gefahren.
Foerch. schrieb:>> Wenn etwas inkompatibel ist, dann sollte>> die Software das wenigstens melden.> Ja das wäre nicht schlecht!
nach dem Upgrade der IDE von 1.3.0 auf 1.4.0 wurde ich von dieser
aufgefordert, meinen ST-Link (mal wieder) zu aktualisieren. Jetzt frage
ich mich, ob das Update der IDE oder des ST-Link der entscheidende Punkt
war.
Moment mal ..... (gut dass ich ein Backup habe) ......
Tatsache! Jetzt klappt die Ausgabe auch bei mir mit der alten IDE 1.3.0.