亚瑟 发表于 2025-4-23 15:43

硬件iic为什么还有问题

用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 没有配置好
页: [1]
查看完整版本: 硬件iic为什么还有问题