[STM32H7] STM32 HAL_I2C_Mem_Write / Mem_Read 在连续快速调用时出现通信异常

[复制链接]
134|15
spicy 发表于 2026-8-6 22:08 | 显示全部楼层
数据出错但函数全返回HAL_OK,恰恰说明问题不在I2C总线通信,而在EEPROM的内部写周期完成之前就被你再次操作了。
stormwind123 发表于 2026-8-6 22:39 | 显示全部楼层
HAL_I2C_IsDeviceReady是你要找的函数,它会发送起始条件和设备地址,收到ACK表示EEPROM已就绪,可以直接用它轮询等待。
七毛钱 发表于 2026-8-6 22:59 | 显示全部楼层
建议把你代码里所有HAL_Delay(1)都换成while(HAL_I2C_IsDeviceReady(hi2c, DevAddress, 300, 100) != HAL_OK);,超时次数设足够大。
今天会画卧蚕吗 发表于 2026-8-6 17:32 | 显示全部楼层
M24C64数据手册写周期典型值5ms,你之前1ms延时太短,提高延时到10ms虽然稳定但浪费性能,用查询方式才是正解。
内政奇才 发表于 2026-8-6 17:48 | 显示全部楼层
STM32 HAL库的timeout参数只用于总线通信超时,不负责EEPROM内部编程等待,不要误解它的用途,它解决不了你的问题。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部