jra*_*rez 4 c embedded stm32 i2c
我正在尝试编程stm32与我的i2c EEprom交谈,但似乎每次我说:
I2C_GenerateSTART(I2C1, ENABLE);
while( !(I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)) ); the code hangs here
Run Code Online (Sandbox Code Playgroud)
我经历了调试器,我发现SR1位0标志(它是起始位生成标志)未设置,这就是代码挂起的原因.我可以在示波器中看到生成了起始位,这有时会起作用.当我试图连续写几次时,它通常会中断.我检查了硬件是否一切看起来很好我检查了我在i2c总线上运行的频率它在24lc1025 eeprom内是100Khz.
有任何想法吗,
谢谢
由于您说连续执行多次写操作时通常会中断,因此您可能需要确保在STM32数据表中没有违反STOP
I2C_CR1控制寄存器中的位:
注:当设置
STOP
,START
或PEC
位时,软件必须不执行任何写访问,I2C_CR1
然后硬件清除该位.否则,有设置第二的风险STOP
,START
或PEC
请求.
设置该STOP
位后,您需要确保硬件已经清除它,然后再写下START
一位.