Frage

Ich versuche, die STM32 zu reden zu meinem i2c EEprom zu programmieren, aber es scheint, wie jedes Mal wenn ich sage:

I2C_GenerateSTART(I2C1, ENABLE);
while( !(I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)) );  the code hangs here

ging ich mit dem Debugger durch und ich fand, dass die SR1 0 Flag-Bit (das ist der Anfang ist das Bit erzeugt Flag) nicht gesetzt ist, weshalb der Code hängt. Ich kann im Oszilloskop sehen, dass die Start-Bit erzeugt wurde und das funktioniert manchmal. es bricht in der Regel, wenn ich mehrere schreibt in einer Reihe zu tun versucht. Ich überprüfte die HW ist alles sieht gut aus ich die Frequenz überprüft, dass ich auf dem I2C-Bus leite es 100Khz gut innerhalb der 24lc1025 eeprom.

irgendwelche Ideen,

Dank

War es hilfreich?

Lösung

Da Sie sagen, dass dies in der Regel bricht, wenn Sie in einer Reihe mehrere schreibt tun, möchten Sie vielleicht, um sicherzustellen, dass Sie nicht diese Notiz in der STM32 Datenblatt für das STOP Bit im I2C_CR1 Steuerregister verstößt:

  

Hinweis: Wenn die STOP, START oder PEC Bit gesetzt ist, führen Sie die Software darf keine Schreib   Zugang zu I2C_CR1 vor diesem Bit wird durch die Hardware gelöscht. Andernfalls besteht die Gefahr von   eine zweite STOP, START oder PEC Anfrage zu setzen.

Wenn Sie die STOP gesetzt Bit Sie brauchen, um sicherzustellen, dass die Hardware es gelöscht hat, bevor Sie das nächste START Bit schreiben.

Andere Tipps

Überprüfen Sie die Errata für Ihr Gerät (erhalten sie von der ST-Website). Der STM32 hat viele Fehler in der I2C-Implementierung. Die errata gibt Software Abhilfen für sie.

Auch wenn die Treiber-Quelldateien verwenden typischerweise mit STM32-Plattformen zur Verfügung gestellt, vergessen Sie nicht, durch die Header zu lesen! Sie können sehr hilfreich sein, vor allem für Anfänger (wie mich), die nicht sicher sind, wo ich anfangen soll.

In diesem Fall würden Sie suchen stm32f4xx_i2c.c

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top