#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