Gast
#4989654
Hallo, ich verzweifele gerade am STM32F446 mit dem FastMode+ I2C (FMPI2C). Die Funktionen für das I2C an sich sind denke ich korrekt geschrieben. Das Problem, so wie ich das sehe, liegt an der I/O Init. Ich initialisiere PC6/7 wie folgt (Datenblatt ab Seite 184 GPIO Registers): Register MODE: Bit13,15 setzen (Alternative Funktion) Register SPEED: Bit10,11,12,13 setzen (High Speed) Register PullUpDown: 0 (Externer Pull-Up) Register AlternativeFctHi 0 Register AlternativeFctLo Bit26,30 setzen (I2C Active) Register OutputType Bit6,7 setzen (Open Drain) Jetzt passiert folgendes: Wenn ich im OutputType nur Bit 6 setze (CLK) wird mir ein wunderschönes Signal erzeugt mit 100 kHz, Daten werden gesendet sieht alles gut aus. Problem: SDA ist PushPull und damit kann der Slave den ACK nicht auf 0 ziehen. Setze ich jetzt auch noch das Bit 7 im OutputType Register (SDA as Open Drain), dann ist SDA auf High im Ruhezustand, CLK geht sofort nach der Init auf 0 und es wird mir, egal was ich mit den FMP-Registern mache, kein Takt und Daten mehr erzeugt. Jetzt meine Frage: Was mache ich hier falsch?! Ich verstehe es absolut nicht mehr. Habe ich was übersehen?! Bitte um Hilfe!