[STM32L4] 硬件iic为什么还有问题

[复制链接]
 楼主| 亚瑟 发表于 2025-4-23 15:43 | 显示全部楼层 |阅读模式
用STM32L4的硬件I2C驱动OLED,用CubeMX配置后卡在HAL_I2C_IsDeviceReady。换成软件模拟I2C就正常,时钟速度调到10kHz都不行,有没有遇到过的大神?
chenqianqian 发表于 2025-4-23 21:03 来自手机 | 显示全部楼层
不是说ST的硬件IIC是个硬伤吗
公羊子丹 发表于 2025-4-25 07:37 | 显示全部楼层
我也遇到过类似情况,最后发现是IO口复用没选对,用了不支持I2C功能的引脚导致一直超时。
周半梅 发表于 2025-4-25 07:38 | 显示全部楼层
你有试过用逻辑分析仪看波形吗?有时候硬件I2C发送了start但对方没ack,导致一直等。
帛灿灿 发表于 2025-4-25 07:38 | 显示全部楼层
CubeMX配置完后,IO口要设置成开漏输出+上拉,不然有些OLED模块根本收不到信号。
童雨竹 发表于 2025-4-25 07:39 | 显示全部楼层
有些OLED上电初始化比较慢,建议上电延时加到100ms以上再跑HAL_I2C_IsDeviceReady试试看。
万图 发表于 2025-4-25 07:40 | 显示全部楼层
我用L4时发现如果I2C前面重启过或者曾经异常退出,可能会卡死在busy状态,复位一下I2C外设就好了。
Wordsworth 发表于 2025-4-25 07:41 | 显示全部楼层
你有没有试过换一组I2C引脚?STM32有些引脚复用容易冲突,换个口子有奇效。
Bblythe 发表于 2025-4-25 07:42 | 显示全部楼层
软件I2C能跑说明时序是OK的,问题大概率还是出在硬件I2C初始化或者兼容性上。
Pulitzer 发表于 2025-4-25 07:43 | 显示全部楼层
有些I2C设备在初始化时要特殊时序或者命令,比如先发一个dummy byte,建议查下OLED手册。
Uriah 发表于 2025-4-25 07:44 | 显示全部楼层
我之前遇到是SDA引脚被别的外设复用了,改IO口就没问题了,你确认一下有没有别的模块也在用同样的引脚?
Clyde011 发表于 2025-4-25 07:45 | 显示全部楼层
你可以尝试先不用HAL_I2C_IsDeviceReady,直接发命令写数据试试,有时候这个函数的时序对某些设备并不友好。
powerantone 发表于 2025-4-25 13:06 | 显示全部楼层
CubeMX中I2C引脚是否正确配置为复用开漏输出模式。若误设为推挽输出,SCL/SDA线可能无法正确拉高,导致通信失败。
stormwind123 发表于 2025-4-25 16:00 | 显示全部楼层
上拉电阻值过大或者过小?
probedog 发表于 2025-4-25 19:00 | 显示全部楼层
时钟树配置有误?
classroom 发表于 2025-4-25 20:00 | 显示全部楼层
更新HAL库。
夕阳接你 发表于 2025-4-27 11:18 | 显示全部楼层
GPIO 没有配置好
您需要登录后才可以回帖 登录 | 注册

本版积分规则

21

主题

430

帖子

0

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