万利的EK-STM32F板子,MDK3.22a调试,下面这段程序:
/*----- Transmission Phase -----*/ /* While the bus is busy */ while(I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY)); /* Send I2C1 START condition */ I2C_GenerateSTART(I2C1, ENABLE); /* Test on I2C1 EV5 and clear it */ while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)); /* Send I2C2 slave Address for write */ I2C_Send7bitAddress(I2C1, I2C_DataStruct->DeviceAddr, I2C_Direction_Transmitter); /* Test on I2C1 EV6 and clear it */ while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
全速执行时程序在最后一行的while死循环了,于是我这样试了一下:全速执行到最后一行while(这一行还没执行,Run to Cursor line),查看SR1=0x0400,SR2=0x0003,出现了AF失败;又试了第二种结果,全速执行到I2C_GenerateSTART(I2C1, ENABLE);(这一行还没执行),查看SR1=SR2=0x0000,再全速执行到最后一行while(这一行还没被执行),查看SR1=0x0082,SR2=0x0007,值正常,是I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED定义的值,再用F10(Step Over)执行,程序进入了while死循环。
这都是ST官方的操作流程,现在有点不明白I2C该如何操作了? |