stm32 i2c有超時機制嗎
void i2c1_err_isr()
{
if (I2C_GetFlagStatus(I2C1, I2C_FLAG_AF))
{
if (check_begin)
I2C_GenerateSTART(I2C1, ENABLE);
else if (I2C1->SR2 & 0x01)
{
I2C_GenerateSTOP(I2C1, ENABLE);
i2c_comm_state = COMM_EXIT;
PV_flag_1 = 0;
}
I2C_ClearFlag(I2C1, I2C_FLAG_AF);
}
if (I2C_GetFlagStatus(I2C1, I2C_FLAG_BERR))
{
if (I2C1->SR2 & 0x01)
{
I2C_GenerateSTOP(I2C1, ENABLE);
i2c_comm_state = COMM_EXIT;
PV_flag_1 = 0;
}
I2C_ClearFlag(I2C1, I2C_FLAG_BERR);
}
/*以下超時錯誤處理代碼為自行添加*/
if (I2C_GetFlagStatus(I2C1, I2C_FLAG_TIMEOUT))
{
//主模式下設置該位,硬件發出停止條件
I2C1->SR1 |= 0x4000;
I2C_ClearFlag(I2C1, I2C_FLAG_TIMEOUT);
}
}