首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用STM32 HAL I2C从PCT2075获取温度?

如何使用STM32 HAL I2C从PCT2075获取温度?
EN

Stack Overflow用户
提问于 2019-09-11 05:17:47
回答 1查看 659关注 0票数 0

我想用PCT2075 STM32 HAL I2C来测温。只有我可以看到HAL错误状态,即使我使用的是HAL_I2C_Mem_Read()函数。

我还搞不懂我能用什么来做奴隶地址。在数据表中,从地址是1001 000。那么我应该将从地址写为0x48或(0x48<<1)?

我还有一个问题。当我将I2C中的GPIO引脚配置为拔起时,不需要在电路中设置PUll升压电阻?我知道在GPIOS引脚中有内部的拉起电阻。

最后,在获得温度之前,我是否应该将数据配置为从数据。老实说,https://www.nxp.com/docs/en/data-sheet/PCT2075.pdf,我不知道如何准确地阅读数据表。

代码语言:javascript
运行
复制
static void MX_I2C1_Init(void)
{
  /* USER CODE END I2C1_Init 1 */
  hi2c1.Instance = I2C1;
  hi2c1.Init.ClockSpeed = 400000;
  hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2;
  hi2c1.Init.OwnAddress1 = 0x48;
  hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
  hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
  hi2c1.Init.OwnAddress2 = 0;
  hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
  hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
  if (HAL_I2C_Init(&hi2c1) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN I2C1_Init 2 */

  /* USER CODE END I2C1_Init 2 */
}

main()
{
retVal = HAL_I2C_Master_Transmit(&hi2c1, slave_addr, &send, I2C_MEMADD_SIZE_8BIT, 500);

retVal = HAL_I2C_Mem_Read(&hi2c1, slave_addr, 0x00u, I2C_MEMADD_SIZE_16BIT, &TempReadBuffer[0], 16, 500);
retVal = HAL_I2C_Mem_Read(&hi2c1, slave_addr, 0x00u, I2C_MEMADD_SIZE_16BIT, &TempReadBuffer[0], 16, 500);
}

retVal = HALL_ERROR

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-11 05:37:13

按照数据表中的图12。

1)首先发送带有0的从地址(用于写操作)。从地址变为1001 000

2)发送指针地址-温度为0000。(见第10页)

3)重发从地址具有1层含义的读取操作。从地址变为1001 0001

4)现在您可以从设备的温度寄存器中读取。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57882537

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档