当前位置 - 股票行情交易網 - 股票交易 - stm32 i2c有超時機制嗎

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);

}

}