各位好!本人搞51有了几年,搞STM32才刚起步。在做Keil开发平台(v3.23a)上的例程:M24C08_EEPROM,即硬件IIC读写程序,我在主程序中运行如下程序: for(i=0;i<10;i++){ I2C_EE_ByteWrite(Tx1_Buffer+i, EEPROM_WriteAddress1+i); I2C_EE_BufferRead(Rx1_Buffer+i, EEPROM_ReadAddress1+i, 1); } IIC设定照原样,不改变,IIC芯片是AT24C02N。当在上述2个函数的最后一行设断点时,程序能顺利运行到最后,可不设断点全速运行时,程序就会在下述写函数的while语句上死循环: void I2C_EE_BufferRead(u8* pBuffer,u8 ReadAddr,u16 NumByteToRead){ u16 i; I2C_AcknowledgeConfig(I2C1, ENABLE); I2C_GenerateSTART(I2C1, ENABLE); /* Test on EV5 and clear it */ while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)); ...... } 当出现死循环运行时,如果此时在while语句上设断点(用ULINK2仿真),此时暂停运行,再当步运行,程序就能通过些while语句,不知为什么在全速运行时检测不到条件0x00030001,而在单步运行时就能检测得到。是否有同行也遇到过相同问题?是否有解决的办法?电路肯定没问题,我用模拟IIC程序在其上运行,没问题。 |