Moin,
hab mir jetzt schon ein paar Threads angeschaut, aber irgendwie wird
meine Frage nicht so richtig beantwortet.
Folgendes liegt vor:
-STM32F4 Discovery
-CooCox
-Standard Periphal Library
-Takt 168MHz (PLL und alles schön eingestellt)
-Timer 2
Ich würde gerne einfach die blaue LED im 1s Takt blinken lassen. Ich
steige aber einfach nicht durch die Einstellung des Timers durch, also
wie müssen Prescaler gesetzt werden etc..
Hallo,
Basistakt des Timers anschauen TIM2
Herz = 1
Tim2Takt = 84000000
Prescaler = 10000/Herz
Periode = Tim2Takt/Prescaler
sollte bei einer Sekunde ankommen wenn ich nicht zu besoffen bin
Gruß J.
Die LEDs blinkt nicht, bzw. so langsam das man es nicht sieht. Sobald
ich die usart Routine reinpacke sieht man ein blinken, aber auch nur
weil die usart Routine so langsam ist und die LED länger an lässt ...
Habe auch kein Oszi da um mir den Pin mal anschauen zu können. Irgendwie
läuft mein Board zu schnell.
Ist das so richtig eingestellt? Oder habe ich noch was vergessen?
1
#if !defined (HSE_VALUE)
2
#define HSE_VALUE ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */
Bist du sicher dass der F4 mit 168MHzb taktet?
Ich musste bei den CooCox Dateien einige Korrekturen durchführen fürs
Discovery:
+ 8MHz Quartz statt wie eingestellt 25MHz
+ INIT wird nicht aufgerufen, deshalb ist der PLL auf 20MHz statt 168MHz
Hier hast du ein CooCox/Discovery F4 Demo von mir, das unter anderem die
vier LED blinken lässt:
xs1541.t-winkler.net/zip/Zoomfloppy/Stm32F407_blink_06.zip
Neben der Blinkerei wird auch das SDIO (bzw. eine SD Karte) getestet und
der USART 2 initialisiert und benutzt.
Wenn am USART ein Terminal hängt kommt in etwas sowas:
### Discovery 32F4 Demo ###
PCLK1: 42000000
PCLK2: 84000000
SYSCLK: 168000000
-----------------
initialize SDIO system ...
drive 0 ok
3869984 KB total drive space.
3871744 KB available.
SDIO system ok, free clusters: 120937
--- read/write test
Zeile 1
Zeile 2
Zeile 3
textfile test ok.
--- reading directory
D1541II.BIN
DOS1541.BIN
TRKCACHE.BIN
D.D64
TEST.TXT
TEST2.TXT
BASEN.D64
EXASS.D64
TAXI.D64
<SPIELE>
<APPS>
Thomas Winkler schrieb:> Bist du sicher dass der F4 mit 168MHzb taktet?
Inzwischen bin ich mir da schon nicht mehr so sicher ...
> Ich musste bei den CooCox Dateien einige Korrekturen durchführen fürs> Discovery:>> + 8MHz Quartz statt wie eingestellt 25MHz
Wie oben gezeigt habe ich das eingestellt.
> + INIT wird nicht aufgerufen, deshalb ist der PLL auf 20MHz statt 168MHz
Wenn du die "SystemInit();" meinst, dann ist diese vorhanden.
Zum testen hab ich jetzt eine delay Fuktion eingebaut
1
voiddelay(volatileuint32_tdelay_time){
2
while(delay_time>0){
3
delay_time--;
4
}
5
}
Normalerweise müsste ja bei delay_time = 168.000.000 eine Verzögerung
von ca. 1s auftreten oder? Wenn ich den Wert lasse dauert die
Verzögerung aber so ziemlich genau 10s. Mach ich den Wert entsprechend
um 10 kleiner , also delay_time = 16.800.000, dann habe ich so ziemlich
genau 1s.
Irgendwo muss dieser Faktor drin stecken. Ich vermute daher, dass der
Takt 16,8MHz ist, ich werde mal schauen ob ich irgendwo eine 0 zu viel
oder zu wenig habe ...
Thomas Winkler schrieb:> Hier hast du ein CooCox/Discovery F4 Demo von mir, das unter anderem die> vier LED blinken lässt:>> xs1541.t-winkler.net/zip/Zoomfloppy/Stm32F407_blink_06.zip>>> Neben der Blinkerei wird auch das SDIO (bzw. eine SD Karte) getestet und> der USART 2 initialisiert und benutzt.
Hab das Packet mal compiliert. Da scheinen zwei Dateien zu fehlen:
1541.h und EvalBoard.h.
Bisher danke soweit für deine Bemühungen :)
Eigentlich müsste es sich unter CooCox 1.5 fehlerfrei kompilieren
lassen. Bei mir sind einige Dateien vom Build ausgenommen.
Habe gerade kein CooCox zur Hand, ich schau mir das abends an.
Thomas Winkler schrieb:> übrigens sollten auch binaries dabei sein ...
Auf die Idee bin ich auch gerade gekommen. Folgende Meldung bekomme ich:
### Discovery 32F4 Demo ###
PCLK1: 42000000
PCLK2: 84000000
SYSCLK: 168000000
-----------------
initialize SDIO system ...
failed to execute f_getfree(). rc=3
liegt wohl daran, dass ich keine SD Karte dran habe. Mit deinem Projekt
scheint der Takt auch richtig zu laufen.
Werd mal deine Diagnose Funktion in mein Projekt kopieren und schauen
welche Werte der mir ausspuckt.
> Wenn du die "SystemInit();" meinst, dann ist diese vorhanden.
Ja aber wo wird Sie aufgerufen. Vorhandensein alleine reicht nicht, die
muß auch von irgendwo aufgerufen werden.
Thomas Winkler schrieb:> Klar muss eine SD Karte da sein. Blinken die LED's nicht trotzdem?
Jop die blinken schön.
Uwe schrieb:> Ja aber wo wird Sie aufgerufen. Vorhandensein alleine reicht nicht, die> muß auch von irgendwo aufgerufen werden.
Wird als ganz erstes in der main(); aufgerufen.
Ich bin davon überzeugt, dass der Fehler was ganz banales ist. Was ich
aber mit meiner Umwissenheit nicht finde ...
Daher hier nochmal der komplette Quelltext:
////////////////////////////////////////////////////////////////////////
Wenn die obige Änderung keinen Erfolg bringt, so habe ich hier noch
einen Beispielcode für dich:
Jo discovery schrieb:> Ändere diese Interruptfunktion hier ab ...
WTF! Es geht! :D
Vielen Dank an euch!!!
Und warum löst diese banale Änderung das Problem?!
STM32Einsteiger schrieb:> Jo discovery schrieb:>> Ändere diese Interruptfunktion hier ab ...>> WTF! Es geht! :D> Vielen Dank an euch!!!>> Und warum löst diese banale Änderung das Problem?!
Weil das Interruptflag eine Weile benötigt bis es gelöscht ist und somit
noch nach Verlassen der Interruptroutine aktiv ist.
Merke: Das Interruptflag immer ganz am Anfang der Interruptroutine so
früh wie möglich löschen!
Jo discovery schrieb:> Weil das Interruptflag eine Weile benötigt bis es gelöscht ist und somit> noch nach Verlassen der Interruptroutine aktiv ist.>> Merke: Das Interruptflag immer ganz am Anfang der Interruptroutine so> früh wie möglich löschen!
Gut zu wissen.
Hab das mit den Timer, dann doch kapiert gehabt. Die
Ursprungseinstellung des Timers funktioniert auch mit der Änderung. Was
ganz oben zu sehen ist, war die pure Verzweiflung und Ausprobierwut.
Danke nochmal an euch! :)
Hallo!
Wollte kein neuen Thread für meine Frage aufmachen.
Habe mir vor paar Tagen einen STM32F429 Evalboard mit LCD gekauft.
Gleich einzelne Peripherie in Betrieb genommen.
Leider funktionieren immer die einfachsten Sachen nicht :)
Aktuell benutze ich den SDRAM und LCD.
Nun brauche ich noch den Timer Interrupt. Genau dieser läuft nicht.
Die ganzen Beispiele, die ich gefunden habe, machen eine LED an und aus.
Das sollte als Grundlage sicherlich reichen, aber irgendwie läuft das
nicht.
GPIO brauche ich nicht, ich will nur, dass der Timer IRQ ausgelöst wird.
Wenn jemand mit mehr erfahrung da mal drüberschauen könnte, wäre das
schon eine große Hilfe. Sitze da schon seit 8 Stunden :( Total peinlich
sowas :)
Bis auf das Wesentliche gekürzt:
Wie gesagt, ich benutze den LCD und SDRAM, nicht, dass da sich mit dem
Timer IRQ was überschneidet.
Der Code lässt sich soweit compilieren, aber z.B. LCD funktioniert dann
nicht mehr. Kommentiere ich der Timercode aus, läuft alles wieder.
Vielen Dank!
Gruß
Alex S.