STM8S I2C empfängt nur einmal etwas. Bitte hilfe

OP #4886596
Lesenswert?
• ▲
▼
Hallo zusammen

Ich habe hier ein STM8S103F3P6 Controller-Board.
Dieses möchte ich als I2C Slave betreiben.
Master ist ein Arduino Board (also die Wire() Library)

Nun bin ich schon seit Stunden am Problem dran.
Das Board empfängt den ersten Datenblock von 10 Bytes korrekt.
Dannach nicht mehr. Es sind auch diverse Register Bits weiterhin gesetzt 
nach dem ersten Empfang.

Ich wäre sehr froh, wenn mir jemand helfen könnte.

Anbei die Screenshots.
Es sieht so aus, als würde der STM Controller die CLK Leitung 
blockieren.
Wenn ich den STM neustarte, gehts nämlich wieder einmal.

Ich schliesse aus, dass der Master ein problem hat.

STM8_1.png zeigt die erste Übertragung.
STM8_2.png zeigt die Register des STM8 nach der ersten Übertragung.
STM8_3.png zeigt den Empfangsbuffer. Dieser ist korrekt befüllt
STM8_4.png zeigt die Register nach der zweiten Übertragung
STM8_5.png zeigt die zweite Übertragung

I2C Masterclock ist ca. 93kHz.
STM8 Clock ist 16MHz


Danke schonmal

Initialisierung:
1
CLK_DeInit();
2
  CLK_HSICmd(ENABLE); //Activate 16MHz Clock
3
  CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);
4
  CLK_SYSCLKConfig(CLK_PRESCALER_CPUDIV1);
5
  
6
  //CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);
7
  I2C_DeInit();
8
  I2C_Init(100000, 0x03, I2C_DUTYCYCLE_2, I2C_ACK_CURR, I2C_ADDMODE_7BIT, 16); 
9
  I2C_ITConfig((I2C_IT_TypeDef)(I2C_IT_ERR | I2C_IT_EVT | I2C_IT_BUF), ENABLE);
10
  
11
  enableInterrupts();



Interrupt:
1
INTERRUPT_HANDLER(I2C_IRQHandler, 19)
2
{
3
  
4
  if ((I2C->SR2) != 0)
5
  {
6
    /* Clears SR2 register */
7
    I2C->SR2 = 0;
8

9
  }
10
  Event = I2C_GetLastEvent();
11
  switch (Event)
12
  {
13
      /******* Slave receiver **********/
14
      /* check on EV1*/
15
    case I2C_EVENT_SLAVE_RECEIVER_ADDRESS_MATCHED:
16
        Rx_Idx = 0;
17
      break;
18

19
      /* Check on EV2*/
20
    case I2C_EVENT_SLAVE_BYTE_RECEIVED:
21
        Slave_Buffer_Rx[Rx_Idx++] = I2C_ReceiveData();
22
      break;
23

24
      /* Check on EV4 */
25
    case (I2C_EVENT_SLAVE_STOP_DETECTED):
26
            /* write to CR2 to clear STOPF flag */
27
            I2C->CR2 |= I2C_CR2_ACK;
28
            i2cFlag = 1;
29
      break;
30

31
    default:
32
      break;
33
  }
34
}
Angehängte Dateien:

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.