Comunicación Arduino y STM8 I2C

0

Quiero la comunicación I2C stm8s (esclavo) y arduino uno (maestro), pero no funciona.

Código Arduino Uno (maestro):

void setup() {
  Wire.begin(); // join i2c bus (address optional for master)
}

void loop() {
  Wire.beginTransmission(0x30); // transmit to device #0x30
  Wire.write(0x15);              // sends one byte
  Wire.endTransmission();    // stop transmitting

  delay(500);
}

Código esclavo STM8 con biblioteca periférica: main.c

CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);

I2C_DeInit();
I2C_Init(100000, SLAVE_ADDRESS, I2C_DUTYCYCLE_2, I2C_ACK_CURR, I2C_ADDMODE_7BIT, 16);

char veri_bas[1];

while (1)
{

I2C_GenerateSTART(ENABLE);

/* Disable Acknowledgement */
I2C_AcknowledgeConfig(I2C_ACK_NEXT);

/* Send STOP Condition */
I2C_GenerateSTOP(ENABLE);


uint8_t gelen = I2C_ReceiveData();
//uint8_t gelen = 0x15;
sprintf(veri_bas ,"%d" ,gelen);
sendstring(veri_bas);
}

STM8 - main.h:

#ifndef __MAIN_H
#define __MAIN_H

#define I2C_SPEED 100000
#define SLAVE_ADDRESS  0x30

#endif /* __MAIN_H */

Arduino envía datos, los vi en el ossiloscopio. Los resistores Pinout (SCL-SDA-GND) y I2C son correctos. La función de la cadena de envío es correcta. Pero no funciona. ¡Gracias!

    
pregunta kbtr

1 respuesta

2

Su esclavo no debe generar eventos de INICIO y DETENCIÓN. Debe esperar y responder a ellos adecuadamente.

    
respondido por el William Brodie-Tyrrell

Lea otras preguntas en las etiquetas