mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik I2C STM32F103


Autor: Jan (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich bin gerade etwas am verzweifeln. Ich versuche einen I2C am STM32F103 
zum laufen zu bekommen. Hierfür habe ich genau den Code von 
http://diller-technologies.de/stm32.html#i2c genommen. Deswegen habe ich 
das Projekt nicht angehängt (kann ich aber natürlich tun).

Ich möchte einen RCT ansprechen: 
https://datasheets.maximintegrated.com/en/ds/DS1307.pdf

Zum Test wollte ich einfach mal die Sekunden auslesen.

In der main Schleife führe ich folgenden Code aus:
    i2c_writeByte(0xD0,0x00); // wir wollen die Sekunden lesen
    Delay(1);
    i2c_readTwoBytes(0xD0); // jetzt schauen wir ob sie da sind?


Dann erhalte ich Bild1 bzw. Bild1zoom, was erstmal bezüglich des Sendens 
recht ordentlich aussieht. Leider wird beim lese Befehl nur ein Start 
und Stop Bedingung ausgeführt.

Kommetiere ich den ersten Befehl (das schreiben aus), scheint auch der 
Lesebefehl zu funktionieren Logic Analyzer zeigt auf jeden Fall etwas 
plausibles an. Kann mir jemand helfen diesen Fehler zu finden? Wo könnte 
ich wie suchen? Irgendwas wird anscheinden nicht richtig zurückgesetzt 
nach dem Schreiben, oder?

Autor: Johannes S. (jojos)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nach kurzem darüberschauen zu später Stunde:
Nach dem Write darf kein Stop kommen, wie in Fig.6 muss eine Sequenz
Start-I2CAddrWrite-Registernr-Start-I2CAddrRead-data-Stop erzeugt 
werden.

: Bearbeitet durch User
Autor: dochgast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich bin nicht so der Crack für I2C, aber lt. Datenblatt S.13 ist lesen 
so:
Slave Adress (D0) Word Adress (00) Slave Adress (D1) Daten Daten Daten
Bit 0 bei der Adress lesen und schreiben! Befehl schreiben, dann Daten 
lesen.

Autor: Edgar M. (edgar)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier ist ein Black Pill mit I2C in Aktion. In der Anleitung, die sehr 
ausführlich ist, wird Schritt für Schritt vorgegangen.

Autor: Pit (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das letzte Bit bei der Adresse entscheidet über lesen oder schreiben. Da 
scheints mir irgendwie zu hakeln.

Gruß Pit

Autor: Hint Hint (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So könnte es klappen (symbolischer Code):
uint8_t DS1307_ReadDataFrom (uint8_t memaddr)
{
  uint8_t val;

  I2C_SetStart ((uint8_t)DS1307_ADDR);        // write mode, start condition
  I2C_WriteByte ((uint8_t)memaddr);           // write address
  I2C_SetStart ((uint8_t)(DS1307_ADDR + 1));  // read mode, repeated start
  val = I2C_ReadByte ();                      // read data
  I2C_SetStop ();                             // stop condition

  return val;
}

Autor: Benedikt S. (benedikt_s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was ist das für ein Logikanalysator?

Autor: Stefanus F. (stefanus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Benedikt S. schrieb:
> Was ist das für ein Logikanalysator?

Steht in der Kopfzeile: PulseView (gehört zu Sigrok), das ist die freie 
Alternative zur Saleae Software.

Autor: stmfresser (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hardware I2C vom STM32F103 ist buggy steht im Errata Sheet. Ich habe 
lange Zeit versucht einen IMU über I2C auszulesen, habe gescheitert. Da 
manchmal kein ACK kam. Den selben Code habe ich auf gd32f103 ausprobiert 
und funktioniert.

Autor: Hint Hint (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
stmfresser schrieb:
> Hardware I2C vom STM32F103 ist buggy steht im Errata Sheet.

Für solche Fälle mache ich immer Soft-I2C. Das ist ganz
einfach und funktioniert prächtig solange man keinen Slave
zu implementieren braucht.

Ausserdem hat man die praktisch freie Wahl der Pinbelegung.

Autor: Edgar M. (edgar)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Jan,
in der Datei STM32_DS1307.pdf habe ich versucht deine eingangs gestellte 
Frage zu beantworten.
MfG

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.