Electronic – Implementing Repeated Start on an STM32 F0 I2C Slave

i2cstm32stm32f0

I'm currently working on a driver on an STM32F0 that joins the I2C bus as a slave device. Currently there is no mention in the reference manual on how to handle a Repeated Start Condition, does anyone know how to?

I am currently handling the I2C request in the AddressCallback and am able to send/recieve all the data but when I try to detect a Repeated Start using the NACK flag (From RM: The bit is set by software, cleared by hardware when the NACK is sent, or when a STOP
condition or an Address Matched is received, or when PE=0.)
, the ADDR flag is never set meaning the ISR is never called again.

Best Answer

I finally got a response from ST. There is no reference to Repeated Start Condition in the F0 documentation nor the F0 HAL examples but there is an example in the L4 firmware packge:

In L4 Firmware repository, look under STM32Cube_FW_L4_V1.8.0\Projects\STM32L496ZG- Nucleo\Examples\I2C\I2C_TwoBoards_RestartComIT

The example shows how to perform a single I2C data buffer TX/RX in Interrupt Mode and with a Repeated Start condition.