www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik STM32 I2C Clock Berechnung


Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,


weiß jmd wie die Berechnung der I2C Frequenz beim STM32F103 
funktioniert? Bzw. wie kann ich z.B. genau 100kHz angeben?

Im Register ist nur Freq[5:0] Peripheral clock frequency angegeben

"The peripheral clock frequency must be configured using the input APB 
clock frequency (I2C peripheral connected to APB). The minimum allowed 
frequency is 2 MHz, the maximum frequency is limited by the maximum APB 
frequency (36 MHz) and an intrinsic limitation of 46 MHz."

Eine Berechnung finde ich leider im Datenblatt nicht.


Gruß
Stefan

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"If FREQR = 08, TPCLK1 = 125 ns so CCR must be programmed with 0x28
(0x28 <=> 40d x 125 ns = 5000 ns.)"

das hab grad noch im Datenblatt gefunden; ist mit 8MHz die Frequenz vom 
Quarz gemeint? Und woher kommen die 5000ns?

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe mir das so zuammengereimt:
    // Set bit rate and rise time.
    if (rate <= 100000) {
        // 1T low, 1T high
        info->dev->CCR = ((F_APB1/2) + rate-1) / rate;
        // 1000ns rise time
        info->dev->TRISE = F_APB1/1000000 + 1;
    } else {
        // 2T low, 1T high
        info->dev->CCR = ((F_APB1/3) + rate-1) / rate | I2C_CCR_FS | I2C_CCR_DUTY;
        // 300ns rise time
        info->dev->TRISE = F_APB1/3333333 + 1;
    }

Autor: TSE (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hast du die Möglichkeit das zu messen?
Schreib einfach ein kleines programm wo du I2C initialisierst und schick 
was raus.....

so weit ich mich aber noch erinnern kann ist der Wert den du in das 
Register geschrieben hast der tatsächliche Tacktwert. Also bei 400kHz 
400000 schreiben.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stefan schrieb:

> Quarz gemeint? Und woher kommen die 5000ns?

5µs low, 5µs high => 10µs Periode => 100KHz.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tip nebenbei: Erst Takt vom I2C-Modul einschalten, dann Pins 
konfigurieren. Gibt sonst Puls auf SCL/SDA.

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
vielen Dank für eure Antworten!

Eine Frage hab ich noch bezüglich des CR2-Registers; welchen Sinn bzw. 
Zweck verfolgen die 6Bits FREQ[5:0] in diesem Register?

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
PS: Im obigen Code ist der >100KHz Zweig Unfug. Beweis für die Regel, 
dass was man mangels entsprechender Devices nicht testet dann auch nicht 
funktioniert.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zu CR2:
info->dev->CR2 = I2C_CR2_ITEVTEN        // event interrupt enabled
               | I2C_CR2_ITERREN        // error interrupt enabled
               | F_APB1 / 1000000;      // peripheral clock frequency
Könnte mit den Timeouts vom SMBUS zusammenhängen.

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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.