时效声明
本文章所阐述的内容仅对一下列表中最新日期之前的HAL库有效
- 2020-08-09:文章发表
HAL_BUSY
HAL库中对于硬件的状态共有以下分级
- HAL_OK: 0x00
- HAL_ERROR: 0x01
- HAL_BUSY: 0x02
- HAL_TIMEOUT: 0x03
对于硬件IIC
而言,出现HAL_BUSY
的含义是总线忙,具体而言有以下几种情况
- 对于一些较老的HAL库(具体版本位置),可能是
i2c.c
中的I2c_MspInit()
函数中的IIC
设备的时钟初始化在GPIO
初始化之前,需要手动将__HAL_RCC_I2C1_CLK_ENABLE();
函数提前,这也是网上流传较广的一种情形,但是截止到笔者写文章之时,这个问题已经被ST
解决 - 还有一个隐晦的问题,
HAL
的硬件IIC
会检测SDA
&SCL
两根线的电平,如果这两根线被线上设备或者其它原因拉低,也会造成HAL_BUSY
- 如果你和我一样手贱虚焊了
SDA
的线,一样HAL_BUSY