发送地址后,
很多时候返回的是 I2C_EVENT_MASTER_BYTE_TRANSMITTED ((uint32_t)0x00070084),
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));<--导致死在这里了
做一寄存 I2C Event 的方法,sr2_1 = I2C_GetLastEvent(I2C1);有时会录得 0x00070086,
分析:
当地址写入地址寄存器后发送开始,
地址发送完,SR1的ADDR位先于TxE被置位,此时刚好调用了I2C_CheckEvent,读取SR1=0x0002,后SR1=0x0000;
地址寄存器被清空,TxE和或BTF被置位,但SR1=0x0084,从而使while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));不通过
I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED ((uint32_t)0x00070082) /* BUSY, MSL, ADDR, TXE and TRA flags
现改变如下
while(1)
{
sr2_1 |= I2C_GetLastEvent(I2C1);<--保存所有位
if( (sr2_1 & I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED) == I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED )
{
break;
}
}
|