Forum: Mikrocontroller und Digitale Elektronik STM32: Peripherie clock spezifischen Wert einstellen


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Solocan Z. (solocan)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich möchte ein Audio Codec(PCM3060) betreiben. Datenblatt schreibt vor, 
dass der Master (System) clock MCK=128*fs (oder 256, 384, 512, 768) 
betragen muss. Der Bit clock BCK hingegen muss BCK=64*fs betragen, wobei 
fs Sampling frequency ist, also in dem Fall sagen wir mal 96kHz. (Zudem 
gibt's noch ein Left-right CLK aber den stelle ich mal mit einer GPIO 
zur Verfügung)

Daraus berechnet sich:


fs=96kHz
MCK=24,576MHz
BCK=6,144MHz
LRCK=192kHz

die STM32(Master) dem Codec(Slave) zur Verfügung stellen muss.

Der Kern ist getaktet auf 216MHz. D.h. ich kann obengenannte Peripherie 
Clocks nicht durch Divider erreichen. Da bin ich doch etwas verwirrt. 
Ich kann theoretisch MCK und BCK an die nächstmöglichen Werte einstellen 
aber dann kann ich nicht mein fs=96kHz (oder von mir aus 48 etc. ) nicht 
exakt einhalten.

Wie gehe ich jetzt am Besten vor? Wie stelle ich solche blöden 
Frequenzen zur Verfügung?

(Anbei paar Bilder)

Vielen Dank und Grüße

: Bearbeitet durch User
von Mw E. (Firma: fritzler-avr.de) (fritzler)


Bewertung
0 lesenswert
nicht lesenswert
Du machst da ganix per GPIO.
Das macht dir alles der SPI im I2S Modus oder der SAI.
Guck dazu in das passende Referencemanual zu deinem spezifischen STM32.

Für den MCK gibts meistens sogar noch ne extra Audio PLL und einen Takt 
Eingang für ein "Audiofrequenzquarz"

von TrollJäger (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Dein Stichpunkt: Clock-tree

von Solocan Z. (solocan)


Bewertung
0 lesenswert
nicht lesenswert
Ich kämpf gerade mit dem 2000Seiten HAL manual. Ich bin noch nicht 
fündig geworden wie ich diese "Audiofrequenzquarz" rummultiplizieren 
kann...

Es gibt im Abschnitt SAI schon die Audio-Frequenzen-Clock. Wie stelle 
ich die Potenzen davon zur Verfügung? Eben das finde ich noch nicht.

TrollJäger schrieb:
> Dein Stichpunkt: Clock-tree

Was meinst du denn mit Clock-tree genau? In CubeMX ist ja ein 
Clock-Tree, der aber nichts von Audio-Frequenzen wissen will.

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Bewertung
0 lesenswert
nicht lesenswert
Nimm nicht den gammligen HAL, sondern guck doch erstmal in die 
Beschreibungen im RefMan.

Die Hardware wird dir da erst ausführlichst erklärt und dann werden die 
Register und Bits erklärt.
Erst wenn du DAS verstanden hast verstehste auch den HAL.

RefMan Kapitel für dich:
-RCC
-SAI

von Christopher J. (christopher_j23)


Bewertung
0 lesenswert
nicht lesenswert
Mw E. schrieb:
> Nimm nicht den gammligen HAL, sondern guck doch erstmal in die
> Beschreibungen im RefMan.

Der Meinung bin ich allerdings auch. Seit CubeMX scheint es nichts 
anderes mehr zu geben... CubeMX an, Augen zu, Hirn aus... traurig...

Es gibt einen I2S_CKIN-Pin über den du I2S/SAI mit einem externen Takt 
versorgen kannst. Ein typischer Wert für so einen Quarz wäre z.B. 12,288 
MHz.

Alternativ gibt es aber für I2S/SAI separate PLLs. So als Tipp:
16/10*270/2 = 216
16/10*270/9 = 48
16/10*192/5/5 = 12,288

: Bearbeitet durch User
von Oli P. (atomicjunkie)


Bewertung
0 lesenswert
nicht lesenswert
Hast du in CubeMX auch eines der I2S-Interfaces aktiviert?

von Solocan Z. (solocan)


Angehängte Dateien:

Bewertung
1 lesenswert
nicht lesenswert
Vielen Dank für zahlreiche Inputs.

Nun bin ich -zumindest in der Theorie und Verständnis- weitergekommen.

Die Clocks, die ich generieren will, scheinen doch mit den internen 
Uhren und PLLs machbar zu sein. Meine Lösung hänge ich an. Mit dem 
letzten Teiler kann man sogar problemlos zwischen 49152kHz, 24576kHz und 
12288 kHz etc. wählen.

Ein sehr hilfreiches und ausführlich geschriebenes Dokument dafür ist:

https://www.st.com/content/ccc/resource/training/technical/product_training/group0/35/bb/c4/23/6a/74/4a/2b/STM32F7_Peripheral_SAI/files/STM32F7_Peripheral_SAI.pdf/_jcr_content/translations/en.STM32F7_Peripheral_SAI.pdf

Alternativ könnte ich auch einen externen Quarzoszillator mit 
Audiofrequenz nehmen. Scheint auch problemlos zu funktionieren mit 
STM32. Ich glaube, ich werde so einen als alternative Clock in meine 
Platte reindesignen.

Viele Grüße und vielen Dank noch mal

P.S: Zum Thema HAL und CubeMX: Klar, ich schätze auch richtig Low-Level 
auf der Registerebene zu arbeiten. Bei genügendem Wissen ist das der 
beste Weg. Allerdings bin ich noch kein Held in STM32 und so eine 
Konfigurationssoftware und eine Bibliothekensammlung mehr als hilfreich! 
Ich schalte natürlich nicht den Hirn aus, versuche sondern, durch die 
generierten Beispiele mich tiefer einzuarbeiten. Für einen schnelleren 
Einstieg finde ich diese sehr sehr hilfreich - viel besser als 
unendliche RefMans durchzuarbeiten ohne jegliche Beispiele. Das ist auch 
wichtig, um das Rad nicht zwei mal zu erfinden.

Ich merke, ich habe selber wenig Verständnis für die High-Level tools 
bei den Sachen, die ich sehr gut beherrsche. Aber wir müssen ins 
Kenntnis nehmen, dass diese doch sehr nützlich sein können und aufhören 
diese pauschal zu diffamieren.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.