[STM32L0] 低功耗模式唤醒后I2C通信失败

[复制链接]
233|16
Wordsworth 发表于 2025-10-21 07:12 | 显示全部楼层 |阅读模式
设备睡眠后用外部中断唤醒,I2C重新初始化后就不工作了,SDA一直拉低。看起来像I2C模块“没睡醒”。复位能恢复,怀疑是唤醒后GPIO状态或时钟没完全恢复。
Clyde011 发表于 2025-10-21 07:17 | 显示全部楼层
我一般唤醒后直接重启整个I2C模块比较稳。
公羊子丹 发表于 2025-10-21 07:19 | 显示全部楼层
L0系列我遇到过,I2C在STOP模式后要软复位外设。
周半梅 发表于 2025-10-21 07:20 | 显示全部楼层
你确认唤醒后系统时钟已经切回主频了吗?
帛灿灿 发表于 2025-10-21 07:20 | 显示全部楼层
我觉得SDA被卡低可能是设备没准备好。
童雨竹 发表于 2025-10-21 07:21 | 显示全部楼层
试试在I2C初始化前延时几毫秒。
万图 发表于 2025-10-21 07:22 | 显示全部楼层
我以前也是这样,加了一次I2C软复位就好了。
 楼主| Wordsworth 发表于 2025-10-21 07:23 | 显示全部楼层
有些外设唤醒后要重新配置引脚AF。
Bblythe 发表于 2025-10-21 07:25 | 显示全部楼层
可以加个检测,发现SDA低就强制重启总线。
Pulitzer 发表于 2025-10-21 07:25 | 显示全部楼层
我怀疑是I2C状态机停在BUSY状态。
Uriah 发表于 2025-10-21 07:26 | 显示全部楼层
看下I2C_CR1寄存器是不是没清干净。
powerantone 发表于 2025-10-21 15:55 | 显示全部楼层
STM32L0从STOP模式唤醒后,默认可能切换至MSI或HSI16 RC振荡器作为系统时钟,而非唤醒前的PLL配置。若未手动重新配置RCC,外设时钟频率将异常,导致I2C波特率错误或通信超时。
probedog 发表于 2025-10-21 16:56 | 显示全部楼层
可能外设时钟门控未重新使能。
solty 发表于 2025-10-21 19:56 | 显示全部楼层
可能是总线冲突或硬件问题
spicy 发表于 2025-10-21 20:57 | 显示全部楼层
重新初始化I2C外设
stormwind123 发表于 2025-10-21 15:58 | 显示全部楼层
检查总线电压是否兼容
七毛钱 发表于 2025-10-21 22:58 | 显示全部楼层
建议在I2C读写操作中加入超时检测,避免死锁。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

177

主题

6295

帖子

1

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