This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

STM32 I2C using function I2C_Send7bitAddress

Hi

Just to inform people that in some cases and with certain devices the function I2C_Send7bitAddress in STM32 FwLib is not working correctly and does not trigger the event I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED so the run of the program gets stuck into an infinite while loop.

I would recommend to use the code below to replace the I2C_Send7bitAddress if you encounter issues with I2C on STM32 :

// send address
//I2C_Send7bitAddress(I2Cx, address, direction); // not working
if(direction == I2C_Direction_Transmitter) I2C_SendData(I2Cx, (address << 1) | 0);
else if(direction == I2C_Direction_Receiver) I2C_SendData(I2Cx, (address << 1) | 1);

// check if slave acknowledged his address within timeout
if(direction == I2C_Direction_Transmitter) while(!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
else if(direction == I2C_Direction_Receiver) while(!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));

Here is a related thread talking about this issue: http://www.keil.com/forum/18440/

Romain