我想的STM32跟我的I2C EEPROM编程,但似乎每次我说:

I2C_GenerateSTART(I2C1, ENABLE);
while( !(I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)) );  the code hangs here

我去通过与调试器和我发现,SR1位0标志(其是起始位产生的标志)没有设置这就是为什么代码挂起。我可以在生成起始位示波器看到这个作品有时。通常,当我试图做一些写在一排休息。我查了HW是一切都看起来不错我检查的频率,我在I2C总线上运行它为100kHz内24lc1025 EEPROM很好。

任何想法,

感谢

有帮助吗?

解决方案

既然你说这通常是当你连续做几个写符,你可能想确保你没有在STM32数据表中I2C_CR1控制寄存器中的STOP位违反本注意事项:

  

请注意:当STOPSTARTPEC位被置位,该软件必须不执行任何写   访问I2C_CR1该位之前由硬件清零。否则,存在的风险   设置第二STOPSTARTPEC请求。

一旦你设置STOP位,你需要确保你写入下一个START位之前的硬件已经清除了它。

其他提示

检查勘误表为您的设备(从ST网站得到它)。该STM32有很多的I2C实现错误的。勘误表给出了软件解决方法他们。

此外,使用通常设有STM32平台驱动程序的源文件时,不要忘记通过头看了!他们可以是非常有帮助的,尤其是对谁不知道从哪里开始的新手(像我一样)。

在这种情况下,你会在看 stm32f4xx_i2c.c

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top