cancel
Showing results for 
Search instead for 
Did you mean: 

STM8L052R8 I2C COMMUNICATION FAILURE

Abhishek032003
Visitor
#include "stm8l15x.h"
#include "stm8l15x_i2c.h"
#include "stm8l15x_clk.h"
#include "stm8l15x_conf.h"
 
#define I2C_SPEED   100000   // 100kHz
#define SLAVE_ADDR  0x27
 
void I2C_Config(void);
void I2C_SendChar(uint8_t slave_addr, char ch);
 
int main(void) {
    CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1);
    I2C_Config();
 
    while (1) {
volatile long delay_loop;
        I2C_SendChar(SLAVE_ADDR, 'A');   // send character 'A' to slave
        for ( delay_loop= 0; delay_loop < 100000; delay_loop++); // delay
    }
}
 
void I2C_Config(void) {
    CLK_PeripheralClockConfig(CLK_Peripheral_I2C1, ENABLE);
 
    I2C_DeInit(I2C1);
    I2C_Init(I2C1, I2C_SPEED, 0x00, I2C_Mode_I2C, I2C_DutyCycle_2,
             I2C_Ack_Enable, I2C_AcknowledgedAddress_7bit);
    I2C_Cmd(I2C1, ENABLE);
}
 
void I2C_SendChar(uint8_t slave_addr, char ch) {
    // START condition
    I2C_GenerateSTART(I2C1, ENABLE);
    while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));
 
    // Send slave address + write
    I2C_Send7bitAddress(I2C1, slave_addr << 1, I2C_Direction_Transmitter);
    while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
 
    // Send character
    I2C_SendData(I2C1, (uint8_t)ch);
    while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
 
    // STOP condition
    I2C_GenerateSTOP(I2C1, ENABLE);
}

I AM SENDING THE CHARACTER INTO SLAVE ADRESS 0X27 IN ESP32 I AM NOT ABLE TO READ FROM SLAVE EVEN THOUGH CONNECTIONS ARE CORRECT THE SDA AND SCL LINE IS NOT PULLED TO HIGH IT IS FAILED TO IDENTIFY THE SLAVE AND ACK 

 

0 REPLIES 0