I ran into exact same problem as yours. Fortunately, I found the solution. You should enable the I2C event interrupt. The functions inside will handle all events after START, including sending the slave address, reading specific flags, generating STO...