Forum: Mikrocontroller und Digitale Elektronik STM32F4 SPI Clock


von Meilo (Gast)


Lesenswert?

Guten Tag,

ich habe eine STM32F4 Schaltung mit 10Mhz Quarz.
In der Makefile habe ich deshalb folgendes stehen: DHSE_VALUE=10000000

Wenn ich jetzt SPI benutze und den Prescaler auf 2 stelle, dann kann ich 
mit dem Oszilloskop am SCK Pin 20,92 Mhz messen. Bei einem Prescaler von 
4 sind es 10,45 Mhz, bei einem Prescaler von 32 sind es 1,32 Mhz usw. 
Wie kann das sein? Maximal dürfe die SPI Frequenz doch nur halb so groß 
wie die Frequenz des Quarzes sein?!

Ich habe dann auch noch überall wo HSE_VALUE definiert wird den Wert auf
  #define HSE_VALUE    ((uint32_t)10000000U)
gesetzt, falls das -DHSE_VALUE aus der Makefile irgendwie ignoriert 
wird.

Woran kann das liegen?

Freundliche Grüße.

PS: Es gab mal eine Excel-Tabelle, in der man sich die Prescaler und 
Takte ausrechnen konnte. Leider bin ich im Internet nicht fündig 
geworden. Kann mir da jemand helfen?

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Meilo schrieb:
> Wie kann das sein? Maximal dürfe die SPI Frequenz doch nur halb so groß
> wie die Frequenz des Quarzes sein?!

Der SPI versorgt sich aus einem der APB-Takte, welcher aus der PLL 
kommt, mit welcher man den Quarz-Takt vervielfachen kann. Daher ist der 
SPI (und Prozessor und restliche Peripherie) schneller als nur der 
Quarz-Basistakt.

Meilo schrieb:
> PS: Es gab mal eine Excel-Tabelle, in der man sich die Prescaler und
> Takte ausrechnen konnte.

Diese diversen Excel-Tabellen wurden vom STM32CubeMX-Tool abgelöst. Das 
kann für alle STM32 die Taktkonfiguration berechnen.

von Andreas Müller (Gast)


Lesenswert?

Niklas G. schrieb:
> Meilo schrieb:
>> Wie kann das sein? Maximal dürfe die SPI Frequenz doch nur halb so groß
>> wie die Frequenz des Quarzes sein?!
>
> Der SPI versorgt sich aus einem der APB-Takte, welcher aus der PLL
> kommt, mit welcher man den Quarz-Takt vervielfachen kann. Daher ist der
> SPI (und Prozessor und restliche Peripherie) schneller als nur der
> Quarz-Basistakt.


Wie kommst Du denn auf den Unsinn?
Beim F446 oder F407 z.B. kommt der Takt für den APB aus dem AHB (ggf. 
aus dem AHB Prescaler). Und der AHB wiederum hängt am SYSCLK.
Und der kann sich aus verschiedenen Taktquellen speisen.
Einfach mal ins Ref-Manual schauen...

von Meilo (Gast)


Lesenswert?

Top. Dank dir! Das hat mir bereits geholfen.

von Andreas Müller (Gast)


Lesenswert?

Meilo schrieb:
> Guten Tag,
>
> ich habe eine STM32F4 Schaltung mit 10Mhz Quarz.
> In der Makefile habe ich deshalb folgendes stehen: DHSE_VALUE=10000000
>
> Wenn ich jetzt SPI benutze und den Prescaler auf 2 stelle, dann kann ich
> mit dem Oszilloskop am SCK Pin 20,92 Mhz messen. Bei einem Prescaler von
> 4 sind es 10,45 Mhz, bei einem Prescaler von 32 sind es 1,32 Mhz usw.
> Wie kann das sein? Maximal dürfe die SPI Frequenz doch nur halb so groß
> wie die Frequenz des Quarzes sein?!


Wie hast Du denn den STM32F4 konfiguriert? Welche Taktquelle und falls 
PLL, welche Werte für PLLM/N/P?


> PS: Es gab mal eine Excel-Tabelle, in der man sich die Prescaler und
> Takte ausrechnen konnte. Leider bin ich im Internet nicht fündig
> geworden. Kann mir da jemand helfen?


Wird jetzt sicherlich eine Riesenüberraschung für Dich sein, aber das 
steht im Reference Manual!
Ist auch gar nicht schwer. Das Bestimmen der Werte dauert auch nicht 
länger, als ein Excel-Sheet aufzumachen.

von Verwunderter (Gast)


Lesenswert?

Meilo schrieb:
> Das hat mir bereits geholfen.

Was? Der Hinweis ins Ref-Manual zu schauen? Bist du da
nicht selbst drauf gekommen?

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Andreas Müller schrieb:
> Wie kommst Du denn auf den Unsinn?

Ich habe der Einfachheit halber ein paar Zwischenschritte ausgelassen.

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
Noch kein Account? Hier anmelden.