stm32 i2c有超时机制吗
发布网友
发布时间:2022-05-29 06:29
我来回答
共1个回答
热心网友
时间:2023-10-09 13:28
有的
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);
}
}