[STM32F4] HAL_I2C_Mem_Read 函数执**死

[复制链接]
86|6
地瓜patch 发表于 2026-2-19 02:46 | 显示全部楼层 |阅读模式
用 NUCLEO-STM32F407 开发板与 LIS3DH 加速度计进行通信,硬件连接方式如下:
VCC → 3.3V
GND → GND
SCL/D15 → SCL(I2C 时钟线)
SDA/D14 → SDA(I2C 数据线)
我想要读取 WHO_AM_I 地址 0x0F寄存器的值:由于使用的是 SparkFun 的 LIS3DH 模块,经测量 SDO 引脚为 3.3V,设备地址dev_addr设为 0x19。
程序执行到 HAL_I2C_Mem_Read(&hi2c1, dev_addr, reg_adr, I2C_MEMADD_SIZE_8BIT, &who_am_i, 1, HAL_MAX_DELAY); 这一行时发生卡死,说明通信环节存在问题,
代码如下:

uint8_t dev_addr = 0x19<<1;

static void MX_I2C1_Init(void)
{
  /* USER CODE BEGIN I2C1_Init 0 */
  /* USER CODE END I2C1_Init 0 */

  /* USER CODE BEGIN I2C1_Init 1 */
  /* USER CODE END I2C1_Init 1 */
  hi2c1.Instance = I2C1;
  hi2c1.Init.Timing = 0x2000090E; //0x0x00707CBB
  hi2c1.Init.OwnAddress1 = 0;
  hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
  hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
  hi2c1.Init.OwnAddress2 = 0;
  hi2c1.Init.OwnAddress2Masks = I2C_OA2_NOMASK;
  hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
  hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
  if (HAL_I2C_Init(&hi2c1) != HAL_OK)
  {
    Error_Handler();
  }


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


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

uint8_t status=0;
uint8_t reg_adr=0x0F;
uint8_t who_am_i=0;
status = HAL_I2C_Mem_Read(&hi2c1, dev_addr, reg_adr, I2C_MEMADD_SIZE_8BIT, &who_am_i, 1, HAL_MAX_DELAY);
if(status!=HAL_OK)
{
  sprintf(disp_buff,"MEM_READ_FAILED");
  print_scrn(disp_buff);
}
sprintf(disp_buff,"who_IM_I: %x",who_am_i);
print_scrn(disp_buff);

stormwind123 发表于 2026-2-19 14:58 | 显示全部楼层
可能是设备地址配置错误
classroom 发表于 2026-2-19 15:58 | 显示全部楼层
可能使用了错误的地址,导致通信失败。
cr315 发表于 2026-2-19 16:00 | 显示全部楼层
STM32F407的I2C时序配置需要使用CubeMX自动生成的配置或正确计算TIMINGR寄存器值,手动配置容易出错。
duo点 发表于 2026-2-19 18:01 | 显示全部楼层
建议添加错误恢复机制,如总线恢复函数或重新初始化I2C。
flycamelaaa 发表于 2026-2-19 19:02 | 显示全部楼层
WHO_AM_I寄存器读取方面,正确读取该寄存器应返回0x33,但代码中可能由于地址错误或时序问题导致读取失败。
jcky001 发表于 2026-2-19 22:03 | 显示全部楼层
应该是I2C地址配置错误或者时序参数不匹配的问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:出一块TI-PLABS-AMP-EVM

3036

主题

18135

帖子

31

粉丝
快速回复 在线客服 返回列表 返回顶部
0