STM32驱动温湿度传感器HTU21D

最新更新时间:2019-04-02来源: eefocus关键字:STM32驱动  温湿度传感器  HTU21D 手机看文章 扫描二维码
随时随地手机看文章

1.简介

法国Humirel公司新一代HTU21D温度和湿度传感器在尺寸与智能方面建立了新的标准:它嵌入了适于回流焊的双列扁平无引脚DFN 封装, 底面3x3mm ,高度1.1mm。传感器输出经过标定的数字信号,标准 I2C 格式。


这里写图片描述

HTU21D温度和湿度传感器为OEM应用提供一个准确可靠的温湿度测量数据。通过一个微控 

制器的接口和模块连接达到温度和湿度数字输出。HTU21D 的分辨率可以通过输入命令进行改变(8/12bit 乃至12/14bit 的RH/T),传感器可以检测到电池低电量状态,并且输出校验和,有助于提高通信的可靠性。


2.规格参数

这里写图片描述

25摄氏度,3.3V供电时的电气特性如下:

这里写图片描述


印刷板设计注意:


如果SCL 和SDA 信号线相互平行并且非常接近,有可能导致信号串扰和通讯失败。解决方法是在两个信号线之间放置VDD 或GND,将信号线隔开,或使用屏蔽电缆。此外,降低SCL 频率也可能提高信号传输的完整性。须在电源引脚(VDD, GND)之间加一个100nF 的去藕电容,用于滤波。此电容应尽量靠近传感器。


这里写图片描述

引脚定义:

这里写图片描述

本实验采用的为成品HTU21D模块,直接与 STM32 开发板连接即可。


引脚 说明

电源引脚 (VDD, GND) HTU21 的供电范围为 1.8VDC - 3.6VDC,推荐电压为 3.0V。电源(VDD)和接地(VSS)之间须连接一个0.1uF的去耦电容,且电容的位置应尽可能靠近传感器。

串行时钟输入(SCK) SCK 用于微处理器与 HTU21 之间的通讯同步。由于接口包含了完全静态逻辑,因而不存在最小 SCK 频率。

串行数据 (DATA) DATA 引脚为三态结构,用于读取传感器数据。当向传感器发送命令时, DATA 在 SCK 上升沿有效且在 SCK 高电平时必须保持稳定。 DATA 在 SCK 下降沿之后改变。当从传感器读取数据时, DATA 在 SCK 变低以后有效,且维持到下一个 SCK 的下降沿。为避免信号冲突,微处理器应驱动 DATA 在低电平。需要一个外部的上拉电阻(例如: 10kΩ)将信号提拉至高电平。上拉电阻通常已包含在微处理器的 I/O 电路中。

3.通讯过程

Htu21d遵循标准的 IIC 进行通信,关于 IIC 的介绍请看—>IIC专题(一)——基础知识准备。本文设计也多参考此篇文章–>STM32F10x_模拟I2C读写EEPROM。


3.1 IIC启动信号

启动传输,发送一位数据时,包括 DATA 线在 SCK 线高电平期间一个向低电平的跳变。 

这里写图片描述

这里写图片描述

3.2 IIC停止信号

终止传输,停止发送数据时,包括 DATA 线在 SCK 线高电平期间一个向高电平的跳变。


这里写图片描述

3.2 IIC数据传输

SCL时钟电平为低, 可以改换SDA数据线的电平,在SCL上升沿的过程将SDA数据发送出去。SCL为高电平时,SDA上的数据保持稳定。




I2C 是以字节(8位)的方式进行传输,总线上每传输完1字节之后会有一个应答信号,应答信号总是由接收方来产生。通信过程的时钟由主器件(主机)提供。


IIC 写一字节:


这里写图片描述

这里写图片描述

数据发送结束,进行应答操作。 

0:表示从机应答,可以继续下一步操作; 

1:表示从机非应答,不能进行下一步操作。


IIC读一字节:


IIC读取操作类似于发送,只是传输数据方向相反。


这里写图片描述

这里写图片描述

3.3 IIC应答信号处理

等待应答:

这里写图片描述

产生应答:


这里写图片描述

产生非应答:


这里写图片描述

4.HTU21D数据测量

测量命令如下表:

这里写图片描述

本文采用非保持主机: 

//非主机模式


#define HTU_TEMP    0xf3

#define HTU_HUMI    0Xf5


在非主机模式下, MCU 需要对传感器状态进行查询。此过程通过发送一个启动传输时序,之后紧接着是如图所示的I2C 首字节(1000’0001)来完成。如果内部处理工作完成,单片机查询到传感器发出的确认信号后,相关数据就可以通过MCU 进行读取。如果测量处理工作没有完成,传感器无确认位(ACK)输出,此时必须重新发送启动传输时序。


这里写图片描述

传感器初始化:

这里写图片描述

传感器数据读取与转换:


传感器内部设置的默认分辨率为相对湿度12位和温度14 位。 SDA 的输出数据被转换成两个字节的数据包,高字节MSB 在前(左对齐)。每个字节后面都跟随一个应答位。两个状态位,即LSB 的后两位在进行物理计算前须置‘0’。


转换计算如下图:

这里写图片描述

源代码实现:

这里写图片描述


显示方式:


本实验通过串口打印和 TFTLCD 显示,串口打印有助于程序的调试。


这里写图片描述

对于测量出来float的数值如何直接显示到LCD上,代码中简要的介绍了两种方式: 

LCD显示方式1:sprintf函数将结果打印到test数组里,转换成字符串显示(LCD_ShowString)。 

LCD显示方式2:将得到的数值拆分成整数和小数直接显示在液晶(LCD_ShowxNum)。 

液晶显示直接参考正点原子的驱动。



关键字:STM32驱动  温湿度传感器  HTU21D 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/2019/ic-news040243700.html

上一篇:STM32CubeMX学习教程之十:硬件I2C读写AT24C02
下一篇:stm32f3的i2c使用小结

推荐阅读

STM32驱动直流电机的程序与电路设计
本文介绍如何使用STM32F103单片机,通过官方固件库,设置高级定时器TIM1输出嵌入死区的互补PWM,来驱动直流电机的程序设计与电路设计。硬件电路采用IR2110S芯片作为mos管的驱动,驱动IRF840组成的H桥。IR2110S芯片使用中,有一个比较难理解的点——自举电容,本文对其原理也有涉及。原理图文件上图是系统的简化原理图,左侧是单片机。中间是IR2110S芯片,为了方便讲解,把芯片内部结构列出一些。右侧是MOS管组成的H桥。其中M是直流电机,有正反转。其中VCC是15V,MOTOR_VCC是24V,电压可以改变,最大不超过500V。单片机一般是3.3V或5V,无法直接驱动电机。可以借助H桥来实现对直流电机的控制。H桥由于
发表于 2022-02-17
<font color='red'>STM32</font><font color='red'>驱动</font>直流电机的程序与电路设计
STM32 驱动12864液晶显示汉字、图片、画点、横线、竖线、斜线
我做本实验的软件平台为MDK软件,选用STM32VET6,12864液晶屏5v供电采用并行接法。之前本来想网上找一个现成的程序实验一下,但都没找到合适的,于是就自己编写了一个,最终可在12864液晶屏上面任意位置显示任意内容。在此贴出整个工程文件,希望对大家有帮助!本实验的整个工程文件可在此处下载:http://download.csdn.net/detail/u010173859/5908815/********************************************************************************** * 文件名  :main.c * 描述&n
发表于 2022-01-26
STM32 TFTLCD原理与驱动与指令介绍
一,TFTLCD简介TFTLCD : 薄膜晶体管液晶显示器在液晶显示屏的每一个像素上都设置有一个薄膜晶体管(TFT)克服非选通时的串扰,使显示液晶屏的静态特性与扫描线数无关,提高图像质量TFTLCD优点:亮度好,对比度高,层次感强,颜色鲜艳,是目前最主流的LCD显示器广泛用于电视,手机,电脑,平板等各种的电子产品二,ALINETEK 2.8寸 TFTLCD模块介绍240*320分辨率16位真彩显示(65536色)自带电阻触摸屏自带背光电路三,ALINETEK 2.8寸 TFTLCD模块原理图1,2.8寸LCD引脚2,TFTLCD 为对外接口,引出2*17排针3,电阻触摸屏驱动XPT20464,触摸屏信号控制TFT2.8 12-15引
发表于 2021-12-01
<font color='red'>STM32</font> TFTLCD原理与<font color='red'>驱动</font>与指令介绍
stm32实用篇6:HAL库 DS18B20 驱动
DS18B20是很常用的温度传感器,精度很高,测试结果如下:整个驱动程序基本是根据时序写的。要注意的地方有两个:1 读数据的时间 < 15us,这个值要实际测试,跟自己实现的延时函数效率有关,我使用的是10us,这个值如果设置的不合理,会直接导致整个数据读取出错;2 建议使用DS18B20_GetTemp_SkipRom函数,不推荐使用设备号相关的那个读取函数,不太稳定; HAL库驱动程序源码:bsp_ds18b20.c/**  ******************************************************************************  * @fi
发表于 2021-11-03
<font color='red'>stm32</font>实用篇6:HAL库 DS18B20 <font color='red'>驱动</font>
stm32实用篇5:HAL库 DHT11 驱动
DHT11是很常用的温湿度传感器,时序也比较简单,如下所示:直接给出HAL库的驱动:1 微秒级延时函数HAL库并没有直接的微秒级延时函数,下面是自己实现的微秒堵塞延时函数(使用定时器TIM3);/** * @brief 微秒级延时 */void bsp_delay_us(uint16_t us){ __HAL_TIM_SET_COUNTER(&htim3, 0); HAL_TIM_Base_Start(&htim3); while (__HAL_TIM_GET_COUNTER(&htim3) != us); HAL_TIM_Base_Stop(&htim3);}2 配置DHT11数据引脚的输出模
发表于 2021-11-02
<font color='red'>stm32</font>实用篇5:HAL库 DHT11 <font color='red'>驱动</font>
Linux之ARM(IMX6U)裸机模仿STM32驱动开发格式
模仿 STM32 驱动开发格式实验C 语言编写 LED 灯驱动的时候,每个寄存器的地址我们都需要写宏定义,使用起来非常的不方便。我们在学习 STM32 的时候,可以使用“GPIOB->ODR”这种方式来给GPIOB 的寄存器 ODR 赋值,因为在 STM32 中同属于一个外设的所有寄存器地址基本是相邻的(有些会有保留寄存器)。因此我们可以借助 C 语言里面的结构体成员地址递增的特点来将某个外设的所有寄存器写入到一个结构体里面,然后定义一个结构体指针指向这个外设的寄存器基地址,这样我们就可以通过这个结构体指针来访问这个外设的所有寄存器。同理, I.MX6U 也可以使用这种方法来定义外设寄存器,本次我们就模仿 STM32 里面的寄
发表于 2021-10-29
Linux之ARM(IMX6U)裸机模仿<font color='red'>STM32</font><font color='red'>驱动</font>开发格式
小广播
设计资源 培训 开发板 精华推荐

何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2022 EEWORLD.com.cn, Inc. All rights reserved