lut1lut 的程序:
if (TxLength >0)
{
I2C_SendData(I2C1, *pTxBuffer1++);
TxLength--;
}
/* Disable the I2C_IT_BUF interrupt after sending the last buffer data
(last EV8) to no allow a new interrupt with TxE and only BTF could generate it */
else if(TxLength == 0)
{
I2C_ITConfig(I2C1, I2C_IT_BUF, DISABLE);
I2C_GenerateSTOP(I2C1, ENABLE); }
break;
本人的程序:
case I2C_EVENT_MASTER_BYTE_TRANSMITTING: /* Without BTF, EV8 */
if(i2cSendCount < i2cSendLen)
{
I2C_SendData(I2C1, i2cSendBuf[i2cSendCount++]);
}
else
{
I2C_ITConfig(I2C1, I2C_IT_BUF, DISABLE);
I2C_GenerateSTOP(I2C1, ENABLE);
}
break;
两者一样吧?
但是照样会产生多个0x70084,
但是吧I2C_GenerateSTOP(I2C1, ENABLE); 移动到0x70080中断事件中处理,
尽管有多个0x70084,
但是不需要等待
while(I2C_GetLastEvent(I2C1) == I2C_EVENT_MASTER_BYTE_TRANSMITTED);
程序也能正常工作。
只是不知其所以然 |