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

I2C ISR Busy bit问题

[复制链接]
matttsai 提问时间:2018-4-30 15:48 /
请问一下I2C的ISR Busy bit什么时候会被设为1, 什么时候会被设为0
会被设为1之后, 就一直没有被设为0的情况是什么??


Thanks

收藏 评论7 发布时间:2018-4-30 15:48

举报

7个回答
hungchieh1029 回答时间:2018-5-3 10:54:57
HAL_I2C_MspInit()
{
  __HAL_RCC_I2C1_CLK_ENABLE();
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}

這個方法你先試試看
先開啟I2C Clock
在設定IO

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

matttsai 回答时间:2018-5-3 11:11:20
hungchieh1029 发表于 2018-5-3 10:54
HAL_I2C_MspInit()
{
  __HAL_RCC_I2C1_CLK_ENABLE();

请问一下为什么要先call __HAL_RCC_I2C1_CLK_ENABLE(),
接着再去call HAL_GPIO_Init(GPIOB, &GPIO_InitStruct)?

这和原来Cube自动产生的顺序相反,这个影响到什么?
hungchieh1029 回答时间:2018-5-3 11:14:03
我一開始也是會遇到I2C init完之後就遇到busy了,所以我才對調的
matttsai 回答时间:2018-5-3 11:30:18
hungchieh1029 发表于 2018-5-3 11:14
我一開始也是會遇到I2C init完之後就遇到busy了,所以我才對調的

I2C init完之后就遇到busy了
==>是指还没要去读取I2C就busy? 或是尝试去读取之后, timeout, 之后就一直busy?

请问一下你有遇过, 有时候, 是非100%每次(发生在开机之后)第1次去读取I2C就失败, 之后再retry, 不过retry几次后, busy bit就被设起来, 之后就busy bit一直为1

Thanks
回答时间:2018-5-3 11:37:38
I2C busy可能发生在读取完成以后,楼主用的是硬件I2C模块,还是模拟的I2C。注意每次使用完后,一定要释放掉I2C总线。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

matttsai 回答时间:2018-5-3 11:42:06
安 发表于 2018-5-3 11:37
I2C busy可能发生在读取完成以后,楼主用的是硬件I2C模块,还是模拟的I2C。注意每次使用完后,一定要释放掉 ...

我是用STM的HAL lib, HAL_I2C_Mem_Read()去对I2C做读取的, 如果HAL_I2C_Mem_Read() return 值不是HAL_OK, 我就要去retry, call HAL_I2C_Mem_Read()

注意每次使用完后,一定要释放掉I2C总线。
==>我要怎么做释放? 用HAL lib or 其他方式?
或着有其他的建议?
回答时间:2018-5-3 13:33:53
库应该不用去释放,出现这种情况是在操作前,还是操作完毕后。示波器抓一下波形

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版