STM32 HAL I2C always sends 0xFF as first byte when responding to master using HAL_I2C_Slave_Transmit
If you have enabled &quot;No Clock Stretch&quot; mode, you can't expect the thing to react to it's address and send the first byte correctly, because it does not stretch the clock to make the master wait until the slave code has loaded the first byte into its I2C engine.
If you want to do it without clock stretching, be prepared to write your own I2C routines. The HAL functions can be used as a good starting point, but many times they just are not the best for special needs.