简体   繁体   English

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

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

I would like to get a temperature from PCT2075 by using STM32 HAL I2C. 我想使用STM32 HAL I2C从PCT2075获得温度。 Only I can see that HAL ERROR status even I'm using HAL_I2C_Mem_Read() fucntion. 即使使用HAL_I2C_Mem_Read()功能,也只有我能看到HAL ERROR状态。

Also I'm confusing what can I use for slave address. 我也混淆了我该如何使用从地址。 In data sheet, slave address is 1001 000. Then I should write a slave address as 0x48 or (0x48<<1)? 在数据表中,从站地址为1001000。那么我应该将从站地址写为0x48还是(0x48 << 1)?

I have another question. 我有另一个问题。 When I configure GPIO pins in I2C as PULLUP, it is don't need to put PUll up resistor in the circuit?. 当我在I2C中将GPIO引脚配置为PULLUP时,是否不需要在电路中增加PUll电阻? I know that there are internal pullup resistor in GPIOS pins. 我知道GPIOS引脚中有内部上拉电阻。

Lastly, Should I send to configure data to slave before getting a Temperature. 最后,在获得温度之前,我是否应该发送配置数据给从站。 https://www.nxp.com/docs/en/data-sheet/PCT2075.pdf To be honest, I dont know how to read a datasheet exactly. 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 retVal = HALL_ERROR

Follow the figure 12 in the datasheet. 遵循数据表中的图12。

1) First send slave address with 0 (for write operation). 1)首先发送从地址0(用于写操作)。 Slave address becomes 1001 000 0 从站地址变为1001 000 0

2) Send the Pointer address - For temperature it is 0000 0000.(See Page 10) 2)发送指针地址-温度为0000 0000.(请参见第10页)

3) The again send slave address with 1 meaning read operation. 3)再次发送从站地址,其值为1表示读操作。 Slave address becomes 1001 000 1 从站地址变为1001 000 1

4) Now you can read from the temperature register of the device. 4)现在您可以从设备的温度寄存器中读取。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM