簡體   English   中英

如何使用STM32 HAL I2C從PCT2075獲取溫度

[英]How do I use STM32 HAL I2C to get Temperature from PCT2075

我想使用STM32 HAL I2C從PCT2075獲得溫度。 即使使用HAL_I2C_Mem_Read()功能,也只有我能看到HAL ERROR狀態。

我也混淆了我該如何使用從地址。 在數據表中,從站地址為1001000。那么我應該將從站地址寫為0x48還是(0x48 << 1)?

我有另一個問題。 當我在I2C中將GPIO引腳配置為PULLUP時,是否不需要在電路中增加PUll電阻? 我知道GPIOS引腳中有內部上拉電阻。

最后,在獲得溫度之前,我是否應該發送配置數據給從站。 https://www.nxp.com/docs/zh-CN/data-sheet/PCT2075.pdf老實說,我不知道如何准確地閱讀數據表。

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

遵循數據表中的圖12。

1)首先發送從地址0(用於寫操作)。 從站地址變為1001 000 0

2)發送指針地址-溫度為0000 0000.(請參見第10頁)

3)再次發送從站地址,其值為1表示讀操作。 從站地址變為1001 000 1

4)現在您可以從設備的溫度寄存器中讀取。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM