STM32F030 + I2C + libopencm3

OP #4753037
Lesenswert?
• ▲
▼
... und wieder ein Problem mit Software die ich nicht selbst geschrieben 
habe !!!

( ... und ich höre schon, was mir W.S. - wer immer das auch ist - 
schreiben wird: machs selbst und hör auf fertige Libraries zu verwenden 
).

... und auf selbstschreiben wirds wieder mal hinauslaufen.

Folgendes Problem:

mit libopencm3 funktionierte ein STM32F103 in Verbindung mit I2C 
klaglos. Ein einfacheres Programm sollte nun auf eben einen STM32F030 
übertragen werden und damit fängt jetzt mein Problem an.

Die Lib bietet keine "richtige" Unterstützung für STM32F030 an.
Der Header und die dazugehörige Source i2c_common_all wird nicht mit 
eingebunden.

Naaaaaatürlich hat es nicht funktioniert, dem Linker einfach zu sagen: 
binde mir das mit ein (denn es hat wohl einen Grund warum das in der 
"offiziellen" Library nicht eingebunden ist.

Wenn ich mir das Datenblatt zum F0 richtig anschaue (und ich habe eine 
neue Brille) komme ich zu folgendem:

Die Belegungen (und nicht nur der Bitpositionen) der Register der 
Library  bspw. I2C_CR2 stimmen in keinster Weise mit dem Datenblatt 
überein.

Spinne ich jetzt komplett und seh irgendwas nicht richtig oder wurde in 
libopencm3 wirklich die I2C Unterstützung "vergessen" ???

Beispielsauszug von i2c_common_all.c (im Ordner für F0)
1
void i2c_set_clock_frequency(uint32_t i2c, uint8_t freq)
2
{
3
         uint16_t reg16;
4
         reg16 = I2C_CR2(i2c) & 0xffc0; /* Clear bits [5:0]. */
5
         reg16 |= freq;
6
         I2C_CR2(i2c) = reg16;
7
}

Würde bedeuten, dass die Bits 0..5 die Taktfrequenz einstellt.

Lt. Datenblatt sind die Bits hier Slave-Adress-Bits
(Quelle Datenblatt RM0360 Seite 581)

Sehe ich das richtig ??? (und ... hrmpf .... wenn ich da recht habe 
bleibt mir dann nichts anderes übrig, als ein I2C selbst neu zu machen)

Für den Fall dass jemand dasselbe Problem mit libopencm3 hatte und es 
(also das Problem : - ) ) gelöst hat... Zeigst du mir deine Lösung ?

Gruß Ralph

PS ... und gleich an W.S ... ich weiß: selbstmachen (Faulheit holt einen 
immer wieder ein)

PS2 ... für den Moment habe ich mir beholfen, eine Software I2C Funktion 
zu implementieren. Schön ist das allerdings nicht !
#4753045
Lesenswert?
• ▲
▼
Ich kenne die libopencm3 nicht wirklich, daher weiß ich nicht ob das 
hier das Problem ist:

Beim STM32F0 hat ST (zum Glück) eine im Vergleich zum STM32F1 deutlich 
überarbeitete Version der I2C-Hardware verbaut. Die vom STM32F1 hat 
einige Bugs und ist sehr zickig anzusteuern.

Es kann sein daß die libopencm3 hier nicht richtig an die neue Hardware 
angepasst ist.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.