SHT20读取温湿度,基于cubemx

基于cubemx生成的hal库读取sht20传感器的值。
主控使用的是f407vet6,使用keil5.

**

一,生成iic底层驱动代码。

**

打开cubemx,选择对应的主控,同时打开串口1,和iic1.
打开串口是为了将温度的值,输出到串口助手上。
这一步,网上有许多教程,在此就不做赘述了。
将生成好的工程,使用keil打开。

**

二 ,配置串口函数

**
在生成的 usart,c底部加上

#ifdef __GNUC__
	#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
	#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif
PUTCHAR_PROTOTYPE
{
		HAL_UART_Transmit(&huart1 , (uint8_t *)&ch, 1, 0xFFFF);
		return ch;
}

加上这一句,就可以正常的使用printf()。来输出了。

**

三 ,认识iic驱动函数

这是我们读取数据所使用的函数
第一个参数,使我们的iic的结构体。
第二个参数,读取数据,或者发送指令的地址
第三个参数 读取,发送数据的指针
第四个 数据的大小
第五个,超时时间
**

HAL_I2C_Master_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout)

**

四,编写驱动函数

**

芯片手册,寄存器
我们只需要用到前两个寄存器的值,用来读取温度,和湿度。所谓的保持主机,非保持主机,就是在读取数据的时候,iic总线能不能执行其他操作。
用户寄存器就是我们用来配置sht20的温湿度数据的精度,使用默认精度。

sht20的地址是0x80 ,写数据采用0x80 ,读数据使用0x81.

在这里插入图片描述
读取数据的时序图,如上图所示。
首先发送 0x80 ,在发送读取温湿度的指令,在发送0x81 ,读取数据,
最后一位是校验位,本次实验中没有读取。知道了以上步骤,就可以来读取温湿度了。

sht20.h 的宏定义如下

#define  add_w  0x80  //d地址写
#define  add_r  0x81  //地址读
#define measure_temp 0xe3  //读取温度
#define measure_hum 0xe5   //读取湿度
	 
	 #define user_code_w 0xe6 //Óû§¼Ä´æÆ÷д

#define user_code_r 0xe7 //Óû§¼Ä´æÆ÷¶Á

#define RST_code 0xfe //Èí¸´Î»

读取温度函数如下

float   read_temp(uint8_t cmd)
{
	uint8_t date=cmd,buff[2];
	uint16_t temp=0;
	float temp1;
	HAL_I2C_Master_Transmit(&hi2c1,add_w,&date,1,100);
	//  发送写指令,在将读取温度的指令发送
	HAL_I2C_Master_Receive(&hi2c1,add_r,buff,2,100);
	//发送读指令,将读取数据的指针传过去
	
	//temp=(buff[0]<<8)|buff[1];
	temp=(uint16_t)buff[0];
	temp=temp<<8;
		temp=buff[1]|temp;
因为读取的数据是两个八位数,转换为16位
	temp1=-46.85+175.72*((float)temp/65536);
	转换公式,来自数据手册,见下图。
	
	
	return temp1;
	
	
}

读取湿度函数

float   read_humi(uint8_t cmd)
{
	uint8_t date=cmd,buff[2];
	uint16_t humi=0;
	float temp1;
	HAL_I2C_Master_Transmit(&hi2c1,add_w,&date,1,100);
	HAL_I2C_Master_Receive(&hi2c1,add_r,buff,2,100);
	
	//temp=(buff[0]<<8)|buff[1];
	humi=(uint16_t)buff[0];
	humi=humi<<8;
		humi=buff[1]|humi;
	temp1=-6+125*((float)humi/65536);
	
	return temp1;
	
	
}

在这里插入图片描述
在这里插入图片描述

程序编写完成以后。主循环里面进行调用

在这里插入图片描述
查看上位机的数据
在这里插入图片描述
sht20 读取大功告成。

有什么不明白的地方,留言告诉我就好了。

  • 4
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值