我正在尝试对 stm32 进行编程以与我的 i2c EEprom 通信,但似乎每次我说:
I2C_GenerateSTART(I2C1, ENABLE);
while( !(I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)) ); the code hangs here
我检查了调试器,发现 SR1 位 0 标志(这是起始位生成标志)未设置,这就是代码挂起的原因。我可以在示波器中看到生成了起始位,这有时会起作用。当我尝试连续写入几次时,它通常会中断。我检查了硬件是否一切正常 我检查了我在 i2c 总线上运行的频率,它在 24lc1025 eeprom 中是 100Khz。
有任何想法吗,
谢谢
最佳答案
由于您说当您连续进行多次写入时这通常会中断,因此您可能希望确保您没有违反 STM32 数据表中 I2C_CR1 控制寄存器中的 STOP
位的注释:
设置 STOP
位后,您需要确保在写入下一个 START
位之前硬件已将其清除。