stm32 硬I2C SHT30 驱动

发布于:2024-05-24 ⋅ 阅读:(142) ⋅ 点赞:(0)

SHT30 IIC_ADDRESS   0x44 

SHT30的测量较为简单,只需要一条指令即可测量

1.测量指令:uint8_t START_MEASUIRE_CMD[2] = { 0x2c, 0x06 };

2.读取指令:HAL_I2C_Master_Receive(&hi2c1, I2C_ADDRESS, rawData, 3, 0xFF);

3.计算结果

       

int main(void) {
	/* USER CODE BEGIN 1 */

	/* USER CODE END 1 */

	/* MCU Configuration--------------------------------------------------------*/

	/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
	HAL_Init();

	/* USER CODE BEGIN Init */

	/* USER CODE END Init */

	/* Configure the system clock */
	SystemClock_Config();

	/* USER CODE BEGIN SysInit */

	/* USER CODE END SysInit */

	/* Initialize all configured peripherals */
	MX_GPIO_Init();
	MX_I2C1_Init();
	MX_USART1_UART_Init();
	/* USER CODE BEGIN 2 */

	/* USER CODE END 2 */

	/* Infinite loop */
	/* USER CODE BEGIN WHILE */
//	uint8_t SOFT_RESET_CMD[2]={0x00,0x06};
//	HAL_I2C_Master_Transmit(&hi2c1, I2C_ADDRESS	, SOFT_RESET_CMD, 2, 0xff);
	HAL_Delay(80);


	char logdata[50];
	uint8_t rawData[6];
	float temperature, humidity;
	while (1) {
		uint8_t START_MEASUIRE_CMD[2] = { 0x2c, 0x06 };
		HAL_I2C_Master_Transmit(&hi2c1, I2C_ADDRESS, START_MEASUIRE_CMD, 2,0xff);
		HAL_Delay(80);
		HAL_I2C_Master_Receive(&hi2c1, I2C_ADDRESS, rawData, 3, 0xFF);

		uint16_t temRaw = (rawData[0] << 8 | rawData[1]);
		uint16_t humiRaw = (rawData[3] << 8 | rawData[4]);

		temperature = -45 + 175 * (temRaw / 65535.0);
		humidity = 100 * (humiRaw / 65535.0);

		int uartLength=sprintf(logdata,"temperature:%.2f   humidity:%.2f \r",temperature,humidity);

		HAL_UART_Transmit(&huart1, logdata, uartLength, 0xff);

		HAL_Delay(200);

		/* USER CODE END WHILE */

		/* USER CODE BEGIN 3 */
	}
	/* USER CODE END 3 */
}

uint16_t temRaw = (rawData[0] << 8 | rawData[1]);
        uint16_t humiRaw = (rawData[3] << 8 | rawData[4]);

        temperature = -45 + 175 * (temRaw / 65535.0);
        humidity = 100 * (humiRaw / 65535.0);

        int uartLength=sprintf(logdata,"temperature:%.2f   humidity:%.2f \r",temperature,humidity);

        HAL_UART_Transmit(&huart1, logdata, uartLength, 0xff);