由于错误的定义了HAL_I2C_Mem_Read函数第四个形数,随意的写成了 8
HAL_I2C_Mem_Read( &hi2c1,IIC_ReadAddr, 10, 8, array_read, 10, 1000 );
造成了,IIC在通讯过程中不正常的停止,函数并报出错误代码“HAL_ERROR“,波形如下
将代码改成如下方式
HAL_I2C_Mem_Read( &hi2c1,IIC_ReadAddr, 10, I2C_MEMADD_SIZE_16BIT, array_read, 10, 1000 );
函数的第四个参数使用了官方库的宏定义,官方库宏定义如下
/** @defgroup I2C_MEMORY_ADDRESS_SIZE I2C Memory Address Size
* @{
*/
#define I2C_MEMADD_SIZE_8BIT (0x00000001U)
#define I2C_MEMADD_SIZE_16BIT (0x00000002U)
目前通讯正常
总结:由于随意的参数定义,没有严格使用官方的宏定义,造成查找问题忽略了这个点,所以以后要尽量使用官方宏定义,保证程序的可移植,并且减少很容易被忽略的错误
最后,要非常感谢 AlexXU(ST),没有他的帮助,我很难发现这个问题