void I2C1_EV_IRQHandler(void)
{
/* USER CODE BEGIN I2C1_EV_IRQn 0 */
+ u32 sr1 = I2C1->SR1;
+ if (sr1 & I2C_SR1_SB)
+ LL_I2C_TransmitData8(I2C1, bmp_i2c_addr);
+ else if (bmp_i2c_addr & 1)
+ {
+ // Receive
+ if (sr1 & I2C_SR1_ADDR)
+ {
+ LL_I2C_DisableBitPOS(I2C1);
+ if (bmp_i2c_len == 1)
+ LL_I2C_AcknowledgeNextData(I2C1, LL_I2C_NACK);
+ LL_I2C_AcknowledgeNextData(I2C1, LL_I2C_ACK);
+ LL_I2C_ClearFlag_ADDR(I2C1);
+ }
+ else if (sr1 & I2C_SR1_RXNE)
+ {
+ if (bmp_i2c_len > 0)
+ {
+ if (bmp_i2c_len == 1)
+ {
+ LL_I2C_AcknowledgeNextData(I2C1, LL_I2C_NACK);
+ LL_I2C_GenerateStopCondition(I2C1);
+ }
+ *bmp_i2c_ptr++ = LL_I2C_ReceiveData8(I2C1);
+ bmp_i2c_len--;
+ }
+ else
+ LL_I2C_DisableIT_RX(I2C1);
+ }
+ }
+ else
+ {
+ // Transmit
+ if (sr1 & I2C_SR1_ADDR)
+ LL_I2C_ClearFlag_ADDR(I2C1);
+ else if (sr1 & I2C_SR1_TXE)
+ {
+ if (bmp_i2c_len)
+ {
+ LL_I2C_TransmitData8(I2C1, *bmp_i2c_ptr++);
+ bmp_i2c_len--;
+ }
+ else
+ LL_I2C_DisableIT_TX(I2C1);
+ }
+ }
/* USER CODE END I2C1_EV_IRQn 0 */