我想使用STM32 HAL I2C从PCT2075获得温度。即使使用HAL_I2C_Mem_Read()功能,也只有我能看到HAL ERROR状态。我也混淆了我该如何使用从地址。在数据表中,从站地址为1001000。那么我应该将从站地址写为0x48还是(0x48 我有另一个问题。当我在I2C中将GPIO引脚配置为PULLUP时,是否不需要在电路中增加PUll电阻?我知道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 00002)发送指针地址-温度为0000 0000.(请参见第10页)3)再次发送从站地址,其值为1表示读操作。从站地址变为1001 00014)现在您可以从设备的温度寄存器中读取。关于c - 如何使用STM32 HAL I2C从PCT2075获取温度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57882537/
10-11 21:16