硬件iic为什么还有问题
用STM32L4的硬件I2C驱动OLED,用CubeMX配置后卡在HAL_I2C_IsDeviceReady。换成软件模拟I2C就正常,时钟速度调到10kHz都不行,有没有遇到过的大神? 不是说ST的硬件IIC是个硬伤吗 我也遇到过类似情况,最后发现是IO口复用没选对,用了不支持I2C功能的引脚导致一直超时。 你有试过用逻辑分析仪看波形吗?有时候硬件I2C发送了start但对方没ack,导致一直等。 CubeMX配置完后,IO口要设置成开漏输出+上拉,不然有些OLED模块根本收不到信号。 有些OLED上电初始化比较慢,建议上电延时加到100ms以上再跑HAL_I2C_IsDeviceReady试试看。 我用L4时发现如果I2C前面重启过或者曾经异常退出,可能会卡死在busy状态,复位一下I2C外设就好了。 你有没有试过换一组I2C引脚?STM32有些引脚复用容易冲突,换个口子有奇效。 软件I2C能跑说明时序是OK的,问题大概率还是出在硬件I2C初始化或者兼容性上。 有些I2C设备在初始化时要特殊时序或者命令,比如先发一个dummy byte,建议查下OLED手册。 我之前遇到是SDA引脚被别的外设复用了,改IO口就没问题了,你确认一下有没有别的模块也在用同样的引脚? 你可以尝试先不用HAL_I2C_IsDeviceReady,直接发命令写数据试试,有时候这个函数的时序对某些设备并不友好。 CubeMX中I2C引脚是否正确配置为复用开漏输出模式。若误设为推挽输出,SCL/SDA线可能无法正确拉高,导致通信失败。 上拉电阻值过大或者过小? 时钟树配置有误? 更新HAL库。 GPIO 没有配置好
页:
[1]