【STM32】I2C练习,SHT3X温度传感器的数据读取

前言

工程的配置可以参考我的上一篇文章,两个不同地址的传感器可以挂载在一条总线上也可以和我一样分别在两个总线上,配置方法是一样的,这里提供代码进行参考。【STM32】I2C练习,HAL库读取MPU6050角度陀螺仪

sht3x.c

#include "sht3x.h"

static int16_t Sht3xAddr = 0x44 << 1; // 读写位0x88
SHT3XDATATYPE Sht3x_Data;

int8_t Sensor_I2C1_Read(uint16_t DevAddr, uint8_t *oData, uint16_t DataLen)
{
	return HAL_I2C_Master_Receive(&hi2c1,DevAddr,oData,DataLen,1000);
}

int8_t Sensor_I2C1_Write(uint16_t DevAddr, uint8_t *iData, uint16_t DataLen)
{
	return HAL_I2C_Master_Transmit(&hi2c1,DevAddr,iData,DataLen,1000);
}

void Sht3x_Read_Data(void)
{
	uint8_t Read_Buf[6];
	
	Read_Buf[0] = 0x24;
	Read_Buf[1] = 0x0b;
	Sensor_I2C1_Write(Sht3xAddr, Read_Buf, 2);
	Sensor_I2C1_Read(Sht3xAddr,Read_Buf, 6);
	
	Sht3x_Data.Temperature = (uint16_t)((Read_Buf[0]<<8) | Read_Buf[1]);		//温度拼接
	Sht3x_Data.Humidity = (uint16_t)((Read_Buf[3]<<8) | Read_Buf[4]);			//湿度拼接

	Sht3x_Data.Temperature = (175.0f * (Sht3x_Data.Temperature / 65535.0f) - 45.0f);    // T = -45 + 175 * tem / (2^16-1)
	Sht3x_Data.Humidity = (100.0f * Sht3x_Data.Humidity / 65535.0f);           		    // RH = hum*100 / (2^16-1)
}


sht3x.h

#ifndef __SHT3X_H
#define __SHT3X_H

#include "main.h"

typedef struct{
	float Temperature;
	float Humidity;
}SHT3XDATATYPE;

extern SHT3XDATATYPE Sht3x_Data;
extern I2C_HandleTypeDef hi2c1;

int8_t Sensor_I2C1_Read(uint16_t DevAddr, uint8_t *oData, uint16_t DataLen);
int8_t Sensor_I2C1_Write(uint16_t DevAddr, uint8_t *iData, uint16_t DataLen);

void Sht3x_Read_Data(void);

#endif


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凉开水白菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值