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



我想通过使用STM32 HAL I2C从PCT2075获得温度。 只有我可以看到 HAL 错误状态,即使我正在使用 HAL_I2C_Mem_Read(( 功能。

我也混淆了我可以用于从属地址的内容。 在数据手册中,从地址为1001 000。那么我应该写一个从属地址作为0x48或(0x48<<1(?

我还有一个问题。 当我在I2C中将GPIO引脚配置为上拉时,不需要在电路中放置PUall电阻器吗?我知道 GPIOS 引脚中有内部上拉电阻。

最后,我是否应该在获得温度之前将数据发送到从属服务器。 https://www.nxp.com/docs/en/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 0000

2( 发送指针地址 - 对于温度,它是 0000 0000。(见第10页(

3( 再次发送具有 1 表示读取操作的从地址。从地址变为 1001 0001

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

最新更新