请问I2C的ISR Busy bit什么时候会被设为1?

2019-07-18 17:28发布

请问一下I2C的ISR Busy bit什么时候会被设为1, 什么时候会被设为0
会被设为1之后, 就一直没有被设为0的情况是什么??


Thanks
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
gaozhipeng_lv
1楼-- · 2019-07-18 18:20
HAL_I2C_MspInit()
{
  __HAL_RCC_I2C1_CLK_ENABLE();
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}

這個方法你先試試看
先開啟I2C Clock
在設定IO
sunbingfeng
2楼-- · 2019-07-18 22:11
 精彩回答 2  元偷偷看……
gaozhipeng_lv
3楼-- · 2019-07-19 02:53
我一開始也是會遇到I2C init完之後就遇到busy了,所以我才對調的
sunbingfeng
4楼-- · 2019-07-19 07:19
gaozhipeng_lv 发表于 2019-5-22 11:55
我一開始也是會遇到I2C init完之後就遇到busy了,所以我才對調的

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

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

Thanks
TOPCB
5楼-- · 2019-07-19 09:05
I2C busy可能发生在读取完成以后,楼主用的是硬件I2C模块,还是模拟的I2C。注意每次使用完后,一定要释放掉I2C总线。
sunbingfeng
6楼-- · 2019-07-19 13:49
TOPCB 发表于 2019-5-22 12:20
I2C busy可能发生在读取完成以后,楼主用的是硬件I2C模块,还是模拟的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 其他方式?
或着有其他的建议?

一周热门 更多>