参考HAL库AT24C02例程进行读写操作,IIC采用cubemx默认配置,主要程序如下:
#define ADDR_24LCxx_Write 0xA0
#define ADDR_24LCxx_Read 0xA1
#define IIC_BufferSize 256
uint8_t IIC_WriteBuffer[IIC_BufferSize],IIC_ReadBuffer[IIC_BufferSize];
uint8_t IIC_flag = 0;
IIC_WriteBuffer[0] = 0x01;
IIC_WriteBuffer[1] = 0x02;
IIC_flag = HAL_I2C_Mem_Write(&hi2c1, ADDR_24LCxx_Write, 0, I2C_MEMADD_SIZE_8BIT,IIC_WriteBuffer,8, 1000);
if(IIC_flag == HAL_OK)
{
sprintf(string,"IIC write succeed!\r\n");
HAL_UART_Transmit(&huart1,(uint8_t*)string,strlen((char *)string),1000);
}
else
{
sprintf(string,"IIC write falsed!IIC_flag: %d\r\n",IIC_flag);
HAL_UART_Transmit(&huart1,(uint8_t*)string,strlen((char *)string),1000);
}
HAL_Delay(1000);
IIC_flag = HAL_I2C_Mem_Read(&hi2c1, ADDR_24LCxx_Read, 0, I2C_MEMADD_SIZE_8BIT,IIC_ReadBuffer,8, 1000);
if(IIC_flag == HAL_OK)
{
sprintf(string,"IIC write succeed!\r\n");
HAL_UART_Transmit(&huart1,(uint8_t*)string,strlen((char *)string),1000);
}
else
{
sprintf(string,"IIC write falsed!IIC_flag: %d\r\n",IIC_flag);
HAL_UART_Transmit(&huart1,(uint8_t*)string,strlen((char *)string),1000);
}
程序返回值为1;读写均失败;断电调试,程序进入 HAL_I2C_Mem_Write中的下部分被中断执行
/* Send Slave Address and Memory Address */
if (I2C_RequestMemoryWrite(hi2c, DevAddress, MemAddress, MemAddSize, Timeout, tickstart) != HAL_OK)
{
if (hi2c->ErrorCode == HAL_I2C_ERROR_AF)
{
/* Process Unlocked */
__HAL_UNLOCK(hi2c);
return HAL_ERROR;
}
else
{
/* Process Unlocked */
__HAL_UNLOCK(hi2c);
return HAL_TIMEOUT;
}
}
请大家指教
|