当前位置: 首页 > news >正文

【STM32】HDC2080温湿度计驱动

目录

一、简单介绍

典型应用

原理图

二、cubemx配置

三、驱动开发

写入

单字节写

多字节写

读取

单字节读

多字节读

四、驱动附录

HDC2080.h

HDC2080.c


一、工程链接

STM32芯片HAL库驱动HDC2080资源-CSDN下载

二、简单介绍

HDC2080是TI的一款低功耗温湿度数字传感器。

温度采集精度典型值是0.2摄氏度,湿度为2%。

低功耗,供电电压为1.62~3.6V,适合纽扣电池供电的场景。

可以用在物联网及智能家居上。

睡眠功耗为50nA,适合电池供电的场景。芯片有2种测量模式——触发模式自动模式。

触发模式下,芯片接收I2C指令后转换,转换完毕就继续睡眠。

自动模式下,芯片周期性转换,有7种周期可以配置。

就是下面这7种:

芯片上电后默认进睡眠模式,等待I2C总线上出现配置转换时间/触发转换/读写指令。

如果接收到转换指令,就开始转换,可以监测DRDY引脚的电平作来判断是否转换完毕。转换完毕就又睡眠。

当环境湿度太大,以至于传感器表面有水汽凝结怎么办?芯片贴心地准备了一个加热器,可以加热芯片使水汽蒸发。

加热过程电流较大,谨慎使用。

只有一个引脚对外输出中断状态,但是有4种中断:过温低温,过湿过干。

采取的是中断优先级,四个都开启则只响应过温,按顺序类推。

典型应用

建议在VDD和GND直接增加0.1uF电容,PCB上建议去除HDC2080底下的铜皮,并且在芯片周围开槽来实现热隔离以增强性能。

最好使用免洗焊接,尽量不要返工哦。

原理图

HDC2080的ADDR引脚用于配置HDC2080的I2C总线地址。

DRDY/INT引脚有数据准备和中断的功能,是开漏输出的。

笔者使用STM32L051K8U6单片机作为MCU,是一款低功耗MCU。

三、cubemx配置

开启调试口、系统唤醒PA0

开启I2C

时钟使用内部HSI,16MHz

配置工程路径等后即可生成。

四、驱动开发

芯片使用的是I2C可以单字节读写,也可以多字节读写。

写入

单字节写入和多字节写入比较类似,取绝于发送地址后接着发送多少字节。

单字节写

/* auto measure at 5 hz and set DRDY */HDC2080_WR_Reg(0x0E, 0x77);

多字节写

一个LSB约为0.644摄氏度,设置低门槛10度,高门槛28度,则寄存器值分别是78和106。

/* configure temperature threhold */HDC2080_WR_Regs(0x0A, tempTh, 2);

读取

读取寄存器内容,需要先发送一个寄存器地址告诉芯片要从哪里开始读。

单字节读

HDC2080_RD_Reg(0xFF, &HDC2080_Reg.id1_high);

多字节读

/* read all registers value */HDC2080_RD_Regs(0x00, &HDC2080_Reg.temp_low, 16);

主循环周期读取温湿度值,在调试界面显示出来。

当芯片温度高于28度时DRDY引脚拉高,低于28度时自动恢复低电平

五、驱动附录

HDC2080.h

#ifndef HDC2080_H
#define HDC2080_H#include "main.h"
#include "stdint.h"
#include "i2c.h"#define HDC2080_I2C hi2c1
#define HDC2080_ADDR 0x80typedef struct
{uint8_t temp_low;uint8_t temp_high;uint8_t humid_low;uint8_t humid_high;uint8_t interrupt;uint8_t temp_max;uint8_t humid_max;uint8_t interrupt_enable;uint8_t temp_offset;uint8_t humid_offset;uint8_t temp_th_low;uint8_t temp_th_high;uint8_t rh_th_low;uint8_t rh_th_high;uint8_t reset;uint8_t config;uint8_t id0_low;uint8_t id0_high;uint8_t id1_low;uint8_t id1_high;
}HDC2080_RegType;uint8_t HDC2080_Init();
void HDC2080_Trigger();
void HDC2080_Reset();
void HDC2080_RD_Temperature(float* temp);
void HDC2080_RD_Humidity(float* humid);#endif

HDC2080.c

#include "HDC2080.h"HDC2080_RegType HDC2080_Reg;uint8_t tempTh[2] = {78, 106};void HDC2080_RD_Reg(uint8_t addr, uint8_t* dat)
{HAL_I2C_Mem_Read(&HDC2080_I2C, HDC2080_ADDR, addr, 1, dat, 1, 0xFFFF);
}void HDC2080_WR_Reg(uint8_t addr, uint8_t val)
{HAL_I2C_Mem_Write(&HDC2080_I2C, HDC2080_ADDR, addr, 1,  &val, 1, 0x100);
}void HDC2080_RD_Regs(uint8_t addr, uint8_t* dat, uint8_t len)
{HAL_I2C_Mem_Read(&HDC2080_I2C, HDC2080_ADDR, addr, 1, dat, len, 0xFFFF);
}void HDC2080_WR_Regs(uint8_t addr, uint8_t* val, uint8_t len)
{HAL_I2C_Mem_Write(&HDC2080_I2C, HDC2080_ADDR, addr, 1,  val, len, 0x100);
}void HDC2080_Reset()
{HDC2080_WR_Reg(0xE, 0x80);
}void HDC2080_Trigger()
{HDC2080_WR_Reg(0xF, 1);
}void HDC2080_Cfg()
{/* RESET */HDC2080_Reset();HAL_Delay(5);/* enable temperature threhold interrupt */HDC2080_WR_Reg(0x07, 0x60);/* configure temperature threhold */HDC2080_WR_Regs(0x0A, tempTh, 2);/* auto measure at 5 hz and set DRDY */HDC2080_WR_Reg(0x0E, 0x77);/* read all registers value */HDC2080_RD_Regs(0x00, &HDC2080_Reg.temp_low, 16);/* read id values */HDC2080_RD_Regs(0xFC, &HDC2080_Reg.id0_low, 4);
}uint8_t HDC2080_Init()
{uint8_t ret = 0;HDC2080_RD_Reg(0xFF, &HDC2080_Reg.id1_high);if (HDC2080_Reg.id1_high != 0x7){ret = 1;}else{HDC2080_Cfg();HDC2080_Trigger();}return ret;
}void HDC2080_RD_Temperature(float* temp)
{HDC2080_RD_Regs(0x00, &HDC2080_Reg.temp_low, 2);*temp = (float)(HDC2080_Reg.temp_low + HDC2080_Reg.temp_high * 256) / 65536.0f * 165.0f - 40.5f;
}void HDC2080_RD_Humidity(float* humid)
{HDC2080_RD_Regs(0x02, &HDC2080_Reg.humid_low, 2);*humid = (float)(HDC2080_Reg.humid_low + HDC2080_Reg.humid_high * 256) / 65536.0f * 165.0f - 40.5f;
}
http://www.dtcms.com/a/597214.html

相关文章:

  • Highcharts 在 AMD 与 CommonJS 环境下的安装与配置指南
  • 阿里云编辑建设好的网站济南网络优化厂家
  • 如何给 MacOS 更新到指定版本系统
  • jEasyUI 合并单元格详解
  • AJAX学习 ---- axios体验
  • 电子商务网站开发基本流程建立链接
  • MySQL第五次作业(触发器,存储过程)
  • HORIBA MEXA-324M:双组分汽车尾气测量仪技术说明
  • C++进阶:(八)基于红黑树泛型封装实现 map 与 set 容器
  • 网站制作资质wordpress用户名密码注册
  • Redis(1)
  • 《中医基础理论》- 2.哲学基础之藏象学说-心系统详解
  • 智慧养老如何托起“有温度的银发未来”?
  • 做网站编程在程序网站被别人做镜像
  • win2008 r2内存爆满导致前端程序崩溃
  • 【OpenCV + VS】 OpenCV图像色彩空间转换: 从BGR到HSV和灰度
  • 郓城住房和城乡建设局网站淘宝关键词优化怎么弄
  • 简约 时尚 高端 网站建设表白二维码制作网站
  • Uniapp运行MuMu模拟器
  • uniapp uniim ios配置消息推送
  • 如何监测 Vue + GeoScene 项目中浏览器内存变化并优化性能
  • 使用Rancher快速部署K8S集群
  • 建立网站英文翻译数字营销沙盘大赛攻略
  • 数据结构(长期更新)第7讲:栈
  • 企业网站设计过程中wordpress 侧边栏插件
  • 【20251028】linux上面拉取仓库,以Ubuntu虚拟机为例
  • 第8节 计算机病毒概念的正式化和安全行业的兴起
  • 使用C#代码在 PDF 中创建目录
  • NAT基础原理
  • 多粒子模型--交通堵塞2