STM32学习之SHT20温湿度传感器

2023-10-27

一、产品综述

SHT20, 新一代 Sensirion 湿度和温度传感器在尺寸与智能方面建立了新的标准:它嵌入了适于回流焊的双列扁平无引脚 DFN 封装, 底面 3 x3mm ,高度 1.1mm。传感器输出经过标定的数字信号,标准 I 2 C 格式。SHT20 配有一个全新设计的 CMOSens®芯片、一个经过改进的电容式湿度传感元件和一个标准的能隙温度传感元件,其性能已经大大提升甚至超出了前一代传器(SHT1x 和 SHT7x)的可靠性水平。例如,新一代湿度传感器,已经经过改进使其在高湿环境下的性能更稳定。每一个传感器都经过校准和测试。在产品表面印有产品批号,同时在芯片内存储了电子识别码-可以通过输入命令读出这些识别码。此外,SHT20的分辨率可以通过输入命令进行改变(8/12bit乃至12/14bit的 RH/T),传感器可以检测到电池低电量状态,并且输出校验和,有助于提高通信的可靠性。由于对传感器做了改良和微型化改进,因此它的性价比更高-并且最终所有设备都将得益于尖端的节能运行模式。可以使用一个新的测试包 EK-H4 对SHT20进行测试。

二、精度与量程

温度

在这里插入图片描述

相对湿度

在这里插入图片描述

三、接口定义

在这里插入图片描述

四、程序设计

相信来看本帖的同学对SHT20有一定的了解,所以这里直奔主题,关于SHT20的具体说明可看文末的中、英文数据手册和例程。

SHT20采用的I2C通信,基本命令如下表:
在这里插入图片描述

其中主机通讯的时序如图
在这里插入图片描述
首先发送写地址,再发送命令,然后是读地址,随后等待测量即可,测量时间如下图,传感器内部设置的默认分辨率为相对湿度 12位和温度 14位。45发送NACK时可取消校验。
在这里插入图片描述
下面是读取数据的代码,0x40是主机地址,先发送写命令,然后写入触发测量命令,再写入读命令,准备接收数据,数据一共三字节,依次是数据高字节、低字节、校验字节。

SHT20_ADDRESS  = 0x40;

u16 SHT20_Get_Data(u8 Cmd)
{
	u16 data;
	u8 addr, checksum;
	u8 buf[2];
  
    addr = SHT20_ADDRESS << 1;		//IIC地址是7bit,这里需要左移1位,bit0:1-读	0-写
	
	IIC_Start();					//起始信号
	
	IIC_Write_Byte(addr);			//发送设备地址(写)
	IIC_Wait_Ack();					//等待应答
	
	IIC_Write_Byte(Cmd);			//发送命令
	IIC_Wait_Ack();
	
	IIC_Start();					//重启信号
	
	IIC_Write_Byte(addr + 1);		//发送设备地址(读)
	IIC_Wait_Ack();
	
	delay_ms(70);					//等待测量
	
	buf[0] = IIC_Read_Byte();		//数据高位
	IIC_Ack();						//产生ACK应答
	buf[1] = IIC_Read_Byte();		//数据低位
	IIC_Ack();						//产生ACK应答  如果这里不应答  则不传送校验位
	
	checksum = IIC_Read_Byte();		//校验位
	IIC_NAck();						//不应答
	
	IIC_Stop();						//结束信号
	
	data = (buf[0] << 8) + buf[1];
	
	if(CRC_Check(buf, 2, checksum) == 0)		//校验
	{
		if(Cmd == SHT20_Measurement_T_HM)
		{
			data = (175.72 * data / 65536 - 46.85) * 10;	//温度计算公式
		}
		else data = (125.0 * data / 65536 - 6.0) * 10;		//湿度计算公式
		
		return data;
	}
	else return 0xFFFF;										//校验不通过返回0xFFFF
}

SHT20采用的是CRC8校验、模型为X8 + X5 +X4 +1,即CRC_MODEL = 0x131。
CRC校验的代码如下

#define CRC_MODEL 0x131

u8 CRC_Check(u8 *ptr, u8 len, u8 checksum)
{
    u8 i; 
    u8 crc = 0x00; 				//计算的初始crc值 
 
    while(len--)
    {
        crc ^= *ptr++;  		//每次先与需要计算的数据异或,计算完指向下一数据  
		
        for (i = 8; i > 0; --i) //下面这段计算过程与计算一个字节crc一样 
        { 
            if (crc & 0x80)
			{
				crc = (crc << 1) ^ CRC_MODEL;
			}    
            else
                crc = (crc << 1);
        }
    }
 
    if(checksum == crc)
	{
		return 0;
	}
	else return 1;
}

源代码和中英文手册下载地址

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32学习之SHT20温湿度传感器 的相关文章

  • 长篇图解java反射机制及其应用场景

    一 什么是java反射 在java的面向对象编程过程中 通常我们需要先知道一个Class类 然后 new 类名 方式来获取该类的对象 也就是说我们需要在写代码的时候 编译期或者编译期之前 就知道我们要实例化哪一个类 运行哪一个方法 这种通常
  • 中国的官办经济-陈经

    这本书写的不错 从建国到2006年的中国的经济进行了梳理 说明了到底为何中国的经济具有这么大的竞争力 我深深认可其中对于中国人民勤劳 勇敢的描写 经济嘛 就是干活创造价值 中国人民是世界上最勤劳的民族 如果没有走错了 如闭关锁国 一定会跟上
  • Google语法

    目录 Google语法 搜索语法 intitle inurl intext link site filetype related 通配符 注意 快照 cache 举例 Google语法 总结一下平时经常用到的搜索引擎语法 基本都适用于百度搜
  • 项目上传svn 服务器

    1 选中项目右键到 team gt share Project 2 进入到选择界面 选择svn 进入下一个界面 现在可以看到的界面是要选择共享资源的地址了 如果之前已经共享过就会保存在下面了 没有的话我们就自己创建新的资源位置 就是第一个选

随机推荐

  • Blender基础:UV编辑器、UV坐标、UV映射、UV展开

    目录 1 纹理 2 UV编辑器 3 UV坐标 4 UV映射 5 UV展开 6 纹理绘制 7 自动UV展开 8 手动UV展开 9 UV布局调整 10 练习 弯曲文字 1 纹理 纹理Texture 又叫贴图 一般来说 物体的表面不是纯色的 由贴
  • springboot 定时任务(线程配置,并行【同步】、异步等)

    1 定时任务实现方式 SpringBoot自带的Scheduled 可以将它看成一个轻量级的Quartz 而且使用起来比Quartz简单许多 本文主要介绍 执行方式 单线程 串行 多线程 并行 2 创建定时任务 Component Enab
  • 【云原生之Docker实战】使用Docker部署StackEdit在线Markdown编辑器

    云原生之Docker实战 使用Docker部署StackEdit在线Markdown编辑器 一 StackEdit介绍 1 StackEdit简介 2 StackEdit中文版简介 3 StackEdit中文版功能 二 检查本地Docker
  • 关于linux /etc/sysconfig/network中的NOZEROCONF=yes参数

    关于linux etc sysconfig network中的NOZEROCONF yes参数 今天从CSSD Fails to Join the Cluster After Private Network Recovered if ava
  • 【算法研究】Bresenham画线算法

    作者 gnuhpc 出处 http www cnblogs com gnuhpc 0 算法目的这个算法是要画一条平滑的直线 这个工作的难点是确定两点之间的那些像素点 使其近可能的靠近手工绘制的直线 1 基本算法描述现在我们要在一个光栅格子上
  • Django独有报错

    You called this URL via POST but the URL doesn t end in a slash and you have APPEND SLASH set Django can t redirect to t
  • vcruntime140.dll文件下载安装方法以及一些注意事项

    其实vcruntime140 dll文件是Microsoft Visual C Redistributable Packages for Visual Studio 2015中的一个重要组件 它包含了Windows操作系统和其他应用程序所需
  • 加拿大见!拓数派受邀参加第17届PostgreSQL国际开发者大会(PGCon 2023)

    5月30日 6月2日 作为疫情后的第一场线下会议第17届 PostgreSQL 国际开发者大会 PGCon 2023 将在加拿大渥太华隆重举行 拓数派将作为黄金赞助商 受邀参与本次盛会 与全球数据库爱好者们共聚加拿大 此外 拓数派 PieC
  • 由“2013软考之不完美结果”来剖析自己的学习方式误区

    2013年5 25日的软考 昨天晚上可以查成绩了 当时同学走到我面前让查成绩时 心开始跳了 手开始抖了 那一刻的紧张 那一刻的激动 既担心又想知道结果 别急别急 成绩看到了 不高 上午50 下午45 也就是说按百分制算的话 下午只考了60分
  • VScode 安装 ESP-idf 5.0报错:LookupError: unknown encoding: utf-8,gbk

    原因 说明从 pip 源返回的是 utf 8 gbk 编码类型 但是 pip 不能解析 请求了一下 pip 源后发现确实如此 尝试更新 pip python m pip install upgrade pip 但也会报同样的问题 这是因为镜
  • 服务器不能全屏显示,远程服务器如何全屏显示

    远程服务器如何全屏显示 内容精选 换一换 本节操作介绍在Windows和Linux环境中使用SSH密码方式远程登录Linux云服务器的操作步骤 弹性云服务器状态为 运行中 弹性云服务器已经绑定弹性公网IP 绑定方式请参见绑定弹性公网IP 所
  • firemonkey开发通讯录app

    1 添加AddressBook1 MultiView1 speedbuttonX3 labelX editboxX3 buttonX2 listbox组件 2 对listbox右键additem选择tsearchbox类型 3 设置Mult
  • Jlink SWD和Jtag下载失败总结

    学习STM32或者说使用Jlink的同学都有很多的困扰 我把自己遇到的情况总结一下 并给出解决方法 希望后来人少走点弯路 第一次写博客 勿喷 一 提示No Jlink Device Found 错误 没有发现Jlink 可能原因 1 Jli
  • 函数式编程总结

    函数式编程的概念 函数式编程理念来自于数学中的函数 函数的概念 对于两个变量x和y 如果每给定x的一个值 都有一个y值与之对应 那么我们就说y是x的函数 如下即是一些函数 f x 5x 2 4x 3 g x 2f x 5 10x 2 8x
  • cmath常用库函数

    cmath int abs int i double fabs double x long labs long n double exp double x double log double x double pow double x do
  • KVM 性能调优

    CPU Tuning Cache share tuning 对于物理 CPU 同一个 core 的 threads 共享 L2 Cache 同一个 socket 的 cores 共享 L3 cache 所以虚拟机的 vcpu 应当尽可能在同
  • 深度学习日记

    一 基于连续帧排序的语言分割 BubbleNets Learning to Select the Guidance Frame in Video Object Segmentation by Deep Sorting Frames 论文地址
  • cmd命令行如何快速进入当前目录

    我们在cmd命令行中如果想要进入某一个目录 相信大家一般都是先按D 或者E 进入相应的盘符 然后再输入cd 当前目录 以下有两种快捷方式可以进入当前目录 1 部分绿色windows版本可以支持以下操作 按住shift 鼠标右键 即可看见 在
  • 华为机试HJ8 合并表记录

    HJ8 合并表记录 Python 题目 解题思路 代码 结果 题目 解题思路 1 题目中没有说有多组输入 不考虑循环 2 结果列表先初始化 3 键值对的处理简单 合并按位置加和即可 4 要记录出现过的键 最后输出要决定显示哪些键值对 代码
  • STM32学习之SHT20温湿度传感器

    一 产品综述 SHT20 新一代 Sensirion 湿度和温度传感器在尺寸与智能方面建立了新的标准 它嵌入了适于回流焊的双列扁平无引脚 DFN 封装 底面 3 x3mm 高度 1 1mm 传感器输出经过标定的数字信号 标准 I 2 C 格