你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

I2C一直处于BUSY状态

[复制链接]
Gxxxxxx 提问时间:2024-8-5 16:10 / 已解决

在SPI与EEPROM通信之后使用HAL_I2C_Master_Transmit函数,一直返回HAL_BUSY

收藏 评论6 发布时间:2024-8-5 16:10

举报

6个回答
butterflyspring 最优答案 回答时间:2024-8-6 09:37:14
Gxxxxxx 发表于 2024-8-6 08:58
[md]

接了上拉电阻,如果把I2C放在EEPROM的SPI通信之前或者直接注释SPI的话,I2C正常输出波形通信,但是放 ...

可以根据这个线索,跟踪先运行SPI 时,看看这个状态什么时候会变化,从而发现什么原因。
废鱼 回答时间:2024-8-5 20:23:33

SPI和EEPROM通信?示波器看一下I2C总线的状态,是不是没有接上拉电阻。

Gxxxxxx 回答时间:2024-8-6 08:58:38

废鱼 发表于 2024-8-5 20:23
SPI和EEPROM通信?示波器看一下I2C总线的状态,是不是没有接上拉电阻。
...

接了上拉电阻,如果把I2C放在EEPROM的SPI通信之前或者直接注释SPI的话,I2C正常输出波形通信,但是放在SPI之后就在“if (hi2c->State == HAL_I2C_STATE_READY)”判断之后返回HAL_BUSY。调试看到hi2c->state值为0xFF。

Gxxxxxx 回答时间:2024-8-6 09:50:15

butterflyspring 发表于 2024-8-6 09:37
可以根据这个线索,跟踪先运行SPI 时,看看这个状态什么时候会变化,从而发现什么原因。
...

好的,我试试,刚刚我将I2C初始化放在EEPROM通信之后,可以进去hi2c->state,但是又卡在了“I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_SB, RESET, Timeout, Tickstart”和“READ_BIT(hi2c->Instance->CR1, I2C_CR1_START) == I2C_CR1_START”,最终返回HAL_TIMEOUT

废鱼 回答时间:2024-8-6 19:57:56

是不是I2C和SPI的配置IO有冲突了。仿真看一下IO寄存器对应IO口的状态。

Gxxxxxx 回答时间:2024-8-7 09:34:41

废鱼 发表于 2024-8-6 19:57
是不是I2C和SPI的配置IO有冲突了。仿真看一下IO寄存器对应IO口的状态。
...

没有冲突,目前已解决,跟踪state发现是SPI通信问题,导致state从ready变成其他

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版