STM32 I2C Clock Berechnung

Gast #1777488
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
Gast #1777504
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?
#1777515
Lesenswert?

Ich habe mir das so zuammengereimt:
1
    // Set bit rate and rise time.
2
    if (rate <= 100000) {
3
        // 1T low, 1T high
4
        info->dev->CCR = ((F_APB1/2) + rate-1) / rate;
5
        // 1000ns rise time
6
        info->dev->TRISE = F_APB1/1000000 + 1;
7
    } else {
8
        // 2T low, 1T high
9
        info->dev->CCR = ((F_APB1/3) + rate-1) / rate | I2C_CCR_FS | I2C_CCR_DUTY;
10
        // 300ns rise time
11
        info->dev->TRISE = F_APB1/3333333 + 1;
12
    }
Gast #1777516
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren