STM32 I2C sendet nichts

OP #1778438
Lesenswert?
• ▲
▼
Hallo,

kann mir jmd helfen bei meinem STM32F103 Prozessor? Im Moment versuche 
ich über I2C eine Kommunikation aufzubauen; bis jetzt wird aber nichts 
gesendet!"

1
//i2c clock
2
RCC->APB1ENR |= 0x00400000; 
3

4
//portb clock enable
5
RCC->APB2ENR |= 0x00000008;
6

7
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11;
8
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
9
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;
10
GPIO_Init(GPIOB, &GPIO_InitStructure);
11
  
12
I2C_InitSt.I2C_Mode = I2C_Mode_I2C;
13
I2C_InitSt.I2C_DutyCycle = I2C_DutyCycle_2;
14
I2C_InitSt.I2C_OwnAddress1 = 0x58;    //addr vom eeprom 
15
I2C_InitSt.I2C_Ack = I2C_Ack_Enable;
16
I2C_InitSt.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
17
I2C_InitSt.I2C_ClockSpeed = 100000;
18
I2C_Init(I2C2, &I2C_InitSt);
19

20
/* Enable the selected I2C peripheral I2C_Cmd(I2C2, ENABLE) */
21
I2C2->CR1 |= 0x0001;

Nach dieser Initialisierung ist die Clock low und der SDA ist high.

1
//send start condition 
2
I2C2->CR1 |= 0x0100;
3
while (!(I2C_sr() & 0x0001));

Das Bit wird richtig gesetzt im SR Register; I2C_sr() gibt den Inhalt 
vom Status Register zurück.
1
I2C2->DR = IntAddr | 0; //addr die beschrieben werden soll
2
while (!(I2C_sr() & 0x0002));

Hier wird das entsprechende  Bit nicht gesetzt, so dass der Prozessor 
hier verweilt; aut dem Bus kann man wie gesagt mit dem Oszi nichts 
erkennen; Pullups sind vorhanden.

Gruß
Bernd
OP #1778639
Lesenswert?
• ▲
▼
Als Fehlermeldung nach dem "Senden" der Daten, welche auf dem Bus 
genauso wenig zu sehen sind, wie die Slaveaddr... bekomm ich im status 
register die fehlermeldung "Misplaced Start or Stop condition"


Hab auch schon das Beispiel von der ST Seite ausprobiert - gleiches 
Verhalten. Die richtigen Pins sind es auf jeden Fall; kann diese auch 
als GPIO entsprechend steuern / high low schalten....
#1778657
Lesenswert?
• ▲
▼
Die Reihenfolge der Initialisierung könnte eine Rolle spielen. Ich hatte 
beobachtet, dass abhängig davon die SCL/SDA-Pins einen low-Puls auf den 
Bus brachten, der Devices irritieren kann. Also evtl. mal das I2C-Modul 
komplett vor den GPIO-Pins initialiseren, oder zwischen I2C-Takt und 
Pin-Konfiguration etwas Zeit verstreichen lassen.
OP #1778740
Lesenswert?
• ▲
▼
danke für den Tip!

Habs mal mit Delays probiert und zuerst I2C und dann die GPIOs 
initialisiert;

Auf der Datenleitung passiert immer noch nichts - die ganze Zeit high. 
Und auf der Clock-Leitung.... die ist während der Initialisierung jetzt 
auf high; dann werden ca. 6 Takte gesendet und dann ist sie die ganze 
Zeit auf low...
Gast #1779728
Lesenswert?
• ▲
▼
Jetzt bekomm ich zumindestens schon mal was angezeigt auf den beiden 
Leitungen; allerdings sieht es so aus, als ob der ACK Puls vom Device zu 
kurz ist und somit nicht erkannt wird.

Verwende ich das Bsp von ST, ist dieser Impuls größer bzw. länger, so 
dass er auch noch bei der fallenden Clock-Flanke vorhanden ist und 
erkannt wird. Bei diesem Bsp ist es allerdings so, dass ich zwar den 
Eeprom beschreiben kann aber anschließend nicht mehr auslesen...

Muss zwischen Schreiben und Lesen irgendetwas beachtet werden?

Bernd

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.