... 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 !