STM32 I2C1启动位没有设置SR1寄存器
题
我想的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
位违反本注意事项:
请注意:当
STOP
,START
或PEC
位被置位,该软件必须不执行任何写 访问I2C_CR1
该位之前由硬件清零。否则,存在的风险 设置第二STOP
,START
或PEC
请求。
一旦你设置STOP
位,你需要确保你写入下一个START
位之前的硬件已经清除了它。
其他提示
检查勘误表为您的设备(从ST网站得到它)。该STM32有很多的I2C实现错误的。勘误表给出了软件解决方法他们。
此外,使用通常设有STM32平台驱动程序的源文件时,不要忘记通过头看了!他们可以是非常有帮助的,尤其是对谁不知道从哪里开始的新手(像我一样)。
在这种情况下,你会在看 stm32f4xx_i2c.c
不隶属于 StackOverflow