STM32H7 IIC通信在勾选IRAM2的时候不能正确读回数据,但是IIC通信用示波器查看是正常的

2019-07-20 01:11发布

本帖最后由 Levi123456 于 2019-6-19 17:39 编辑

今天我用STM32H750,MX生成的初始化IIC4代码,然后调用IIC写和IIC读:uint8_t ucchargetxbuffer[1]={0xA1};
uint8_t ucchargerxbuffer[1]={0};


static void MX_I2C4_Init(void)
{
  hi2c4.Instance = I2C4;
  hi2c4.Init.Timing = 0x10C0ECFF;
  hi2c4.Init.OwnAddress1 = 0;
  hi2c4.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
  hi2c4.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
  hi2c4.Init.OwnAddress2 = 0;
  hi2c4.Init.OwnAddress2Masks = I2C_OA2_NOMASK;
  hi2c4.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
  hi2c4.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
  if (HAL_I2C_Init(&hi2c4) != HAL_OK)
  {
    Error_Handler();
  }

  if (HAL_I2CEx_ConfigAnalogFilter(&hi2c4, I2C_ANALOGFILTER_ENABLE) != HAL_OK)
  {
    Error_Handler();
  }

  if (HAL_I2CEx_ConfigDigitalFilter(&hi2c4, 0) != HAL_OK)
  {
    Error_Handler();
  }
}



int main(void)
{

  SCB_EnableICache();
  SCB_EnableDCache();
  HAL_Init();
  SystemClock_Config();


  MX_I2C4_Init();

  res = HAL_I2C_Mem_Write(&hi2c4, Charge_Address, 0x00,1, ucchargetxbuffer, 1, 1000);
while (HAL_I2C_IsDeviceReady(&hi2c4, Charge_Address, 300, 300) != HAL_OK);
res = HAL_I2C_Mem_Read(&hi2c4, Charge_Address, 0x00,1, ucchargerxbuffer, 1, 1000);

while(1)
{
                        delay_cnt(1000);
}
}
一个奇怪的问题就是,当我没有勾选IRAM2的时候(只勾选IRAM1),debug的时候,ucchargerxbuffer能够正常返回写入的数据0xA1。
但是当我勾选IRAM2的时候(同时勾选IRAM1和IRAM2),ucchargerxbuffer就为0了,但是这个时候我看IIC4的寄存器I2C_RXDR却是0xA1,且示波器的波形是正确的,包括ACK和NACK,不知道这是怎么引起的


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。