关于 STM32G0/G4/L4 HAL_IIC HAL_I2C_Mem_Read 函数读取M24C64存储芯片遇到的问题

由于错误的定义了HAL_I2C_Mem_Read函数第四个形数,随意的写成了 8 HAL_I2C_Mem_Read( &hi2c1,IIC_ReadAddr,

由于错误的定义了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),没有他的帮助,我很难发现这个问题
在这里插入图片描述